Lire un une chaine dans un fichier sans longueur fixe.

Résolu
cs_couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
- 26 oct. 2006 à 14:44
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 26 oct. 2006 à 17:09
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

sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
26 oct. 2006 à 16: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
3
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
26 oct. 2006 à 15:19
Salut

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

Simon
0
cs_couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
26 oct. 2006 à 15:57
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
0
cs_couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
26 oct. 2006 à 16:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
26 oct. 2006 à 16:48
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
0
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
26 oct. 2006 à 17:09
Avec plaisir !

Y a des jours comme ça...

Simon
0