Lire un une chaine dans un fichier sans longueur fixe. [Résolu]

Signaler
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
-
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Bonjour à tous,

Tous est à peu près dit dans le titre.
Je m'explique je dois copier une sous chaine de caractère dans un fichier, je ne sais pas par avance
la longueur (la longuer peut varier)qu'elle fait , je sais juste qu'il y a un CRLF qui me dit la fin de ma ligne.
je pensais utiliser copy(ligne,debut,fin) mais cela ne fonctionne pas.
si vous avez une astuce pour moi car je dois dire que je tourne en rond.

Merci d'avance
couf

6 réponses

Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Dans ta boucle :

   for N:=1 to ifcsum.Count - 1 do

  begin

segment:=copy(ifcsum[I],1,5);  là c'est N normalement...

Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut

Essaie copy(ligne, 1, length(ligne))

Simon
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Merci Simon,

C'est ce que j'ai pensé faire au départ
je te donne une partie de mon source

uses
  classes,
  SysUtils,
  strUtils;

var
  ifcsum : TStringList;
  index,longueur, I, N   : integer;
    mail,segment :string;
    C_mail:char ;
begin
 
  ifcsum:= TStringList.Create;
  ifcsum.LoadFromFile('C:\test\DIFC96A.01');
   for N:=1 to ifcsum.Count - 1 do
  begin
segment:=copy(ifcsum[I],1,5);   <-- ici j'ai une erreur (indice hors limite)
if
segment ='COM41'
 
then
begin
longueur:= (33- length(ifcsum[N])) ;
mail:=copy(ifcsum[N], 33,longueur); <-- ici j'ai  aussi une erreur (indice hors limite)

if
   end;
   end;
     for i: =1 to 100000 do writeln(ifcsum[N]);
end.

c'est pour cela que j'ai dis que je tournais en rond je vois pas pourquoi.
couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Oups,

merci beaucoup, je ne l'avais pas vue,

c'est "presque bon"
cette partie du code

longueur:=(33- length(ifcsum[N])) ;
mail:=copy(ifcsum[N], 33,longueur);
pose problème
en faisant un writeln(longueur), j'obtiens longueur:=-29

couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
Salut Simon,

Oublie c'est réglé Merci beaucoup effectivement length(ifcsum[N]) est > 33 c'est l'inverse que je dois faire merci et excuse moi encore 1000000000 mercis

couf
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Avec plaisir !

Y a des jours comme ça...

Simon