Parser et remplacer les lignes d'un fichiet txt

Signaler
Messages postés
8
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
20 janvier 2010
-
Messages postés
8
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
20 janvier 2010
-
Bonjour à tous,

J'ai un fichier txt qui contient plusieurs lignes de la façon suivante:
x1;y1;z1;w1
x2;y2;z2;w2
......
.....
je doit lire chaque ligne et extraire les chaînes de caractère dans l'ordre afin de replacer la ligne suivante et ceci pour tous le le fichier txt:

donc au final j'aurai un fichier txt en sortie comme ça :

text1="x1", text1="y1", text1="z1", text1="w1"
text1="x2", text1="y2", text1="z2",text1="w2"

J'ai essayé ce code là mais sans issu:(disons que je suis pas un pro vb)

Sub Lire_file_TXT()
Dim Fichier As String
Dim F As Integer, i As Integer
Dim Ligne As String

Fichier = "C:/file.txt"

F = FreeFile
'Lecture des lignes
Open Fichier For Input As #F
While Not EOF(F)
Line Input #F, Ligne
'découpe la chaine en fonction des espaces " "
'le résultat de la fonction Split est stocké dans un tableau
Tableau = Split(Ligne, ";")

????????????????????????
puis modification de l'autre texte
??????????
commenet faire????
******************************
'boucle sur le tableau pour visualiser le résultat
For i = 0 To UBound(Tableau)
Print #F, Tableau(i)
Next i
End Sub

ça urge..Merci pour votre aide...

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Toujours le même problème ...
Lire des données d'un fichier et les réécrire dans le même fichier, ce n'est pas pas possible.
Il faudra impérativement passer par un fichier temporaire que tu renommeras après transformation :
- Ouverture fichier 1 en lecture
- Ouverture fichier 2 en écriture
- Boucle de lecture fichier 1 + traitement + écriture dans fichier 2
- Fermeture Fichier 1 \ A ne surtout pas oublier !!!
- Fermeture Fichier 2 /
- Effacement Fichier 1
- Renommage Fichier 2 avec le nom du Fichier 1

Ta ligne pleine de ??? signifie t-elle que tu ne sais pas concaténer des chaines de caractères ?
Tu as pourtant une boucle déjà prête !
maChaineFinale = ""
For i = 0 To UBound(Tableau) - 1
  maChaineFinale = maChaineFinale & "text1=""" & Tableau(i) & """, "
Next i
maChaineFinale = maChaineFinale & "text1=""" & Tableau(UBound(Tableau)) & """"
Print #Fichier2, maChaineFinale


Tu remarqueras le double "" à chaque fois que tu as besoin d'insérer un simple " à l'intérieur d'une chaine elle même délimitée par des "

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
8
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
20 janvier 2010

Merci pour ta réponse...
Oui effectivement mon pb c'est la concaténation des chaînes de caractères.

Si je comprends bien je dirais que voici mon code:



Sub Lire_file_TXT()
Dim Fichier As String
Dim F As Integer, i As Integer
Dim Ligne As String

Fichier1 = "C:/file_Ancien.txt"
Fichier2 = "C:/file_Nouveau.txt"

F = FreeFile

'Ouverture fichier 1 en lecture

Open Fichier1 For Input As #F1

'Ouverture fichier 2 en écriture

Open Fichier2 For Output As #F2

' Boucle de lecture fichier 1 + traitement
' je pense qu'ici j'aurai uniquement la première ligne de mon tableau j'arrive pas à résoudre ce pb

While Not EOF(F1)
Line Input #F1, Ligne
Tableau = Split(Ligne, ";")
Wend
Close #F2

'boucle sur le tableau pour visualiser le résultat dans fichier 2
For i = 0 To UBound(Tableau)-1
Line Output #F2, Ligne
Print #F, Tableau(i)
Next i
Close #F2
End Sub

'Remove fichier 1


'Concaténation avec ma chaîne finale
maChaineFinale = ""
For i = 0 To UBound(Tableau) - 1
maChaineFinale = maChaineFinale & "text1=""" & Tableau(i) & """, "
Next i
maChaineFinale = maChaineFinale & "text1=""" & Tableau(UBound(Tableau)) & """"
Print #Fichier2, maChaineFinale

Que penses tu de mon code ?

Merci encore une fois
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Je n'en pense rien
J'ai l'impression que tu ne comprends pas ce que tu écris ...
Coller du code par dessus un autre n'est pas une solution.

A quoi te sert FreeFile ?
As-tu seulement regardé dans l'aide à quoi ça sert ?
Il faut l'utiliser juste avant de faire un Open, et si possible avec la bonne variable.

Tu fais une boucle While-Wend pour lire l'intégralité du fichier 1 et tu Split chaque ligne dans Tableau.
Si tu ne traites pas les données contenues dans Tableau à chaque ligne, elles sont perdues de ligne en ligne ...
Le code que j'ai eu la patience de te créer doit apparaitre à l'intérieur de cette boucle, sinon, aucun intérêt.

Je te recolle ce que je t'ai donné tout à l'heure.
La moindre des choses est de le lire
- Ouverture fichier 1 en lecture
- Ouverture fichier 2 en écriture
- Boucle de lecture fichier 1 + traitement + écriture dans fichier 2
- Fermeture Fichier 1 \ A ne surtout pas oublier !!!
- Fermeture Fichier 2 /

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
8
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
20 janvier 2010

Je ne suis pas un pro de VB, ça sert à rien d'être cassant, c'est vrai que j'ai pas bien lu mais je me ss bien pris la tête pour comprendre..Bref ce n'est pas bien grave..Honnêtement ce code va m'aider à faire pleines de manip enfin vous avez envie de m'aider!!..

Je suis entrain de suivre tn algo mais j y arrive pas vraiement

Sub essai() 

Const Sep As String = "&"
Dim T() As String, X As String, I As Integer, f As Integer

Fichier1 = "C:/file_Ancien.txt" 
Fichier2 = "C:/file_Nouveau.txt"

 ' Ouverture fichier 1 en lecture    
   f1 = FreeFile
   Open Fichier1 For Input As #f1

' Ouverture fichier 2 en écriture 
  f2=FreeFile
   Open Fichier2 For Output As #f2       

' Boucle de lecture fichier 1 + traitement + écriture dans fichier 2 
''''''''''''''''''Lecture fichier 1'''''''''''
While Not EOF(f1) 
          Line Input #F1, Ligne 
          Tableau = Split(Ligne, ";")

   ????qu'est ce que t'appel traitement????
''''''''''''''''''Ecriture fichier 2'''''''''''
    maChaineFinale = ""
   For i = 0 To UBound(Tableau) - 1
   maChaineFinale = maChaineFinale & "text1=""" & Tableau(i) & """, "
   Next i
  maChaineFinale = maChaineFinale & "text1=""" & Tableau(UBound(Tableau)) & """"
  Print #Fichier2, maChaineFinale
  close #f2

Wend
close #f1

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Eh bah, c'est excellent tout ça !
Le traitement, c'est ce que tu veux que ce bout de programme fasse : la transformation de ta chaine.
Il reste juste deux trucs sur lequel le programme doit bloquer et indiquer une erreur, non ?
1) Print #Fichier2, maChaineFinale
Qu'est ce que c'est que #Fichier2 d'après toi ?
Non, c'est #F2
2) Si tu Close #F2 avant de reboucler, tu ne pourras plus écrire dedans !

Quand tu dis "je n'y arrive pas vraiment", tu ferais mieux de dire sur quoi tu bloques, quelle erreur as-tu, sur quelle ligne, ce que tu as essayé ... ça, ça permettrait d'avancer
Quand une erreur te dit "Impossible d'écrire dans un fichier fermé", ça ne te titille pas les neuronnes ?

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
8
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
20 janvier 2010

Merci pour tes réponses..
Le code marche nickel maintenant, en revanche il me reste uniquement un truc à comprendre c'est la gestion des "".

Est ce que tu peux me passer stp un petit tuto, enfin si t'en a sur la gestion des ""..

---->Imaginons que j'ai plusieurs "" dans mon texte à remplacer.??

Merci
Messages postés
8
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
20 janvier 2010

En gros je serai un peu bloqué si j'aurai un texte de la façon suivante :

hey="x1", bonjour="y1", coucou="z1",helle="w1"

merci