Lecture et Ecriture ciblée dans un fichier texte
Bonjour
Je sollicite votre aide pour un petit problème que j'ai dont je peine a trouver la réponse.
En effet, je dois faire un programme qui cherche une chaîne de caractère dans un fichier texte et des qu'il la trouve, il stocke la valeur qui suit la chaîne de caractère
La premiere chaine de caractere est : 0 1 CEN/4 -1.000000E+00
La deuxieme chaine de caractere est : 0 5 CEN/4 -1.000000E+00
et ainsi de suite
Mon probleme est que le "1" ou le "5" (avant cen/4) change et prend d'autres valeurs. Ces valeurs sont stocké dans un tableau (Tabl2).
du coup voila ce que j'ai fais mais vous l'aurez compris, ca ne marche pas
merci de m'aider
cdlm
monfichier = Application.GetOpenFilename()
Open monfichier For Input As #1
For s = 1 To NbrNoeud
While Not EOF(1)
Line Input #1, ligne
Machaine = Cstr(Tabl2(s-1))
numcod = InStr(1, ligne, "0 Machaine CEN/4 -1.000000E+00")
If numcod <> 0 Then
Sheets("Feuil2").Cells(s, 1) = Mid$(ligne, 37, 13)
End If
Wend
Next s
bonjour,
essaie ainsi
numcod = InStr(1, ligne, "0 " & Machaine & " CEN/4 -1.000000E+00")
bonjour,
essaie ainsi
numcod = InStr(1, ligne, "0 " & Machaine & " CEN/4 -1.000000E+00")
Bonjour, je vous remercie de m'aider encore une nouvelle fois.
En effet j'avais essayé avec
numcod = InStr(1, ligne, "0 " + CStr(Tabl2(s - 1)) + " CEN/4 -1.000000E+00")
et ca marche
Cependant, la variable s ne s'incrémente pas malgré la boucle for et donc seule la premiere cellule (dans la condition if ) marche
je remets ici le code
monfichier = Application.GetOpenFilename()
Open monfichier For Input As #1
s = 1
While Not EOF(1)
Line Input #1, ligne
Machaine = CStr(Tabl2(s - 1))
numcod = InStr(1, ligne, "0 " + CStr(Tabl2(s - 1)) + " CEN/4 -1.000000E+00")
If numcod <> 0 Then
Sheets("Feuil2").Cells(s, 1) = Mid$(ligne, 37, 14)
s = s + 1
End If
Wend
Close #1
End Sub
Je met aussi ma macro et le fichier sur le quel il doit lire au cas ou. La partie se trouve tout en bas du code sur "Private Sub CommandButton2_Click() "
bonjour,
essaie ainsi
numcod = InStr(1, ligne, "0 " & Machaine & " CEN/4 -1.000000E+00")
Bonjour, je vous remercie de m'aider encore une nouvelle fois.
En effet j'avais essayé avec
numcod = InStr(1, ligne, "0 " + CStr(Tabl2(s - 1)) + " CEN/4 -1.000000E+00")
et ca marche
Cependant, la variable s ne s'incrémente pas malgré la boucle for et donc seule la premiere cellule (dans la condition if ) marche
je remets ici le code
monfichier = Application.GetOpenFilename() Open monfichier For Input As #1 s = 1 While Not EOF(1) Line Input #1, ligne Machaine = CStr(Tabl2(s - 1)) numcod = InStr(1, ligne, "0 " + CStr(Tabl2(s - 1)) + " CEN/4 -1.000000E+00") If numcod <> 0 Then Sheets("Feuil2").Cells(s, 1) = Mid$(ligne, 37, 14) s = s + 1 End If Wend Close #1 End Sub
Je met aussi ma macro et le fichier sur le quel il doit lire au cas ou. La partie se trouve tout en bas du code sur "Private Sub CommandButton2_Click() "
J'avais omis de mettre la boucle for, prenez plutot ce code
monfichier = Application.GetOpenFilename()
Open monfichier For Input As #1
For zs = 1 To NbrNoeud ' Probleme
While Not EOF(1)
Line Input #1, ligne
numcod = InStr(1, ligne, "0 " + CStr(Tabl2((zs - 1))) + " CEN/4 -1.000000E+00")
If numcod <> 0 Then
Sheets("Feuil2").Cells(zs, 1) = Mid$(ligne, 37, 14) ' probleme
End If
Wend
Next
Close #1
End Sub
Je remet ma macro simplifié ainsi que le fichier sur lequel le programme doit se référer
comme je le disais, seule la premiere cellule dans la condition if marche, comme si la variable "zs" ne s'incrémente pas sachant que NbrNoeud = 30
Bonjour,
recherche ta chaine "" CEN/4 -1.000000E+00"", et récupère le nombre qui précède.
Si ton nombre peut faire plus d'1 caractère il faudra rechercher où est l'espace qui précède ta chaine, avec InstrRev(), pour avoir sa longueur.
Et seulement après tu boucles sur ton tableau pour voir si ce nombre y est.
eric
Bonjour,
recherche ta chaine "" CEN/4 -1.000000E+00"", et récupère le nombre qui précède.
Si ton nombre peut faire plus d'1 caractère il faudra rechercher où est l'espace qui précède ta chaine, avec InstrRev(), pour avoir sa longueur.
Et seulement après tu boucles sur ton tableau pour voir si ce nombre y est.
eric
Bonjour et merci d’avoir répondu
Il faut absolument que me base aussi sur la valeur qui vient le « CEN/4 -1.000000E+00» pour bien cibler là où je veux qu’il se mette dans le programme. Cette chaîne de caractère existe plusieurs fois dans le fichier texte et donc ne pointera pas sur ce que je veux forcément d’où la valeur qui est avant le CEN/4 .
Cette valeur change justement et sont stockés dans un tableau. En gros je dois tester pour chaque valeur. Je ne vois pas pourquoi ça marche pas avec ce que j’ai fais (voir le code un peu plus haut)
bonjour,
essaie ceci
monfichier = Application.GetOpenFilename()
Open monfichier For Input As #1
' Probleme
While Not EOF(1)
Line Input #1, ligne
For zs = 1 To NbrNoeud
numcod = InStr(1, ligne, "0 " + CStr(Tabl2((zs - 1))) + " CEN/4 -1.000000E+00")
If numcod <> 0 Then
Sheets("Feuil2").Cells(zs, 1) = Mid$(ligne, 37, 14) ' probleme
exit for
End If
next zs
Wend
Next
Close #1
End Sub
Il faut absolument que me base aussi sur la valeur qui vient le « CEN/4 -1.000000E+00»
Ai-je dit le contraire ?
Lève le nez du guidon et relis plus tranquillement.
eric
Il faut absolument que me base aussi sur la valeur qui vient le « CEN/4 -1.000000E+00»
Ai-je dit le contraire ?
Lève le nez du guidon et relis plus tranquillement.
eric
Effectivement, j'avais pas bien compris ce que vous vouliez dire et effectivement, j'avais bien un probleme d'espace. Ca marche maintenant
Merci encore de m'avoir aider
De rien.
Tu devrais mettre ta solution pour les futurs lecteurs.
Merci
eric