Comment modifier un fichier .txt avec Visual Basic

Résolu
marco1980 Messages postés 9 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 9 novembre 2006 - 29 sept. 2006 à 10:26
marco1980 Messages postés 9 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 9 novembre 2006 - 2 oct. 2006 à 09:46
Bonjour à tous,

grand débutant en programmation, je suis actuellement en possession d'une multitude de fichiers .txt contenant les resultats de tests expérimentaux.

Tous les résultats obtenus pas postprocessing et envoyés dans un fichiers .txt doivent etre classés.

C'est pourquoi je désire modifier chaque fichier .txt pour en créer un qui convienne à mes requetes ( cad supprimer des lignes, supprimer certaine partie de lignes, remplacer des espaces par de points virgule, etc.).

En quelques lignes , voici le style d'opérations que je souhaite effecuter:

fichier d'origine: C:\toto.txt
contenant:

j'invente n'importe quoi mais l'idée c'est ça 056
4567     temps
53426   metres
une ligne par ci par là
76279   litres  62678   nombre

fichier souhaité:C:\toto.txt
contenat:

056;4567;53426;76279;62678

Pourriez m'indiquer le chemin pour y parvenir ou m'indiquer un tutoriel existant traitant du sujet en question?

Merci d'avance.

Marco

<!-- / message -->

3 réponses

cs_GeorgesDeLajungle Messages postés 29 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 22 juin 2007 1
29 sept. 2006 à 11:14
Bonjour,

Pour cela il te faut lire le fichier cela se fait avec
Dim fichier as new Streamreader("c:\toto.txt")
Là tu as en main un objet te permettant de lire ton fichier
Ensuite tu fais
Dim lignelue as String = fichier.readline()
Tu récupères la 1ère ligne de ton fichier avec la fonction readline
Ensuite tu fais une boucle du style

While Not (lignelue Is Nothing)
lignelue = fichier.readline()
End While

Avec cette boucle, tu parcours ton fichier,
A présent, il te reste à stocker les infos du fichier parce que tant que tu lis le fichier, tu ne peux pas écrire dedans
Donc tu crées avant ta boucle un tableau dynamique de String :
Dim lignes() as String
Tu initialises celui ci avant de commencer ta boucle
Redim lignes(0)
ajoute un compteur :
dim i as integer
i =0
et tu ajoutes dans ta boucle ce qu'il faut pour remplir ton tableau

While Not(lignelue Is Nothing)
lignes(i) = lignelue
i = i + 1
Redim Preserve lignes(i)
lignelue = fichier.readline()
End While

Tu fermes la lecture du fichier en cours
fichier.close()

Ensuite tu traites ton tableau avec une autre petite boucle (tu peux aussi les transformations directement dans la boucle de lecture)

For i = 0 to lignes.length -1
' Fonction qui tronque la ligne au premier espace
    lignes(i) = lignes(i).remove(lignes(i).indexof(" "),lignes(i).length - lignes(i).indexof(" "))
' Fonction qui remplace tous les espaces par des points virgules
    lignes(i) = lignes(i).replace(" ",";")
'Fonction qui permet de spécifier une sous chaine de caractères
    lignes(i) = lignes(i).substring(debut,longueur)
Next i

Une fois cela fait tu rouvres le fichier en écriture

Dim fichierecris as new StreamWriter("c:\toto.txt",false)
Tu ouvres ainsi le fichier en écriture, l'argument False, sert à dire que tu écrases le fichier existant, si tu mets l'argument à True, tu écris à la fin du fichier.
Ensuite ne te reste plus qu'à écrire tes données traitées dans le fichier

For i = 0 to lignes.length - 1
    if i < lignes.length -1 Then
        fichier.write(lignes(i) & ";")
    else
       fichier.write(lignes(i))
    end if
Next i

Pour plus de renseignements voit un peu la liste des fonctions applicables dans la documentation de .Net.

Eric
3
marco1980 Messages postés 9 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 9 novembre 2006
29 sept. 2006 à 11:21
merci beaucoup,

j'ai bien compris la logique à laquelle je commence à m'impregner.
je  rencontrerez tres certainement d'autres soucis c'est pourquoi je confirme des à présent la réponse que tu m'as apportée.
A bientôt sur le forum!
Marco
0
marco1980 Messages postés 9 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 9 novembre 2006
2 oct. 2006 à 09:46
Comme prévu j'ai rencontré quelques problèmes à appliquer le tutoriel parfaitement détaillé de GeorgesDeLaJungle.

Certains ont été illucidés d'autres non.

Les problèmes récurrents que je rencontre et qui m'empechent d'aller au bout de la modification, c'est à dire à la modification désirée du fichier sont les suivants:

1)Le tableau a été rempli, il s'agit de le traiter ligne par ligne pour y apporter les modifications souhaitées. Sauf que je rencontre lors de cette étape un refus:
 
En voulant remplacer tous les espaces par des points virgules avec la boucle suivante

For i = 0 To lignes.Length - 1
            lignes(i) = lignes(i).Replace(" ", ";") 
        Next i

je rencontre ce genre d'exception :

"Une exception de première chance de type 'System.IO.FileNotFoundException' s'est produite dans mscorlib.dll
Une exception de première chance de type 'System.NullReferenceException' s'est produite dans WindowsApplication1.exe"

2)J'ai essayé d'apporter les modifications du fichier directement dans la boucle de lecture et au lieu d'ecrire le nouveau fichier, le fichier toto existant est completement effacé.

Je me retrouve ainsi dans une impasse aui m'empêche hélas d'avancer.
Si un membre du vbfrance pouvait m'éclairer sur ces soucis je lui en serait gré. je pourrais ainsi perfectionner et corriger le tutoriel de GeorgesDeLaJungle.
0
Rejoignez-nous