Enlever les retours chariot d'un fichier texte [Résolu]

Signaler
Messages postés
13
Date d'inscription
jeudi 3 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2006
-
crenaud76
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
-
j'ai un problème : je dois enlever tous les retours chariots dans un fichier texte mais le pb c que mon programme ne les enlèves pas .
pourtant j'ai tout essayé: vbcr, vblf, vbcrlf, chr(10) chr(13) mais au final toujours les retours chariots et en plus il me manque une ligne du fichier texte
voici ma source

' Fonction qui nettoie un fichier texte des retours chariots (vbcrlf ou vbcr)
Public Function VireRetourChariot(fichier As String)
' Variables locales
Dim buffer As String
Dim fichier2 As String

' Prépare le nom du fichier2
Call PrepareFichTemp(fichier, fichier2)

' Ouverture des fichiers
Open fichier For Input As #1
Open fichier2 For Output As #2

' Premiere lecture
Line Input #1, buffer

' Boucle de traitement
While EOF(1) = False
' Nettoie le buffer
buffer = Trim(buffer)
'buffer = Replace(buffer, vbLf, " ")
buffer = Replace(Replace(buffer, Chr(13), ""), Chr(10), "")
'buffer = Replace(buffer, Chr(10) & Chr(13), " ")
Print #2, buffer
Line Input #1, buffer

Wend

' Fermeture des fichiers
Close #1
Close #2

' Efface le fichier 1
Kill (fichier)

' Renomme le fichier 2 pour remplacer le fichier 1
Name fichier2 As fichier
End Function

merci d'avance

6 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
Le problème vient de l'instruction Print #2, buffer

qui t'écrit une ligne dans le fichier. Avec la syntaxe utilisée, elle
rajoute systématiquement et automatique un retour chario à la fin de la
ligne.



Essaye peut-etre avec cette syntaxe : Print #2, buffer;


Tu peux virer tes Replace(), a priori ils servent à rien car Line Input te vire automatiquement les CR et LF



<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Messages postés
13
Date d'inscription
jeudi 3 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2006

Merci beaucoup, je vais pour voir avance plus vite parce que je travaille sur des fichiers textes de grande taille et ça m'embêtait de devoir enlever quasiment tous les retours chariot à la main
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
19
Essaye cela :

Dim Buffer as string
Open "Fic.txt" for input as #1
Buffer = Input(Lof(1), 1)
Close #1
Buffer = Replace$(Buffer, vbCRLF, " ")
Kill "Fic.txt"
Open "Fic.txt" for output as #1
Print #1, Buffer
Close #1

Christophe R
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
2
Le suivant devrait faire le boulot, en effet, le line imput te rend
teout ce qui est entre le point de lecture et le prochain retour a la
ligne, donc sans le retour a la ligne.

le point virgule a la fin du print pose le buffer, sans ajouter de retour.


Open fichier For Input As #1
Open fichier2 For Output As #2

' Premiere lecture
Line Input #1, buffer

' Boucle de traitement
While EOF(1) = False

Print #2, buffer;
Line Input #1, buffer

Wend

Print #2, buffer;


' Fermeture des fichiers
Close #1
Close #2
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
2
Tu peux marquer la reponse de Crenaud76 comme acceptee, je l'ai teste et elle marche.



Je croyait qu'il y avait une limite a la taille des string mais ca marche avec un ficher de 1380Ko!



(Je n'ai pas encore essaye la mienne!!)
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
19
Une string est effectivement limité mais la limite est à 2^31 caractères soit 2 milliards de caractères

Christophe R