Sauvegarder efficacement des modifications à un document texte
Aaliibaba
Messages postés4Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention18 février 2008
-
6 févr. 2008 à 16:02
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 2008
-
7 févr. 2008 à 11:41
Bonjour,
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Je suis sur un programme de traitement par lot (batch) qui consiste à ouvrir un fichier texte, à chercher certains mots (donnés par un tableau en mémoire), à les remplacer par l’équivalent (toujours dans le tableau, colonne 2) puis à sauvegarder le fichier texte et passer au suivant.
C’est là que se situe mon problème : j’ai cherché et trouvé plusieurs manières de chercher/remplacer du texte (voir plus bas) mais je n’ai pas de bonne solution pour sauver les modifications dans le fichier texte.
.
J’ai tenté de faire une séparation en 3, fichiertexte.Write texteavant & motremplacé & texteaprès mais ça ne marche bien que pour une seule ligne.
J’ai encore essayé de lire la ligne, fermer le fichier, ouvrir le fichier de nouveau et écrire la ligne modifiée mais je n’arrive toujours à remplacer qu’une seule ligne. Et il me manque un indicateur de position efficace car c’est toujours la première ligne du fichier texte qui est remplacée…
Quelle méthode préconisez-vous pour remplacer un mot dans un texte de plusieurs lignes et sauvegarder le tout ensuite ?
N’y a-t-il que des méthodes ligne par ligne, en utilisant un indicateur de position ?
Trouver, récupérer position, prend le tout avant, le tout après, fermer, ouvrir, coller le tout avant, le mot remplacé et le tout après, pour chaque modification ?
A propos de chercher/remplacer du texte, quelle est la méthode la plus efficace ? Un fichiertexte.ReadAll, un accès ligne par ligne fichiertexte.ReadLine avec Boucle For…Next ou un tableau basé sur une fonction tableautexte = split(fichieràlire, « « ) ?
Il faut savoir que chaque fichier texte contient environ 3x180 mots et qu’il y en a 6'000 à vérifier, une fonction adéquate est donc bienvenue.
Merci d’avance à tous ceux qui me liront et me donneront un conseil très bienvenu.
Aalii
A voir également:
Sauvegarder efficacement des modifications à un document texte
capuccino_fr
Messages postés113Date d'inscriptionvendredi 5 mars 2004StatutMembreDernière intervention11 février 2008 6 févr. 2008 à 16:23
J'ai deja fait qqch dans le genre :
Ouverture d'un fichier, lecture ligne par ligne et je referme le fichier (il est automatiquement enregistré)
Lors de la lecture, j'utilise la méthode 'Replace' du format Chaine de caracteres, qui est tres pratique et assez rapide.
Pour ma part, je pense que le traitement de chaines de caracteres est le truc le plus long et générant le plus d'erreur qui soit....
Vaut mieux etre bourré que con: ca dure moins longtemps...
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 6 févr. 2008 à 17:05
Si dans un fichier, toute les occurences d'un mot doivent être remplacées par le même autre mot, tu peux :
1- Ouvrir le fichier source en lecture
2- Charger son contenu dans un buffer mémoire
3- Fermer le fichier source
4- utiliser la fonciton Replace() sur le buffer
5- Supprimer le fichier source et le recréer en l'ouvrant en écriture
6- Ecrire le buffer dedans
7- Refermer ce fichier
Peros, je ferais tout de même comme ca (à partir du point 5)
5- Créer un fichier temporaire en l'ouvrant en écriture
6- Ecrire le buffer dedans
7- Refermer le fichier temporaire
8- Supprimer le fichier source
9- Renommer le fichier temporaire en fichier source
C'est un peu plus long mais plus sécurisé ! A voir
Sauf pour le remplacement des mots dans le buffer ou il va falloir boucler sur un tableau, c'ets presque une ligne de code par point, donc très simple
Aaliibaba
Messages postés4Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention18 février 2008 6 févr. 2008 à 23:21
Bonsoir,
Je commence à m'approcher du succès, encore 2-3 petits détails à régler mais la procédure suggérée par Kristof, notamment par le buffer, me permet de contourner le problème du ligne par ligne (dans mon petit fichier test en tout cas, à voir dans le vrai qui est plus grand).
Pour être sûr de ne rien effacer par erreur, je copie directement le fichier source dans un dossier temporaire et travaille sur ce dernier. Quand tout est prêt, je copie en remplaçant dans le dossier d'origine.
Ce qui est assez sympa avec le texte dans le buffer, c'est que je le parcours avec toute ma liste de mots à vérifier, dès qu'il y a un changement à faire, je le fais et le buffer devient le nouveau texte à parcourir:
KorrTabelle est un tableau (1 To 2, n Mots) chargé au préalable avec toute la liste des mots à rechercher (col.1, dim 1) et l'équivalent à remplacer (col.1, dim 2)
strSourceString = TempTextDatei.ReadAll
For EndeListe = 1 To UBound(KorrTabelle, 2)
'Laden wir das 1. Wort das zu suchen ist
strFindString = KorrTabelle(1, EndeListe)
'Haben wir ein Wort zu ersetzen ?
If InStr(strSourceString, strFindString, vbTextCompare) > 0 Then '0 = Nichts
'Wenn ja, dann ist der Buffer den ganzen Text
'der strFindString wird durch das korrektes ersetzt
strBuffer = Replace(strSourceString, strFindString, KorrTabelle(2, EndeListe), , , vbTextCompare)
strSourceString = strBuffer 'Der neue Text wird jetzt durchgesucht
End If
Next EndeListe
Sauf que ma fonction InStr ne marche pas encore pour l'instant mais la structure y est.
Merci tout le monde et bonne fin de soirée !
Aalii
Vous n’avez pas trouvé la réponse que vous recherchez ?