Comment traiter un fichier txt (csv)?

djodjo2050 Messages postés 19 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 26 octobre 2007 - 24 oct. 2007 à 00:46
FaroukVazaha Messages postés 42 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 11 septembre 2010 - 26 oct. 2007 à 19:01
Bonjour à tous,

a partir d'un fichier excel convertit en txt (avec des point virgules pour le séparateur) je dois venir lire et écrire des données dans ce fichier txt. Je dois passé par le txt car le poste ou sera installé le programme ne dispose pas de licence office (excel entre autre). Cependant, le fichier txt (une fois modifié) sera exploité par un autre pc qui dispose de excel.

En vba je connais les syntaxes pour lire écrire dans une cellule et surtout naviguer en ligne et colone. par contre dasn un fichier txt avec des point virgule je ne connais rien. pouvez vous svp m'aider en répondant à ces questions?

Comment ouvrir un fichier txt?
Comment accede t on à la ligne i et colone j dans un txt (avec les points virgules)?
Comment trouver une chaine de caractère "toto" dans une colone?
Comment écrire dans un txt exemple "toto" à la ligne i et colone j ?
Comment sauvegarder après les modifications faites?

Merci à tous pour vos réponses

10 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
24 oct. 2007 à 02:43
Fais des recherches sur
Open
Line Input
Split
Instr

éventuellement Trim, Mid

MPi²
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
24 oct. 2007 à 08:23
Salut,
Pour la lecture du fichier regarde ce topicouvert 2h avant le tien...
Pour le reste regarde ce que te propose [auteur/MPI/6078.aspx MPi]

@+: Ju£i?n
Pensez: Réponse acceptée
0
djodjo2050 Messages postés 19 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 26 octobre 2007
24 oct. 2007 à 16:56
<li>bonjour à tous j'ai regardé le topic jrivet

Dim T() As String, i As Long, FN As Long

FN = FreeFile
Open "Fichier.txt" For Input As #FN
T = Split(Input(Lof(FN), #FN), vbCRLF)
Close #FN
For i = i To UBound(T)
Msgbox T(i)
Next

pour l'ouverture du fichier c ok
mais honnetement je comprend pas ce qu'il fait? c quoi FN?  a quoi sert la fonction Split?

je ne comprend pas comment accéder à une ligne et une colone spécifique?
Pouvez vous m'aider en  postant un bout de code pour les routines ci dessous

Comment ouvrir un fichier txt? OK
Comment accede t on à la ligne i et colone j dans un txt (avec les points virgules)?
Comment trouver une chaine de caractère "toto" dans une colone j?
Comment écrire dans un txt exemple "toto" à la ligne i et colone j ?
Comment sauvegarder après les modifications faites?

Merci à tous pour votre aide.
</li>
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
25 oct. 2007 à 03:32
FN = Freefile
Freefile récupère un nombre disponible (1 à 256) pour l'ouverture d'un fichier en utilisant la méthode Open

Le bout de code est, comme on le voit souvent, une méthode comprimée et peu lisible.
Ça économise plusieurs lignes de code, mais ça ne donne, en général, pas plus de vitesse ou de rendement... et là je ne parle pas du mode Binary qui est plus rapide normalement. On pourrait traduire comme suit, enfin pas tout à fait mais bon...

Lire une ligne, utiliser Split avec point-virgule comme séparateur pour créer un tableau avec toutes les données de la ligne et afficher celle qu'on veut

FN = FreeFile 'trouve un numéro non utilisé pour l'ouverture du fichier
Open "Fichier.txt" For Input As #FN
Do Until EOF(FN)                'boucle tout le fichier
    Line Input #FN, strTemp   'lecture d'une ligne, mise dans la variable strTemp
    T = Split(strTemp, ";")       'transposer chaque donnée dans un tableau T
    For i = 0 To UBound(T)   'message de chaque item de la ligne (ou tableau T)
        Msgbox T(i)
    Next
    Stop 'pour arrêter la boucle avant de devenir fou
Loop
Close #FN

MPi²
0

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

Posez votre question
djodjo2050 Messages postés 19 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 26 octobre 2007
25 oct. 2007 à 12:19
Hello MPi,
ok la je comprend mieux, par contre msgbox T(i) renvoie la ligne complete.

Comment fait tu pour lire une colone particuliere de la ligne en question?

exemple mon fichier:

nom;prénom;age
boby;lapointe;50
jo;toto;19

comment accéder à "toto" seulement et pas à "jo toto 19" ?

tu boucle 3 fois (pour aller à ligne N°3) et après?

maintenant si je veux changer toto en tatan, quelle est la syntaxe pour écrire au bon endroit?

Merci et désolé pour le harcelement de questions (mais après tout, ca sert à ca un forum  )

Encore merci et bon appétit
0
FaroukVazaha Messages postés 42 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 11 septembre 2010
25 oct. 2007 à 21:04
Bonjour,

"exemple mon fichier:

nom;prénom;age
boby;lapointe;50
jo;toto;19

comment accéder à "toto" seulement et pas à "jo toto 19" ?"

1°) puisque tu sais que ton séparateur est le ";"
2°) puisque tu sais que "toto" se trouve après le ";" numéro un

tu as trouvé les bonnes questions et donc forcement les bonnes réponses.

Bon courage
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
25 oct. 2007 à 23:40
Salut djodjo,
Le Msgbox dans mon bout de code ne retourne pas la ligne mais chaque partie de cette ligne.

Si tu utilises le code que jrivet t'a suggéré, tu devras utiliser 2 tableaux. Un pour séparer le fichier à chaque saut de ligne, ce que tu as déjà ... et un autre pour séparer chaque ligne en ses parties

FN = FreeFile
Open "Fichier.txt" For Input As #FN
    T = Split(Input(Lof(FN), #FN), vbCRLF)
Close #FN
'Ici, T contient tout le fichier. Chacun de ses éléments est une ligne

For i = i To UBound(T) 'lecture de chaque ligne (élément du tableau)
    T2 = Split(T(i), ";")   'séparer cette ligne aux points-virgules
    For J = 0 To Ubound(T2)  'lecture du 2eme tableau qui contient les éléments
        Msgbox T2(i)
    Next
Next

MPi²
0
djodjo2050 Messages postés 19 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 26 octobre 2007
26 oct. 2007 à 16:53
bonjour,

Cool , merci pour l'astuce du 2éme tableau. J'ai créer un autre tableau cellule pour stocker le contenu du fichier et ainsi avoir acces à n'importe quel valeur comme dans une cellule excel avec le code suivant

Sub test2()


Dim cellule(80, 80) '




FN = FreeFile
Open "fichier.txt" For Input As #FN
    T = Split(Input(LOF(FN), #FN), vbCrLf)
Close #FN
'Ici, T contient tout le fichier. Chacun de ses éléments est une ligne




For i = i To UBound(T) 'lecture de chaque ligne (élément du tableau)
    T2 = Split(T(i), ";")   'séparer cette ligne aux points-virgules
   
    For j = 0 To UBound(T2)  'lecture du 2eme tableau qui contient les éléments
        'MsgBox T2(j)
        'MsgBox T(j)
       
        cellule(i + 1, j + 1) = T2(j) 'on remplie le tableau cellule de chaque élément ligne par ligne
        'MsgBox "" & cellule(i, j) & ""
    Next
Next


Stop

Maintenant le probleme réside dans l'écriture du fichier txt au bon endroit.
Dans le fichier exemple et avec le code ci dessus cellule(3,2) vaut toto. comment écrire dans le fichier txt tatan à la place de toto et sauvegarder.

Je sais qu'il faut utiliser du genre Print #1, "tatan" mais je ne sais pas comment indiquer d'écrire à la 3éme ligne et après le 1er ";" (ou avant le 2ème ";")

Merci à tous et bon week end.
0
FaroukVazaha Messages postés 42 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 11 septembre 2010
26 oct. 2007 à 18:58
Bonjour,

Pour remplacer ton "toto" par "tantan" il suffit de faire une recherche dans ton tableau et de remplacer quand tu as trouver la valeur. Il existe quelques instruction très bien faites pour cela.
Quand à l'ecriture du fichier il suffit de remplacer le "input As xxx" par un "random As xxx" ( "output" detruirait le fichier).
Après tu concatenes ton tableau 3 cel par 3 cel sans oublier les ";" entre :

LigneAEcrire = tableau(X,1) & ";" & tableau(X+1,2) & ";" & tableau(X+2,3)
print LigneAEcrire

A bientôt
0
FaroukVazaha Messages postés 42 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 11 septembre 2010
26 oct. 2007 à 19:01
OUPS.......
désolé :
LigneAEcrire = tableau(X,1) & ";" & tableau(X,2) & ";" & tableau(X,3)
0
Rejoignez-nous