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 1276 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 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
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 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
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 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
26 oct. 2006 à 17:09
Avec plaisir !

Y a des jours comme ça...

Simon
0
Rejoignez-nous