Lire / ecrire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 45 357 fois - Téléchargée 74 fois

Contenu du snippet

Lire et ecrire dans un fichier texte.
Ce code est complet. (Pas comme celui de Zarbiboss)

Source / Exemple :


' *** Ecrire dans un fichier ***

'Ouvre le fichier c:\MonFichier
Open "c:\MonFichier" For Output As #1
'Ecrit Mon Texte dans le fichier
Print #1, "Mon Texte"
'Ferme le fichier
Close #1

' *** Lire un fichier ***

' Declare la variable Var1
Dim Var1
'Ouvre le fichier
Open "C:\Monfichier" For Input As #2
'Lit la première ligne et la place dans Var1
Input #2, Var1
'Ferme le fichier
Close #2
'Affiche le résultat dans un Msgbox
MsgBox "Le fichier contient : " & Var1

'Si vous voulez lire plusieurs ligne :

' Declare la variable Var1 et Var2
Dim Var1
Dim Var2
'Ouvre le fichier
Open "C:\Monfichier" For Input As #2
'Lit la première ligne et la place dans Var1
Input #2, Var1
Input #2, Var2
'Ferme le fichier
Close #2

Conclusion :


Assez simple avec la description des lignes.
Pour écrire sur plusieurs lignes faites la même chose que pour lire plusieurs lignes.

A voir également

Ajouter un commentaire

Commentaires

umfred
Messages postés
18
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 juin 2017
-
Bonjour,
j'arrive peut-être après la bataille mais tu peux aussi utiliser la fonction Split() pour récupérer tes 3 champs.

Dim MaChaine As String 'chaine à traiter
Dim MesChainesFinales() As String 'tableau de chaines final
Dim MonSeparateur As String 'chaine contenant le texte qui sépare 2 champs (on parle aussi de délimiteur)

MaChaine="Mon texte1 Mon texte2 Mon texte3"
MonSeparateur=Space(5) 'chaine contenant 5 caractères "espace" correspondant aux 5 espaces entre "Mon teste1" et "Mon texte2"

MesChainesFinales=Split(MaChaine,MonSeparateur)
Print MesChainesFinales(0) 'Affiche "Mon texte1"
Print MesChainesFinales(1) 'Affiche "Mon texte2"
Print MesChainesFinales(2) 'Affiche "Mon texte3"

Tout le secret réside dans le bon choix de la chaine du délimiteur.

Pour faire l'opération sur l'ensemble du fichier, on peut le lire entierement dans une chaine (si le fichier n'est pas énorme), ensuite il faut séparer chaque ligne puis séparer chaque ligne. ça doit donner un truc du genre:

Dim TexteDuFichier As String 'chaine qui va contenir l'ensemble du fichier
Dim LignesDuFichier() As String 'tableau de chaine dont chaque indice va contenir une ligne du fichier

Open "c:\MonFichier" For Input As #2
TexteDuFichier=Input(LOF(2), #2) 'lecture de l'ensemble du fichier, LOF(2) renvoie la taille du fichier #2
Close #2

LignesDuFichier=Split(TexteDuFichier,vbCrLf) 'on utilise vbCrLf (nouvelle ligne) pour séparer les lignes
Print LignesDuFichier(0) 'Affiche ="Mon texte1 Mon texte2 Mon texte3"
Il restera ensuite à traiter chaque ligne comme je l'ai montré plus haut.
nono7380
Messages postés
11
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
16 octobre 2010
-
c'est parfait!
merci
ericthecat
Messages postés
1
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
2 février 2007
-
Bj,
Suis pas un pro de la lecture écriture de fichier, ni de prog non plus.

J'attaquerais le pb en travaillant le texte comme çà :
(çà marche en vba excel)

Sub Macro1()

Dim chaine(1000) '1000 étant le nb de mots du fichier, 1 mot=Mon texte1
chainetext1 = "Mon texte1 Mon texte2 Mon texte3"
nbseparateurs = 5 'exemple 5 espaces entre chaque "enregistrement"

i = 1
j = 1

Do
caracteretestez = Mid(chainetext1, i, 1)

Select Case caracteretestez

Case Is <> " "
chaine(j) = chaine(j) + caracteretestez
i = i + 1

Case Is = " "
compteur = compteur + 1 'compte le nb d'espaces

Select Case compteur

Case Is = nbseparateurs 'exemple 5 espaces entre chaque "enregistrement"
compteur = 0 'remise à 0 du compteur d'espaces
j = j + 1 'numéro de la première variable texte

Do 'boucle pour récupérer les caractères différents du séparateur
i = i + 1
caracteretestez = Mid(chainetext1, i, 1)

If caracteretestez = " " Then Exit Do

chaine(j) = chaine(j) + caracteretestez

Loop

Case Else
i = i + 1 'passe au caractère suivant

End Select

End Select

Loop Until i > Len(chainetext1) ' la longueur de la variable texte

Style = vbOK
Title = "Démonstration de MsgBox " ' Définit le titre.
Help = "DEMO.HLP" ' Définit le fichier d'aide.
Ctxt = 1000

'boucle pour voir le résultat
For i = 1 To j
Msg = Str(i) + " " + chaine(i)
Response = MsgBox(Msg, Style, Title, Help, Ctxt)

Next j

End Sub
KirKHamm
Messages postés
3
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
14 janvier 2007
-
Salut,
Je ne crois pas qu'il y aie de solution miracle a ton probleme.
Il faut que tu te fabriques tes propre fonctions.

deux solutions: soit tu met dé caractère "spéciaux" pour séparer tes 3 champs
(par exemple: "Mon texte1 ## Mon texte2 ## Mon texte3"

soit tu formate texte1 texte2 et texte3 pour qu'ils ai tjrs la même longueur.
ex: 'chaque texte a une longueur de 50 caract.
Open "c:\MonFichier" For Input As #2
Input #2, txt2
Close #2
texte1 = mid(txt2,1,50)
texte2 = mid(txt2,51,50)
texte3 = mid(txt2,101,50)
naelgwe
Messages postés
11
Date d'inscription
lundi 13 novembre 2006
Statut
Membre
Dernière intervention
16 février 2011
-
yeeeh
super merci kirkham
un problème résolu m'en amène un autre.... je m'explique

# Open "c:\MonFichier" For Append As #1
# Print #1, "Mon Texte1","Mon texte2"," Mon texte3"
# Close #1

mon fichier texte ainsi créé à la configue suivante (configuration que je souhaite dailleur):

Mon texte1 Mon texte2 Mon texte3

A présent, je souhaite lire ce texte:

# Open "c:\MonFichier" For Input As #2
# Input #2, txt1, txt2, txt3 'ici, j'obtiens un message d'erreur(il n'accepte pas les virgules comme pour la fonction print)
# Close #2

alors,

# Open "c:\MonFichier" For Input As #2
# Input #2, txt1
# Close #2

la lecture de txt1 me donne comme résultat:

Mon texte1 Mon texte2 Mon texte3

Mon souhait est d'avoir comme résultat:
txt1="Mon text1"
txt2="Mon text2"
txt3="Mon text3"

Comment faire? Quelqu'un aurait il un exemple?
Avec tout mes remerciements

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.