jéh!
-
8 août 2001 à 12:16
umfred
Messages postés18Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 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.
umfred
Messages postés18Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 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"
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és11Date d'inscriptionsamedi 25 avril 2009StatutMembreDernière intervention16 octobre 2010 13 mars 2010 à 14:02
c'est parfait!
merci
ericthecat
Messages postés1Date d'inscriptionjeudi 7 septembre 2006StatutMembreDerniè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és3Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention14 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és11Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention16 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és3Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention14 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és11Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention16 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és11Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention16 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és3Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention14 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és3Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention14 avril 2006 14 avril 2006 à 11:28
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.
23 juin 2010 à 09:46
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.
13 mars 2010 à 14:02
merci
2 févr. 2007 à 20:18
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
14 janv. 2007 à 11:08
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)
12 janv. 2007 à 13:05
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
12 janv. 2007 à 09:54
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.
11 janv. 2007 à 11:28
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
8 janv. 2007 à 22:40
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.
18 avril 2006 à 15:17
Dim numFichier as integer
numFichier = freefile
Open "C:\Monfichier" For Input As #numFichier
14 avril 2006 à 11:28
8 août 2001 à 12:16
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