Quelqu'un peut il m'aider à trouver ou je me suis tromper je tourne en rond depuis hier
et je ne trouve rien de rien,
voilà j'ai le code suivant , qui doit doit traiter un texte qui comporte 1600 lignes
il doit normalement à la fin me retourner un texte d'environ 160 lignes
mais au lieu de cela il retourne que la première ligne j'ai beau prendre les choses les étudier mais je ne vois pas où j'ai pu me planter
si quelqu'un veut bien m'aider je l'en remercie d'avance. Je continue à chercher
je sais que 2 paires d'yeux valent souvent mieux qu'une
VOICI LE CODE
****************************************************************************************
****************************************************************************************
program vie;
chaine: array [1..24]of string;
RS,adresse1,adresse2,CP,telephone,p,nb,ligne4, localite,ligne: string;
dec : textfile;
j,i:integer;
civilite: array[1..3] of string =('MR','MM','. ');
procedure inc_tableau ; {procedure qui va mettre
les valeurs récupéré dans le tableau}
begin
chaine[1]:=RS;
chaine[2]:=adresse1;
chaine[3]:=adresse2;
chaine[4]:=cp;
chaine[5]:=localite;
chaine[6]:=telephone;
chaine[7] := nb;
chaine[8]:=p;
end;
procedure Make_csv;
{on va fabriqer un csv à partir d'un TStringlist}
var
N_TS: TStringList;
k, l:integer;
begin
N_TS:= Tstringlist.Create;
N_TS.Delimiter:=';';
for l := 1 to 8 do
N_TS.Insert(l-1,chaine[l]);
ligne4:=ansiReplacestr(N_TS.DelimitedText,'"','');
writeln(dec,ligne4);
For k:=7 downto 0
Do begin
N_TS.Delete(k)
end;
N_TS.Free;
end;
procedure recupvaleur;
{récupération de valeurs dans variables Globale}
begin
RS:=copy (ts[i],1,27);
telephone:= copy (ts[i],28,13);
if telephone[3]='.' then
begin
telephone:= telephone + copy (ts[i+1],42,1);
nb:=copy (ts[i+1],43,2);
p:= copy (ts[i+1],49,6) ;
adresse1:= copy (ts[i+2],1,35);
adresse2:= copy (ts[i+3],1,35);
cp:= copy (ts[i+5],1,5);
localite:= copy (ts[i+5],7 ,35);
end
else
begin
nb:=copy(ts[i],14,2);
p:=copy(ligne,48,5);
adresse1:=copy(ts[i+2],1,35);
adresse2:=copy(ts[i+3],1,35);
cp:= copy(ts[i+4],1,5);
localite:= copy(ts[i+4],6,35);
end;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
TS:= TStringlist.Create;
TS.LoadFromFile('C:\biker\vie\came.txt');
A priori tu essaye de faire un parseur est d'enregistrer le résultat dans un fichier texte. Quand je lis ton code je me dis qu'il y a un énorme problème de conception.
Ensuite il y a des problèmes de logique :
*Pourquoi déclarer ton tableau comme cela : chaine: array [1..24]of string;
Il serait plus avantageux de le faire ainsi
chaine: array [0..23]of string ce qui induirait
//
for 0 := 0 to 7 do
N_TS.Insert(i,chaine[i]);
Ca change rien sauf que ca optimise sacrément ton code (8 soustractions en moins à chaque boucle).
Ensuite :
For k:=7 downto 0 Do
begin
N_TS.Delete(k)
end;
C'est quoi ce Begin/End inutile ??
De plus
For k:=7 downto 0 Do
begin
N_TS.Delete(k)
end;
N_TS.Free;
Quel est l'intéret de supprimer les lignes si tu libères ton StringList immédiatement après ?
if telephone[3]='.' then
begin
telephone:= telephone + copy (ts[i+1],42,1);
nb:=copy (ts[i+1],43,2);
p:= copy (ts[i+1],49,6) ;
adresse1:= copy (ts[i+2],1,35); /////Identique en dessous
adresse2:= copy (ts[i+3],1,35); /////Identique en dessous
cp:= copy (ts[i+5],1,5);
localite:= copy (ts[i+5],7 ,35);
end
else
begin
nb:=copy(ts[i],14,2);
p:=copy(ligne,48,5);
adresse1:=copy(ts[i+2],1,35); /////Identique au dessus
adresse2:=copy(ts[i+3],1,35); /////Identique au dessus
cp:= copy(ts[i+4],1,5);
localite:= copy(ts[i+4],6,35);
end;
Ton If .... Then .... Else est à donc améliorer
Ensuite :
TS:= TStringlist.Create;
TS.LoadFromFile('C:\biker\vie\came.txt');
/////Attention aux StringList quand on charge un fichier dedans : Voir la limitation de tailles.
//Qu'est ce que c'est que ces blocks de mémée ? On travaille avec les Streams Couff
for i:= 0 to TS.Count - 1 do
begin
for j := 1 to 3 do
if civilite[j]=copy(ts[i],1,2) then
begin
recupvaleur;
inc_tableau;
Make_csv;
close(dec); ///Tu fermes ton fichier des la premiere boucle => Conclusion c'est foutu
end
else //Sinon quoi ????????
Franchement Merci, tu as raison je dois utiliser des streams mais je suis guère à l'aise avec.
En Tout cas 2 choses
1) Vos remarques m'ont aidées.
2) Je remarque qu'effectivement si on respecte le règlement cela fonctionne bien
Surtout à tous les autres si vous voulez qu'on vous aides laissez un petit bout de code