2009-05-22 6 views
0

J'ai un fichier TXT que j'ai besoin d'importer via une application, mais pour une raison quelconque, je dois d'abord l'ouvrir dans WordPad puis l'enregistrer avant de l'importer. Je suppose que cela a à voir avec Line Breaks. Parce que si je l'ouvre d'abord dans le bloc-notes, il n'y a pas de sauts de ligne, mais si je l'ouvre avec le bloc-notes, les lignes sont séparées.Aide à la lecture des sauts de ligne dans un fichier texte

Est-ce que quelqu'un sait pourquoi cela se produit et comment je peux éviter d'avoir à ouvrir manuellement un fichier et l'enregistrer avec WordPad? L'application est écrite en vb 6 (Yikes!).

Merci pour toute aide

Répondre

2

Ceci est un problème de fin de ligne. Votre code (et votre bloc-notes) souhaite voir les paires Carriage Return (CR)/Line Feed (LF), et il s'agit probablement d'un fichier CR uniquement (Macintosh) ou LF uniquement (Unix). Wordpad est plus indulgent, et lors de la sauvegarde est apparemment (ne l'a pas testé) sauver des paires CR/LF pour vous.

Vous pouvez modifier votre code dans l'application pour rechercher l'une des terminaisons et les traiter facilement: il suffit de cesser de rechercher vbCrLf en tant que paire et de rechercher soit comme fin de ligne. Ma propre stratégie consiste à rechercher CR ou LF et à consommer tous les caractères CR/LF suivants: cela efface également les lignes vides.

0

Le fichier contient probablement uniquement un caractère de retour chariot (CR) ou un saut de ligne (LF) à la fin de chaque ligne.

Sous Windows, vous avez besoin d'un caractère CR et LF à la fin de chaque ligne. Cela peut facilement être fait dans VB6 en utilisant la constante vbCRLF. D'un autre côté, si vous lisez le fichier, vous pouvez déterminer lequel est manquant et l'ajouter manuellement lorsque vous lisez le fichier (c.-à-d. En utilisant la fonction de remplacement pour convertir CR en CRLF ou LF en CRLF).

+0

Ou acceptez n'importe quoi en remplaçant CRLF par LF, puis remplacez CR par LF, puis LF par CRLF. Ou quelque chose comme ça. – MarkJ

0

À moins que ces fichiers soient très volumineux et que les performances soient critiques, leur lecture par ligne peut être facilement effectuée via l'objet ADODB.Stream.

Non seulement cela gérera plusieurs délimiteurs de ligne (Stream.LineSeparator = adCR, adCRLF, ou adLF), mais il peut également être utilisé pour traiter des fichiers contenant Unicode (UTF-16), UTF-8, ANSI, et d'autres alternatives Codages "ANSI" pour d'autres paramètres régionaux. Par exemple, si vous avez un fichier texte contenant "ANSI" dans une langue russe, vous pouvez définir Stream.Charset = "koi8-r" et lire les données avec la traduction correcte dans VB6 Unicode (UTF-16):

Dim Stm As ADODB.Stream 
Dim Line As String 
Dim Counter As Long 
Set Stm = New ADODB.Stream 
With Stm 
    .Open 
    .LoadFromFile "russian.txt" 
    .Type = adTypeText 
    .Charset = "koi8-r" 
    .LineSeparator = adLF 
    Do Until .EOS 
     Line = .ReadText(adReadLine) 'Text is in Unicode now. 
     Counter = Counter + 1 
    Loop 
    .Close 
End With 

par défaut charset à la valeur « unicode » (UTF-16), mais pour lire ou écrire Stream en ANSI avec la page de code par défaut, vous pouvez le mettre à « ascii » à la place.

HKCR \ MIME \ Database \ Charset contient les valeurs disponibles.

Questions connexes