LIRE / ECRIRE

- - Dernière réponse : umfred
Messages postés
18
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 juin 2017
- 23 juin 2010 à 09:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/284-lire-ecrire

Afficher la suite 
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