LIRE / ECRIRE

jéh! - 8 août 2001 à 12:16
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

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
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
13 mars 2010 à 14:02
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
2 févr. 2007 à 20:18
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
14 janv. 2007 à 11:08
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
12 janv. 2007 à 13:05
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
KirKHamm Messages postés 3 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 14 janvier 2007
12 janv. 2007 à 09:54
Salut,
Ouvre ton fichier avec Append :

Open "c:\MonFichier" For Append As #1

Ca ouvre ton fichier en écriture et place le curseur a la fin du fichier.
naelgwe Messages postés 11 Date d'inscription lundi 13 novembre 2006 Statut Membre Dernière intervention 16 février 2011
11 janv. 2007 à 11:28
bonjour
merci, c'est ce que je cherchais aussi.
Seulement;

# '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

Si je fait une deuxième fois ce code, je perd les informations précédente.
Comment faire pour ouvrir une 2ieme fois le fichier et ecrire à la fin du fichier systématiquement?

merci pour vos réponses
naelgwe Messages postés 11 Date d'inscription lundi 13 novembre 2006 Statut Membre Dernière intervention 16 février 2011
8 janv. 2007 à 22:40
c'est ce que je cherchais aussi :)
mais ca m'ammène un nouveau souci
mon fichier TXT est composé comme suit:
toutes les lignes impaires sont en francais
toutes les lignes paires sont en thai (unicode oblige)
ainsi, toutes les paires qui sont lus, sont illisible :(:(
si quelqu'un peux m'aider sur le sujet :)
je ne suis pas un as de la programmation et je n'ai pas l'intention de le devenir non plus. Mais malheureusement, je ne trouve pas de prog correspondant à mon attente.
KirKHamm Messages postés 3 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 14 janvier 2007
18 avril 2006 à 15:17
Ton code est correct mais il manque les déclaration des variables (as string). Et il est préférable d'utiliser la fonction freefile pour associer un fichier a un numero:
Dim numFichier as integer
numFichier = freefile
Open "C:\Monfichier" For Input As #numFichier
cs_bertrand81 Messages postés 3 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 14 avril 2006
14 avril 2006 à 11:28
Super bien pour les débutants comme moi! Merci
Il faudrait soigner les déclarations ... as string+ utilisation de:
dim fic as integer
fic = freefile 'attribution automatique d'un numéro au lieu de le déclarer en dur.

-> Open "Chemin For input As #fic
Rejoignez-nous