Lecture caractère par caractère

Résolu
sebast_ Messages postés 17 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 16 décembre 2007 - 29 oct. 2007 à 19:21
sebast_ Messages postés 17 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 16 décembre 2007 - 30 oct. 2007 à 18:24
Bonsoir à tous,

Je cherche une méthode efficace afin de pouvoir lire un fichier texte caractère par caractère, dans le but de supprimer les retours chariots du fichier en entrée...

J'ai bien trouvé la méthode "Line" qui permet d'obtenir une ligne complète présente dans le fichier mais il se trouve que le fichier texte tout est pratiquement sur une seule ligne séparé par des retours chariots :(

Merçi d'avance à tous

5 réponses

Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
30 oct. 2007 à 08:42
Deux replace$() suffiront : un pour vbCr et un pour vbLf :
Buffer = Replace$(Buffer, vbCr, "")
Buffer = Replace$(Buffer, vbLf, "")

Ou même en une seule instruction :
Buffer = Replace$(Replace$(Buffer, vbCr, ""), vbLf, "")
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 oct. 2007 à 19:48
Salut
En fait, il faut que tu ouvres ton fichier comme un fichier bianire et que tu formattes la variable de destination comme n'ayant qu'un caractère :
   Dim sBuffer As String * 1   ' Un seul char
   Open monFichier For Binary Access Read As #1
   Do While Not Eof(1)
      Get #1, , sBuffer
      ' Ici, ta détection et ton traitement
   Loop
   Close #1

Pour réécrire ton fichier sans les caractères que tu veux exclure, il faudra ouvrir un fichier temporaire de destination avec la même méthode (For Binary Access Write) et en utilisant Put à la place de Get.
Je te laisse le soin de mélanger les deux pour écrire au même ryhtme que tu lis les octets.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Code lines colored alamano
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
29 oct. 2007 à 21:20
Sauf que perso, je ferais plutôt un chargement en une seule fois dans une variable mémoire, pour ensuite traiter par un Replace$() les vbCrLf.
Cla risqurait de donner de meilleures performances ...

Dim Buffer As String
Dim fn As Long

fn = Freefile
Open "Fichier.txt" For Input As #fn
Buffer =Input(LOF(fn), #fn)
Close #fn
Buffer = Replace$(Buffer, vbCrLf, "")
Open "AutreFichier.txt" For Output As #fn
Print #fn, Buffer
Close #fn

Ca devrait être ok avec ca.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 oct. 2007 à 00:38
Excellente idée
Penser que les sauts de page ne sont pas toujours des vbCrLf mais aussi des vbCr ou vbLf seuls.
Il suffit donc de répéter le Replace en trois avec chaque valeur.
0

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

Posez votre question
sebast_ Messages postés 17 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 16 décembre 2007
30 oct. 2007 à 18:24
Merçi beaucoup à vous deux pour vos réponses claires et précises.
0
Rejoignez-nous