Procedure SetLineBreakStyle

CP990 Messages postés 2 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 9 septembre 2004 - 8 sept. 2004 à 01:59
CP990 Messages postés 2 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 9 septembre 2004 - 9 sept. 2004 à 01:28
Bonjour à tous.

Je dois lire un fichier texte dont les fins de ligne sont normalement matérialisées par des CRLF, mais dont certaines lignes présentent la particularité de contenir des LF.

J'utilise pour cela la procédure SetLineBreakStyle qui, normalement, permet de spécifier à Delphi de considérer que les fins de ligne sont:
- soit des LF -> SetLineBreakStyle(f,tlbsLF)
- soit des CRLF -> SetLineBreakStyle(f,tlbsCRLF)

Malheureusement, quelque soit le paramètre passé à cette procédure, ReadLn traite indifféremment les LF et les CRLF comme des fins de ligne

J'ai effectué ces tests avec Delphi 6 Personnel, Delphi 6 Professionnel et Delphi 7 Personnel. Leurs comportements est identique.

Voici le code concerné :

assignfile(f,fich_in);
SetLineBreakStyle(f,tlbsCRLF);
reset(f);
while not eof(f) do
begin
readln(f,lig);
etc ...

Sur des WriteLn, le problème est semblable avec D6 Perso et D6 Pro. Des CRLF sont générés comme fin de ligne, quelque soit le paramètre passé à SetLineBreakStyle.

Seul Delphi 7 Personnel génére, sur des WriteLn, des lignes terminées :
- par LF avec SetLineBreakStyle(f,tlbsLF)
- par CRLF avec SetLineBreakStyle(f,tlbsCRLF)

L'un de vous aurait il déjà rencontré ce problème ? Et, si oui, comment l'a t'il résolu ?

Merci d'avance

1 réponse

CP990 Messages postés 2 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 9 septembre 2004
9 sept. 2004 à 01:28
Merci pour ta réponse, et félicitations pour l'énorme travail que tu fais dans l'animation de ce site.

J'avais bien sûr lu cette contribution de "gbegreg". Je l'avais trouvée en faisant une recherche sur les mots clefs CR et CRLF sur CodeS-SourceS.

Mais là n'est pas la question. Il est en effet assez facile d'implémenter un nouveau ReadLn qui accepte des fins de lignes quelconques. Cela n'explique toutefois pas pourquoi la procédure SetLineBreakStyle semble ne pas fonctionner.

D'autre part, si la méthode LoadFromFile de TStringList remplit bien la liste de chaînes avec toutes les lignes du fichier en entrée, elle considère qu'un CRLF ou un LF sont des fins de lignes (source : Aide Delphi 6 Perso - Référence VCL - TStrings.LoadFromFile).

Pour ma part, si j'avais voulu lire un fichier (texte ou non) en totalité, en ignorant tout ce qui ressemble à une fin de ligne, j'aurais plutôt utilisé un bon vieux BlockRead.

A+

cp990
0
Rejoignez-nous