Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur chaque
ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)), " ")
End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
> Il faut que mon fichier face 923 carateres donc comment utiliser la
> fonction String$
> pour qu' elle remplace par " "
>
> Merci pour tes reponses
> quelle galere je n'y arrive pas
>
> @+
>
> Yannick
>
>
> "ng" a écrit :
>
>> Salut,
>>
>> Oui il faut que les 784 caratères existent c'est évident, sinon il
>> faut les creér au préablable (fonction String$(" ", nb) qui est lpus
>> rapide que Space$(nb) ).
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> yannick wrote:
>>> je creer un fichier texte je saisis
>>> 111111111
>>> 222222222
>>> 333333333
>>> 444444444
>>>
>>> je n'obtiens rien (pas de E colonne 784)
>>>
>>> si je fais la meme chose et que je vais sous dos pour faire un edit
>>> 1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace et
>>> j'enregistre mon fichier 1.txt
>>> je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
>>> ete du laligne 1 colonne 784
>>>
>>> J'espere que tu as compris mon pb
>>>
>>> @+
>>>
>>> Yannick
>>>
>>> "ng" a écrit :
>>>
>>>> ???
>>>>
>>>> je ne comprends plus très bien là ?
>>>> quel est ton format de fichier exactement ?
>>>> Et a quoi correspondent ce que tu appelles positions ?
>>>> Car mon code fonctionne parfaitement bien pour un fichier ayant des
>>>> lignes avec au mois 784 caractères...
>>>>
>>>> --
>>>> Nicolas G.
>>>> FAQ VB : http://faq.vb.free.fr
>>>> API Guide : http://www.allapi.net
>>>> Google Groups : http://groups.google.fr/
>>>> MZ-Tools : http://www.mztools.com/
>>>>
>>>> yannick wrote:
>>>>> Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
>>>>> manuellement que j'appuie sur espace pour chaque ligne à la
>>>>> position 784.
>>>>> Donc probleme.
>>>>> Peut -on remplacer tous les vides dans le fichier par la valeur
>>>>> espace? sachant que mon fichier s'arrete à la position 921.
>>>>>
>>>>> Merci pour ton aide.
>>>>>
>>>>> @+
>>>>>
>>>>> Yannick
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> "ng" a écrit :
>>>>>
>>>>>> Salut,
>>>>>>
>>>>>> Line Input n'est pas très rapide, essaye plutot un code comme
>>>>>> celui ci :
>>>>>>
>>>>>> Option Explicit
>>>>>>
>>>>>> Private Sub Form_Load()
>>>>>> Dim k As Integer, strBuffer As String, tblLine() As String
>>>>>>
>>>>>> '//ouverture du fichier en mode binaire pour tout recupérer,
>>>>>> '// c'est plus rapide comme (surtout qu'on veut travailler
>>>>>> sur chaque ligne)
>>>>>>
>>>>>> k = FreeFile
>>>>>> Open "c:1.txt" For Binary As #k
>>>>>> strBuffer = String$(LOF(k), vbNullChar)
>>>>>> Get #k, , strBuffer
>>>>>> Close #k
>>>>>>
>>>>>> '//séparation en plusieurs lignes
>>>>>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>>>>>> '//puis on boucle sur chaque ligne
>>>>>> For k = 0 To UBound(tblLine)
>>>>>> '//vérifie si la ligne est assez grande,
>>>>>> '//tu peux l'enlever si tu es sur
>>>>>> '//que c'est tjrs le cas (mais attention
>>>>>> '//aux lignes vides !)
>>>>>> If Len(tblLine(k)) >= 784 Then
>>>>>> '//change le caractère 784
>>>>>> Mid$(tblLine(k), 784, 1) = "E"
>>>>>> End If
>>>>>> Next
>>>>>>
>>>>>> '//on ecrit les modifs
>>>>>> k = FreeFile
>>>>>> Open "c:1.txt" For Output As #k
>>>>>> Print #k, Join(tblLine, vbCrLf);
>>>>>> Close #k
>>>>>>
>>>>>> Erase tblLine
>>>>>>
>>>>>> End Sub
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Nicolas G.
>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>> API Guide : http://www.allapi.net
>>>>>> Google Groups : http://groups.google.fr/
>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>
>>>>>> yannick wrote:
>>>>>>> Bonjour ng,
>>>>>>> je suis novice mais j'essaye de me depatouiller sous vb
>>>>>>> voici mon code
>>>>>>>
>>>>>>> Dim NomFic As String
>>>>>>> Dim NoFic As Integer
>>>>>>> Dim s As String
>>>>>>>
>>>>>>> NoFic = FreeFile
>>>>>>> NomFic = "articles.txt"
>>>>>>> Open NomFic For Binary Access Read As NoFic
>>>>>>>
>>>>>>> Do
>>>>>>> If Loc(NoFic) = FileLen(NomFic) Then Exit Do
>>>>>>> Mid$(s, 784, 1) = "E"
>>>>>>> Line Input #NoFic, s
>>>>>>>
>>>>>>> Loop
>>>>>>> Close #NoFic
>>>>>>>
>>>>>>> Merci pour ton aide
>>>>>>>
>>>>>>> @+
>>>>>>>
>>>>>>> Yannick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "ng" a écrit :
>>>>>>>
>>>>>>>> Salut,
>>>>>>>>
>>>>>>>> Peut-on voir ton code ?
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicolas G.
>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>
>>>>>>>> yannick wrote:
>>>>>>>>> Merci Jean-Marc,
>>>>>>>>> je n' y arrive pas j'ai une erreur d'incompatibilte sur
>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>
>>>>>>>>> @+
>>>>>>>>>
>>>>>>>>> Yannick
>>>>>>>>>
>>>>>>>>> "Jean-Marc" a écrit :
>>>>>>>>>
>>>>>>>>>> "yannick" a écrit dans le
>>>>>>>>>> message de
>>>>>>>>>> news:
>>>>>>>>>>> Bonjour et bonne année à tous,
>>>>>>>>>>> j'ai un fichier txt (pas de separateurs de champs, longeur
>>>>>>>>>>> fixe) et j'aimerais mettre "E" à la position 784 pour chaque
>>>>>>>>>>> ligne. je pense l'importer dans une base mdb puis
>>>>>>>>>>> l'exporter. Je voudrais savoir quelle est l'instruction VB
>>>>>>>>>>> pour un format de longeur fixe? Je sais que la posistion 1
>>>>>>>>>>> c'est tel champs , la 9 un autre etc...
>>>>>>>>>>> Ou peut-on ecrire d'irectement dans ce fichier txt ?
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> Si les record sont organisés en lignes, alors c'est tout
>>>>>>>>>> simple. Lire le fichier ligne par ligne, puis pour écrire à
>>>>>>>>>> la position 784, faire ceci:
>>>>>>>>>>
>>>>>>>>>> soit s la chaine de caractere qui contient la ligne.
>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>
>>>>>>>>>> Il ne reste plus qu'à réécrire dans un second fichier les
>>>>>>>>>> lignes ainsi modifiées. Ensuite, on écrase le fichier
>>>>>>>>>> original et on renomme le nouveau fichier avec le nom de
>>>>>>>>>> l'original.
>>>>>>>>>>
>>>>>>>>>> On pourrait directement écrire dans le fichier original, mais
>>>>>>>>>> bof.. je préfère passer par un fichier intermédiaire. C'est
>>>>>>>>>> juste une affaire de gout.
>>>>>>>>>>
>>>>>>>>>> Si tu veux des détails, voir l'aide de l'instruction "Open".
>>>>>>>>>> Mode Texte si tes records sont en lignes, mode Binary sinon.
>>>>>>>>>>
>>>>>>>>>> hmm... pas sur que je sois très clair...
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Jean-marc
>>>>>>>>>> "There are only 10 kind of people
>>>>>>>>>> those who understand binary and those who don't."
Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur chaque
ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)), " ")
End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
> Il faut que mon fichier face 923 carateres donc comment utiliser la
> fonction String$
> pour qu' elle remplace par " "
>
> Merci pour tes reponses
> quelle galere je n'y arrive pas
>
> @+
>
> Yannick
>
>
> "ng" a écrit :
>
>> Salut,
>>
>> Oui il faut que les 784 caratères existent c'est évident, sinon il
>> faut les creér au préablable (fonction String$(" ", nb) qui est lpus
>> rapide que Space$(nb) ).
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> yannick wrote:
>>> je creer un fichier texte je saisis
>>> 111111111
>>> 222222222
>>> 333333333
>>> 444444444
>>>
>>> je n'obtiens rien (pas de E colonne 784)
>>>
>>> si je fais la meme chose et que je vais sous dos pour faire un edit
>>> 1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace et
>>> j'enregistre mon fichier 1.txt
>>> je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
>>> ete du laligne 1 colonne 784
>>>
>>> J'espere que tu as compris mon pb
>>>
>>> @+
>>>
>>> Yannick
>>>
>>> "ng" a écrit :
>>>
>>>> ???
>>>>
>>>> je ne comprends plus très bien là ?
>>>> quel est ton format de fichier exactement ?
>>>> Et a quoi correspondent ce que tu appelles positions ?
>>>> Car mon code fonctionne parfaitement bien pour un fichier ayant des
>>>> lignes avec au mois 784 caractères...
>>>>
>>>> --
>>>> Nicolas G.
>>>> FAQ VB : http://faq.vb.free.fr
>>>> API Guide : http://www.allapi.net
>>>> Google Groups : http://groups.google.fr/
>>>> MZ-Tools : http://www.mztools.com/
>>>>
>>>> yannick wrote:
>>>>> Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
>>>>> manuellement que j'appuie sur espace pour chaque ligne à la
>>>>> position 784.
>>>>> Donc probleme.
>>>>> Peut -on remplacer tous les vides dans le fichier par la valeur
>>>>> espace? sachant que mon fichier s'arrete à la position 921.
>>>>>
>>>>> Merci pour ton aide.
>>>>>
>>>>> @+
>>>>>
>>>>> Yannick
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> "ng" a écrit :
>>>>>
>>>>>> Salut,
>>>>>>
>>>>>> Line Input n'est pas très rapide, essaye plutot un code comme
>>>>>> celui ci :
>>>>>>
>>>>>> Option Explicit
>>>>>>
>>>>>> Private Sub Form_Load()
>>>>>> Dim k As Integer, strBuffer As String, tblLine() As String
>>>>>>
>>>>>> '//ouverture du fichier en mode binaire pour tout recupérer,
>>>>>> '// c'est plus rapide comme (surtout qu'on veut travailler
>>>>>> sur chaque ligne)
>>>>>>
>>>>>> k = FreeFile
>>>>>> Open "c:1.txt" For Binary As #k
>>>>>> strBuffer = String$(LOF(k), vbNullChar)
>>>>>> Get #k, , strBuffer
>>>>>> Close #k
>>>>>>
>>>>>> '//séparation en plusieurs lignes
>>>>>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>>>>>> '//puis on boucle sur chaque ligne
>>>>>> For k = 0 To UBound(tblLine)
>>>>>> '//vérifie si la ligne est assez grande,
>>>>>> '//tu peux l'enlever si tu es sur
>>>>>> '//que c'est tjrs le cas (mais attention
>>>>>> '//aux lignes vides !)
>>>>>> If Len(tblLine(k)) >= 784 Then
>>>>>> '//change le caractère 784
>>>>>> Mid$(tblLine(k), 784, 1) = "E"
>>>>>> End If
>>>>>> Next
>>>>>>
>>>>>> '//on ecrit les modifs
>>>>>> k = FreeFile
>>>>>> Open "c:1.txt" For Output As #k
>>>>>> Print #k, Join(tblLine, vbCrLf);
>>>>>> Close #k
>>>>>>
>>>>>> Erase tblLine
>>>>>>
>>>>>> End Sub
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Nicolas G.
>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>> API Guide : http://www.allapi.net
>>>>>> Google Groups : http://groups.google.fr/
>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>
>>>>>> yannick wrote:
>>>>>>> Bonjour ng,
>>>>>>> je suis novice mais j'essaye de me depatouiller sous vb
>>>>>>> voici mon code
>>>>>>>
>>>>>>> Dim NomFic As String
>>>>>>> Dim NoFic As Integer
>>>>>>> Dim s As String
>>>>>>>
>>>>>>> NoFic = FreeFile
>>>>>>> NomFic = "articles.txt"
>>>>>>> Open NomFic For Binary Access Read As NoFic
>>>>>>>
>>>>>>> Do
>>>>>>> If Loc(NoFic) = FileLen(NomFic) Then Exit Do
>>>>>>> Mid$(s, 784, 1) = "E"
>>>>>>> Line Input #NoFic, s
>>>>>>>
>>>>>>> Loop
>>>>>>> Close #NoFic
>>>>>>>
>>>>>>> Merci pour ton aide
>>>>>>>
>>>>>>> @+
>>>>>>>
>>>>>>> Yannick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "ng" a écrit :
>>>>>>>
>>>>>>>> Salut,
>>>>>>>>
>>>>>>>> Peut-on voir ton code ?
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicolas G.
>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>
>>>>>>>> yannick wrote:
>>>>>>>>> Merci Jean-Marc,
>>>>>>>>> je n' y arrive pas j'ai une erreur d'incompatibilte sur
>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>
>>>>>>>>> @+
>>>>>>>>>
>>>>>>>>> Yannick
>>>>>>>>>
>>>>>>>>> "Jean-Marc" a écrit :
>>>>>>>>>
>>>>>>>>>> "yannick" <yannick@discussions.microsoft.com> a écrit dans le
>>>>>>>>>> message de
>>>>>>>>>> news:2F06C912-ACBC-43AF-9AF2-83212D56CFAA@microsoft.com...
>>>>>>>>>>> Bonjour et bonne année à tous,
>>>>>>>>>>> j'ai un fichier txt (pas de separateurs de champs, longeur
>>>>>>>>>>> fixe) et j'aimerais mettre "E" à la position 784 pour chaque
>>>>>>>>>>> ligne. je pense l'importer dans une base mdb puis
>>>>>>>>>>> l'exporter. Je voudrais savoir quelle est l'instruction VB
>>>>>>>>>>> pour un format de longeur fixe? Je sais que la posistion 1
>>>>>>>>>>> c'est tel champs , la 9 un autre etc...
>>>>>>>>>>> Ou peut-on ecrire d'irectement dans ce fichier txt ?
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> Si les record sont organisés en lignes, alors c'est tout
>>>>>>>>>> simple. Lire le fichier ligne par ligne, puis pour écrire à
>>>>>>>>>> la position 784, faire ceci:
>>>>>>>>>>
>>>>>>>>>> soit s la chaine de caractere qui contient la ligne.
>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>
>>>>>>>>>> Il ne reste plus qu'à réécrire dans un second fichier les
>>>>>>>>>> lignes ainsi modifiées. Ensuite, on écrase le fichier
>>>>>>>>>> original et on renomme le nouveau fichier avec le nom de
>>>>>>>>>> l'original.
>>>>>>>>>>
>>>>>>>>>> On pourrait directement écrire dans le fichier original, mais
>>>>>>>>>> bof.. je préfère passer par un fichier intermédiaire. C'est
>>>>>>>>>> juste une affaire de gout.
>>>>>>>>>>
>>>>>>>>>> Si tu veux des détails, voir l'aide de l'instruction "Open".
>>>>>>>>>> Mode Texte si tes records sont en lignes, mode Binary sinon.
>>>>>>>>>>
>>>>>>>>>> hmm... pas sur que je sois très clair...
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Jean-marc
>>>>>>>>>> "There are only 10 kind of people
>>>>>>>>>> those who understand binary and those who don't."
Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur chaque
ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)), " ")
End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
> Il faut que mon fichier face 923 carateres donc comment utiliser la
> fonction String$
> pour qu' elle remplace par " "
>
> Merci pour tes reponses
> quelle galere je n'y arrive pas
>
> @+
>
> Yannick
>
>
> "ng" a écrit :
>
>> Salut,
>>
>> Oui il faut que les 784 caratères existent c'est évident, sinon il
>> faut les creér au préablable (fonction String$(" ", nb) qui est lpus
>> rapide que Space$(nb) ).
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> yannick wrote:
>>> je creer un fichier texte je saisis
>>> 111111111
>>> 222222222
>>> 333333333
>>> 444444444
>>>
>>> je n'obtiens rien (pas de E colonne 784)
>>>
>>> si je fais la meme chose et que je vais sous dos pour faire un edit
>>> 1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace et
>>> j'enregistre mon fichier 1.txt
>>> je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
>>> ete du laligne 1 colonne 784
>>>
>>> J'espere que tu as compris mon pb
>>>
>>> @+
>>>
>>> Yannick
>>>
>>> "ng" a écrit :
>>>
>>>> ???
>>>>
>>>> je ne comprends plus très bien là ?
>>>> quel est ton format de fichier exactement ?
>>>> Et a quoi correspondent ce que tu appelles positions ?
>>>> Car mon code fonctionne parfaitement bien pour un fichier ayant des
>>>> lignes avec au mois 784 caractères...
>>>>
>>>> --
>>>> Nicolas G.
>>>> FAQ VB : http://faq.vb.free.fr
>>>> API Guide : http://www.allapi.net
>>>> Google Groups : http://groups.google.fr/
>>>> MZ-Tools : http://www.mztools.com/
>>>>
>>>> yannick wrote:
>>>>> Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
>>>>> manuellement que j'appuie sur espace pour chaque ligne à la
>>>>> position 784.
>>>>> Donc probleme.
>>>>> Peut -on remplacer tous les vides dans le fichier par la valeur
>>>>> espace? sachant que mon fichier s'arrete à la position 921.
>>>>>
>>>>> Merci pour ton aide.
>>>>>
>>>>> @+
>>>>>
>>>>> Yannick
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> "ng" a écrit :
>>>>>
>>>>>> Salut,
>>>>>>
>>>>>> Line Input n'est pas très rapide, essaye plutot un code comme
>>>>>> celui ci :
>>>>>>
>>>>>> Option Explicit
>>>>>>
>>>>>> Private Sub Form_Load()
>>>>>> Dim k As Integer, strBuffer As String, tblLine() As String
>>>>>>
>>>>>> '//ouverture du fichier en mode binaire pour tout recupérer,
>>>>>> '// c'est plus rapide comme (surtout qu'on veut travailler
>>>>>> sur chaque ligne)
>>>>>>
>>>>>> k = FreeFile
>>>>>> Open "c:1.txt" For Binary As #k
>>>>>> strBuffer = String$(LOF(k), vbNullChar)
>>>>>> Get #k, , strBuffer
>>>>>> Close #k
>>>>>>
>>>>>> '//séparation en plusieurs lignes
>>>>>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>>>>>> '//puis on boucle sur chaque ligne
>>>>>> For k = 0 To UBound(tblLine)
>>>>>> '//vérifie si la ligne est assez grande,
>>>>>> '//tu peux l'enlever si tu es sur
>>>>>> '//que c'est tjrs le cas (mais attention
>>>>>> '//aux lignes vides !)
>>>>>> If Len(tblLine(k)) >= 784 Then
>>>>>> '//change le caractère 784
>>>>>> Mid$(tblLine(k), 784, 1) = "E"
>>>>>> End If
>>>>>> Next
>>>>>>
>>>>>> '//on ecrit les modifs
>>>>>> k = FreeFile
>>>>>> Open "c:1.txt" For Output As #k
>>>>>> Print #k, Join(tblLine, vbCrLf);
>>>>>> Close #k
>>>>>>
>>>>>> Erase tblLine
>>>>>>
>>>>>> End Sub
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Nicolas G.
>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>> API Guide : http://www.allapi.net
>>>>>> Google Groups : http://groups.google.fr/
>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>
>>>>>> yannick wrote:
>>>>>>> Bonjour ng,
>>>>>>> je suis novice mais j'essaye de me depatouiller sous vb
>>>>>>> voici mon code
>>>>>>>
>>>>>>> Dim NomFic As String
>>>>>>> Dim NoFic As Integer
>>>>>>> Dim s As String
>>>>>>>
>>>>>>> NoFic = FreeFile
>>>>>>> NomFic = "articles.txt"
>>>>>>> Open NomFic For Binary Access Read As NoFic
>>>>>>>
>>>>>>> Do
>>>>>>> If Loc(NoFic) = FileLen(NomFic) Then Exit Do
>>>>>>> Mid$(s, 784, 1) = "E"
>>>>>>> Line Input #NoFic, s
>>>>>>>
>>>>>>> Loop
>>>>>>> Close #NoFic
>>>>>>>
>>>>>>> Merci pour ton aide
>>>>>>>
>>>>>>> @+
>>>>>>>
>>>>>>> Yannick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "ng" a écrit :
>>>>>>>
>>>>>>>> Salut,
>>>>>>>>
>>>>>>>> Peut-on voir ton code ?
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicolas G.
>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>
>>>>>>>> yannick wrote:
>>>>>>>>> Merci Jean-Marc,
>>>>>>>>> je n' y arrive pas j'ai une erreur d'incompatibilte sur
>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>
>>>>>>>>> @+
>>>>>>>>>
>>>>>>>>> Yannick
>>>>>>>>>
>>>>>>>>> "Jean-Marc" a écrit :
>>>>>>>>>
>>>>>>>>>> "yannick" a écrit dans le
>>>>>>>>>> message de
>>>>>>>>>> news:
>>>>>>>>>>> Bonjour et bonne année à tous,
>>>>>>>>>>> j'ai un fichier txt (pas de separateurs de champs, longeur
>>>>>>>>>>> fixe) et j'aimerais mettre "E" à la position 784 pour chaque
>>>>>>>>>>> ligne. je pense l'importer dans une base mdb puis
>>>>>>>>>>> l'exporter. Je voudrais savoir quelle est l'instruction VB
>>>>>>>>>>> pour un format de longeur fixe? Je sais que la posistion 1
>>>>>>>>>>> c'est tel champs , la 9 un autre etc...
>>>>>>>>>>> Ou peut-on ecrire d'irectement dans ce fichier txt ?
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> Si les record sont organisés en lignes, alors c'est tout
>>>>>>>>>> simple. Lire le fichier ligne par ligne, puis pour écrire à
>>>>>>>>>> la position 784, faire ceci:
>>>>>>>>>>
>>>>>>>>>> soit s la chaine de caractere qui contient la ligne.
>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>
>>>>>>>>>> Il ne reste plus qu'à réécrire dans un second fichier les
>>>>>>>>>> lignes ainsi modifiées. Ensuite, on écrase le fichier
>>>>>>>>>> original et on renomme le nouveau fichier avec le nom de
>>>>>>>>>> l'original.
>>>>>>>>>>
>>>>>>>>>> On pourrait directement écrire dans le fichier original, mais
>>>>>>>>>> bof.. je préfère passer par un fichier intermédiaire. C'est
>>>>>>>>>> juste une affaire de gout.
>>>>>>>>>>
>>>>>>>>>> Si tu veux des détails, voir l'aide de l'instruction "Open".
>>>>>>>>>> Mode Texte si tes records sont en lignes, mode Binary sinon.
>>>>>>>>>>
>>>>>>>>>> hmm... pas sur que je sois très clair...
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Jean-marc
>>>>>>>>>> "There are only 10 kind of people
>>>>>>>>>> those who understand binary and those who don't."
Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
caratere à inserer à la colonne 872 mais je pense que je vais y
arriver.
Un grand merci à toi.
@+
Yannick
"ng" a écrit :Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur
chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)),
" ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Il faut que mon fichier face 923 carateres donc comment utiliser la
fonction String$
pour qu' elle remplace par " "
Merci pour tes reponses
quelle galere je n'y arrive pas
@+
Yannick
"ng" a écrit :Salut,
Oui il faut que les 784 caratères existent c'est évident, sinon il
faut les creér au préablable (fonction String$(" ", nb) qui est
lpus rapide que Space$(nb) ).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:je creer un fichier texte je saisis
111111111
222222222
333333333
444444444
je n'obtiens rien (pas de E colonne 784)
si je fais la meme chose et que je vais sous dos pour faire un
edit
1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
et j'enregistre mon fichier 1.txt
je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
ete du laligne 1 colonne 784
J'espere que tu as compris mon pb
@+
Yannick
"ng" a écrit :???
je ne comprends plus très bien là ?
quel est ton format de fichier exactement ?
Et a quoi correspondent ce que tu appelles positions ?
Car mon code fonctionne parfaitement bien pour un fichier ayant
des lignes avec au mois 784 caractères...
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
manuellement que j'appuie sur espace pour chaque ligne à la
position 784.
Donc probleme.
Peut -on remplacer tous les vides dans le fichier par la valeur
espace? sachant que mon fichier s'arrete à la position 921.
Merci pour ton aide.
@+
Yannick
"ng" a écrit :Salut,
Line Input n'est pas très rapide, essaye plutot un code comme
celui ci :
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout
recupérer, '// c'est plus rapide comme (surtout qu'on veut
travailler
sur chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//vérifie si la ligne est assez grande,
'//tu peux l'enlever si tu es sur
'//que c'est tjrs le cas (mais attention
'//aux lignes vides !)
If Len(tblLine(k)) >= 784 Then
'//change le caractère 784
Mid$(tblLine(k), 784, 1) = "E"
End If
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Bonjour ng,
je suis novice mais j'essaye de me depatouiller sous vb
voici mon code
Dim NomFic As String
Dim NoFic As Integer
Dim s As String
NoFic = FreeFile
NomFic = "articles.txt"
Open NomFic For Binary Access Read As NoFic
Do
If Loc(NoFic) = FileLen(NomFic) Then Exit Do
Mid$(s, 784, 1) = "E"
Line Input #NoFic, s
Loop
Close #NoFic
Merci pour ton aide
@+
Yannick
"ng" a écrit :Salut,
Peut-on voir ton code ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci Jean-Marc,
je n' y arrive pas j'ai une erreur d'incompatibilte sur
mid$(s,784,1) = "E"
@+
Yannick
"Jean-Marc" a écrit :"yannick" a écrit dans
le message de
news:Bonjour et bonne année à tous,
j'ai un fichier txt (pas de separateurs de champs, longeur
fixe) et j'aimerais mettre "E" à la position 784 pour
chaque ligne. je pense l'importer dans une base mdb puis
l'exporter. Je voudrais savoir quelle est l'instruction VB
pour un format de longeur fixe? Je sais que la posistion 1
c'est tel champs , la 9 un autre etc...
Ou peut-on ecrire d'irectement dans ce fichier txt ?
Hello,
Si les record sont organisés en lignes, alors c'est tout
simple. Lire le fichier ligne par ligne, puis pour écrire à
la position 784, faire ceci:
soit s la chaine de caractere qui contient la ligne.
mid$(s,784,1) = "E"
Il ne reste plus qu'à réécrire dans un second fichier les
lignes ainsi modifiées. Ensuite, on écrase le fichier
original et on renomme le nouveau fichier avec le nom de
l'original.
On pourrait directement écrire dans le fichier original,
mais bof.. je préfère passer par un fichier intermédiaire.
C'est juste une affaire de gout.
Si tu veux des détails, voir l'aide de l'instruction
"Open". Mode Texte si tes records sont en lignes, mode
Binary sinon.
hmm... pas sur que je sois très clair...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
caratere à inserer à la colonne 872 mais je pense que je vais y
arriver.
Un grand merci à toi.
@+
Yannick
"ng" a écrit :
Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur
chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)),
" ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Il faut que mon fichier face 923 carateres donc comment utiliser la
fonction String$
pour qu' elle remplace par " "
Merci pour tes reponses
quelle galere je n'y arrive pas
@+
Yannick
"ng" a écrit :
Salut,
Oui il faut que les 784 caratères existent c'est évident, sinon il
faut les creér au préablable (fonction String$(" ", nb) qui est
lpus rapide que Space$(nb) ).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
je creer un fichier texte je saisis
111111111
222222222
333333333
444444444
je n'obtiens rien (pas de E colonne 784)
si je fais la meme chose et que je vais sous dos pour faire un
edit
1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
et j'enregistre mon fichier 1.txt
je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
ete du laligne 1 colonne 784
J'espere que tu as compris mon pb
@+
Yannick
"ng" a écrit :
???
je ne comprends plus très bien là ?
quel est ton format de fichier exactement ?
Et a quoi correspondent ce que tu appelles positions ?
Car mon code fonctionne parfaitement bien pour un fichier ayant
des lignes avec au mois 784 caractères...
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
manuellement que j'appuie sur espace pour chaque ligne à la
position 784.
Donc probleme.
Peut -on remplacer tous les vides dans le fichier par la valeur
espace? sachant que mon fichier s'arrete à la position 921.
Merci pour ton aide.
@+
Yannick
"ng" a écrit :
Salut,
Line Input n'est pas très rapide, essaye plutot un code comme
celui ci :
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout
recupérer, '// c'est plus rapide comme (surtout qu'on veut
travailler
sur chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//vérifie si la ligne est assez grande,
'//tu peux l'enlever si tu es sur
'//que c'est tjrs le cas (mais attention
'//aux lignes vides !)
If Len(tblLine(k)) >= 784 Then
'//change le caractère 784
Mid$(tblLine(k), 784, 1) = "E"
End If
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Bonjour ng,
je suis novice mais j'essaye de me depatouiller sous vb
voici mon code
Dim NomFic As String
Dim NoFic As Integer
Dim s As String
NoFic = FreeFile
NomFic = "articles.txt"
Open NomFic For Binary Access Read As NoFic
Do
If Loc(NoFic) = FileLen(NomFic) Then Exit Do
Mid$(s, 784, 1) = "E"
Line Input #NoFic, s
Loop
Close #NoFic
Merci pour ton aide
@+
Yannick
"ng" a écrit :
Salut,
Peut-on voir ton code ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Merci Jean-Marc,
je n' y arrive pas j'ai une erreur d'incompatibilte sur
mid$(s,784,1) = "E"
@+
Yannick
"Jean-Marc" a écrit :
"yannick" <yannick@discussions.microsoft.com> a écrit dans
le message de
news:2F06C912-ACBC-43AF-9AF2-83212D56CFAA@microsoft.com...
Bonjour et bonne année à tous,
j'ai un fichier txt (pas de separateurs de champs, longeur
fixe) et j'aimerais mettre "E" à la position 784 pour
chaque ligne. je pense l'importer dans une base mdb puis
l'exporter. Je voudrais savoir quelle est l'instruction VB
pour un format de longeur fixe? Je sais que la posistion 1
c'est tel champs , la 9 un autre etc...
Ou peut-on ecrire d'irectement dans ce fichier txt ?
Hello,
Si les record sont organisés en lignes, alors c'est tout
simple. Lire le fichier ligne par ligne, puis pour écrire à
la position 784, faire ceci:
soit s la chaine de caractere qui contient la ligne.
mid$(s,784,1) = "E"
Il ne reste plus qu'à réécrire dans un second fichier les
lignes ainsi modifiées. Ensuite, on écrase le fichier
original et on renomme le nouveau fichier avec le nom de
l'original.
On pourrait directement écrire dans le fichier original,
mais bof.. je préfère passer par un fichier intermédiaire.
C'est juste une affaire de gout.
Si tu veux des détails, voir l'aide de l'instruction
"Open". Mode Texte si tes records sont en lignes, mode
Binary sinon.
hmm... pas sur que je sois très clair...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
caratere à inserer à la colonne 872 mais je pense que je vais y
arriver.
Un grand merci à toi.
@+
Yannick
"ng" a écrit :Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur
chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)),
" ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Il faut que mon fichier face 923 carateres donc comment utiliser la
fonction String$
pour qu' elle remplace par " "
Merci pour tes reponses
quelle galere je n'y arrive pas
@+
Yannick
"ng" a écrit :Salut,
Oui il faut que les 784 caratères existent c'est évident, sinon il
faut les creér au préablable (fonction String$(" ", nb) qui est
lpus rapide que Space$(nb) ).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:je creer un fichier texte je saisis
111111111
222222222
333333333
444444444
je n'obtiens rien (pas de E colonne 784)
si je fais la meme chose et que je vais sous dos pour faire un
edit
1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
et j'enregistre mon fichier 1.txt
je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
ete du laligne 1 colonne 784
J'espere que tu as compris mon pb
@+
Yannick
"ng" a écrit :???
je ne comprends plus très bien là ?
quel est ton format de fichier exactement ?
Et a quoi correspondent ce que tu appelles positions ?
Car mon code fonctionne parfaitement bien pour un fichier ayant
des lignes avec au mois 784 caractères...
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
manuellement que j'appuie sur espace pour chaque ligne à la
position 784.
Donc probleme.
Peut -on remplacer tous les vides dans le fichier par la valeur
espace? sachant que mon fichier s'arrete à la position 921.
Merci pour ton aide.
@+
Yannick
"ng" a écrit :Salut,
Line Input n'est pas très rapide, essaye plutot un code comme
celui ci :
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout
recupérer, '// c'est plus rapide comme (surtout qu'on veut
travailler
sur chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//vérifie si la ligne est assez grande,
'//tu peux l'enlever si tu es sur
'//que c'est tjrs le cas (mais attention
'//aux lignes vides !)
If Len(tblLine(k)) >= 784 Then
'//change le caractère 784
Mid$(tblLine(k), 784, 1) = "E"
End If
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Bonjour ng,
je suis novice mais j'essaye de me depatouiller sous vb
voici mon code
Dim NomFic As String
Dim NoFic As Integer
Dim s As String
NoFic = FreeFile
NomFic = "articles.txt"
Open NomFic For Binary Access Read As NoFic
Do
If Loc(NoFic) = FileLen(NomFic) Then Exit Do
Mid$(s, 784, 1) = "E"
Line Input #NoFic, s
Loop
Close #NoFic
Merci pour ton aide
@+
Yannick
"ng" a écrit :Salut,
Peut-on voir ton code ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci Jean-Marc,
je n' y arrive pas j'ai une erreur d'incompatibilte sur
mid$(s,784,1) = "E"
@+
Yannick
"Jean-Marc" a écrit :"yannick" a écrit dans
le message de
news:Bonjour et bonne année à tous,
j'ai un fichier txt (pas de separateurs de champs, longeur
fixe) et j'aimerais mettre "E" à la position 784 pour
chaque ligne. je pense l'importer dans une base mdb puis
l'exporter. Je voudrais savoir quelle est l'instruction VB
pour un format de longeur fixe? Je sais que la posistion 1
c'est tel champs , la 9 un autre etc...
Ou peut-on ecrire d'irectement dans ce fichier txt ?
Hello,
Si les record sont organisés en lignes, alors c'est tout
simple. Lire le fichier ligne par ligne, puis pour écrire à
la position 784, faire ceci:
soit s la chaine de caractere qui contient la ligne.
mid$(s,784,1) = "E"
Il ne reste plus qu'à réécrire dans un second fichier les
lignes ainsi modifiées. Ensuite, on écrase le fichier
original et on renomme le nouveau fichier avec le nom de
l'original.
On pourrait directement écrire dans le fichier original,
mais bof.. je préfère passer par un fichier intermédiaire.
C'est juste une affaire de gout.
Si tu veux des détails, voir l'aide de l'instruction
"Open". Mode Texte si tes records sont en lignes, mode
Binary sinon.
hmm... pas sur que je sois très clair...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Salut,
Oui c'est tout bete :
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ? On vérifie pour le plus grand
champs
If Len(tblLine(k)) < 872 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(872 - Len(tblLine(k)), " ")
End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Mid$(tblLine(k), 872, 1) = "F"
Next
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
> Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
> caratere à inserer à la colonne 872 mais je pense que je vais y
> arriver.
>
> Un grand merci à toi.
>
> @+
>
> Yannick
>
>
> "ng" a écrit :
>
>> Salut,
>>
>> Option Explicit
>>
>> Private Sub Form_Load()
>> Dim k As Integer, strBuffer As String, tblLine() As String
>>
>> '//ouverture du fichier en mode binaire pour tout recupérer,
>> '// c'est plus rapide comme (surtout qu'on veut travailler sur
>> chaque ligne)
>>
>> k = FreeFile
>> Open "c:1.txt" For Binary As #k
>> strBuffer = String$(LOF(k), vbNullChar)
>> Get #k, , strBuffer
>> Close #k
>>
>> '//séparation en plusieurs lignes
>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>> '//puis on boucle sur chaque ligne
>> For k = 0 To UBound(tblLine)
>> '//y a t'il deja assez de caratères ?
>> If Len(tblLine(k)) < 784 Then
>> '//non ! alors on complète avec des espaces
>> tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)),
>> " ") End If
>> '//puis on change le caratère
>> Mid$(tblLine(k), 784, 1) = "E"
>> Next
>>
>> '//on ecrit les modifs
>> k = FreeFile
>> Open "c:1.txt" For Output As #k
>> Print #k, Join(tblLine, vbCrLf);
>> Close #k
>>
>> Erase tblLine
>>
>> End Sub
>>
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> yannick wrote:
>>> Il faut que mon fichier face 923 carateres donc comment utiliser la
>>> fonction String$
>>> pour qu' elle remplace par " "
>>>
>>> Merci pour tes reponses
>>> quelle galere je n'y arrive pas
>>>
>>> @+
>>>
>>> Yannick
>>>
>>>
>>> "ng" a écrit :
>>>
>>>> Salut,
>>>>
>>>> Oui il faut que les 784 caratères existent c'est évident, sinon il
>>>> faut les creér au préablable (fonction String$(" ", nb) qui est
>>>> lpus rapide que Space$(nb) ).
>>>>
>>>> --
>>>> Nicolas G.
>>>> FAQ VB : http://faq.vb.free.fr
>>>> API Guide : http://www.allapi.net
>>>> Google Groups : http://groups.google.fr/
>>>> MZ-Tools : http://www.mztools.com/
>>>>
>>>> yannick wrote:
>>>>> je creer un fichier texte je saisis
>>>>> 111111111
>>>>> 222222222
>>>>> 333333333
>>>>> 444444444
>>>>>
>>>>> je n'obtiens rien (pas de E colonne 784)
>>>>>
>>>>> si je fais la meme chose et que je vais sous dos pour faire un
>>>>> edit
>>>>> 1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
>>>>> et j'enregistre mon fichier 1.txt
>>>>> je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
>>>>> ete du laligne 1 colonne 784
>>>>>
>>>>> J'espere que tu as compris mon pb
>>>>>
>>>>> @+
>>>>>
>>>>> Yannick
>>>>>
>>>>> "ng" a écrit :
>>>>>
>>>>>> ???
>>>>>>
>>>>>> je ne comprends plus très bien là ?
>>>>>> quel est ton format de fichier exactement ?
>>>>>> Et a quoi correspondent ce que tu appelles positions ?
>>>>>> Car mon code fonctionne parfaitement bien pour un fichier ayant
>>>>>> des lignes avec au mois 784 caractères...
>>>>>>
>>>>>> --
>>>>>> Nicolas G.
>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>> API Guide : http://www.allapi.net
>>>>>> Google Groups : http://groups.google.fr/
>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>
>>>>>> yannick wrote:
>>>>>>> Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
>>>>>>> manuellement que j'appuie sur espace pour chaque ligne à la
>>>>>>> position 784.
>>>>>>> Donc probleme.
>>>>>>> Peut -on remplacer tous les vides dans le fichier par la valeur
>>>>>>> espace? sachant que mon fichier s'arrete à la position 921.
>>>>>>>
>>>>>>> Merci pour ton aide.
>>>>>>>
>>>>>>> @+
>>>>>>>
>>>>>>> Yannick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "ng" a écrit :
>>>>>>>
>>>>>>>> Salut,
>>>>>>>>
>>>>>>>> Line Input n'est pas très rapide, essaye plutot un code comme
>>>>>>>> celui ci :
>>>>>>>>
>>>>>>>> Option Explicit
>>>>>>>>
>>>>>>>> Private Sub Form_Load()
>>>>>>>> Dim k As Integer, strBuffer As String, tblLine() As String
>>>>>>>>
>>>>>>>> '//ouverture du fichier en mode binaire pour tout
>>>>>>>> recupérer, '// c'est plus rapide comme (surtout qu'on veut
>>>>>>>> travailler
>>>>>>>> sur chaque ligne)
>>>>>>>>
>>>>>>>> k = FreeFile
>>>>>>>> Open "c:1.txt" For Binary As #k
>>>>>>>> strBuffer = String$(LOF(k), vbNullChar)
>>>>>>>> Get #k, , strBuffer
>>>>>>>> Close #k
>>>>>>>>
>>>>>>>> '//séparation en plusieurs lignes
>>>>>>>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>>>>>>>> '//puis on boucle sur chaque ligne
>>>>>>>> For k = 0 To UBound(tblLine)
>>>>>>>> '//vérifie si la ligne est assez grande,
>>>>>>>> '//tu peux l'enlever si tu es sur
>>>>>>>> '//que c'est tjrs le cas (mais attention
>>>>>>>> '//aux lignes vides !)
>>>>>>>> If Len(tblLine(k)) >= 784 Then
>>>>>>>> '//change le caractère 784
>>>>>>>> Mid$(tblLine(k), 784, 1) = "E"
>>>>>>>> End If
>>>>>>>> Next
>>>>>>>>
>>>>>>>> '//on ecrit les modifs
>>>>>>>> k = FreeFile
>>>>>>>> Open "c:1.txt" For Output As #k
>>>>>>>> Print #k, Join(tblLine, vbCrLf);
>>>>>>>> Close #k
>>>>>>>>
>>>>>>>> Erase tblLine
>>>>>>>>
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicolas G.
>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>
>>>>>>>> yannick wrote:
>>>>>>>>> Bonjour ng,
>>>>>>>>> je suis novice mais j'essaye de me depatouiller sous vb
>>>>>>>>> voici mon code
>>>>>>>>>
>>>>>>>>> Dim NomFic As String
>>>>>>>>> Dim NoFic As Integer
>>>>>>>>> Dim s As String
>>>>>>>>>
>>>>>>>>> NoFic = FreeFile
>>>>>>>>> NomFic = "articles.txt"
>>>>>>>>> Open NomFic For Binary Access Read As NoFic
>>>>>>>>>
>>>>>>>>> Do
>>>>>>>>> If Loc(NoFic) = FileLen(NomFic) Then Exit Do
>>>>>>>>> Mid$(s, 784, 1) = "E"
>>>>>>>>> Line Input #NoFic, s
>>>>>>>>>
>>>>>>>>> Loop
>>>>>>>>> Close #NoFic
>>>>>>>>>
>>>>>>>>> Merci pour ton aide
>>>>>>>>>
>>>>>>>>> @+
>>>>>>>>>
>>>>>>>>> Yannick
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> "ng" a écrit :
>>>>>>>>>
>>>>>>>>>> Salut,
>>>>>>>>>>
>>>>>>>>>> Peut-on voir ton code ?
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Nicolas G.
>>>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>>>
>>>>>>>>>> yannick wrote:
>>>>>>>>>>> Merci Jean-Marc,
>>>>>>>>>>> je n' y arrive pas j'ai une erreur d'incompatibilte sur
>>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>>
>>>>>>>>>>> @+
>>>>>>>>>>>
>>>>>>>>>>> Yannick
>>>>>>>>>>>
>>>>>>>>>>> "Jean-Marc" a écrit :
>>>>>>>>>>>
>>>>>>>>>>>> "yannick" a écrit dans
>>>>>>>>>>>> le message de
>>>>>>>>>>>> news:
>>>>>>>>>>>>> Bonjour et bonne année à tous,
>>>>>>>>>>>>> j'ai un fichier txt (pas de separateurs de champs, longeur
>>>>>>>>>>>>> fixe) et j'aimerais mettre "E" à la position 784 pour
>>>>>>>>>>>>> chaque ligne. je pense l'importer dans une base mdb puis
>>>>>>>>>>>>> l'exporter. Je voudrais savoir quelle est l'instruction VB
>>>>>>>>>>>>> pour un format de longeur fixe? Je sais que la posistion 1
>>>>>>>>>>>>> c'est tel champs , la 9 un autre etc...
>>>>>>>>>>>>> Ou peut-on ecrire d'irectement dans ce fichier txt ?
>>>>>>>>>>>>
>>>>>>>>>>>> Hello,
>>>>>>>>>>>>
>>>>>>>>>>>> Si les record sont organisés en lignes, alors c'est tout
>>>>>>>>>>>> simple. Lire le fichier ligne par ligne, puis pour écrire à
>>>>>>>>>>>> la position 784, faire ceci:
>>>>>>>>>>>>
>>>>>>>>>>>> soit s la chaine de caractere qui contient la ligne.
>>>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>>>
>>>>>>>>>>>> Il ne reste plus qu'à réécrire dans un second fichier les
>>>>>>>>>>>> lignes ainsi modifiées. Ensuite, on écrase le fichier
>>>>>>>>>>>> original et on renomme le nouveau fichier avec le nom de
>>>>>>>>>>>> l'original.
>>>>>>>>>>>>
>>>>>>>>>>>> On pourrait directement écrire dans le fichier original,
>>>>>>>>>>>> mais bof.. je préfère passer par un fichier intermédiaire.
>>>>>>>>>>>> C'est juste une affaire de gout.
>>>>>>>>>>>>
>>>>>>>>>>>> Si tu veux des détails, voir l'aide de l'instruction
>>>>>>>>>>>> "Open". Mode Texte si tes records sont en lignes, mode
>>>>>>>>>>>> Binary sinon.
>>>>>>>>>>>>
>>>>>>>>>>>> hmm... pas sur que je sois très clair...
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Jean-marc
>>>>>>>>>>>> "There are only 10 kind of people
>>>>>>>>>>>> those who understand binary and those who don't."
Salut,
Oui c'est tout bete :
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ? On vérifie pour le plus grand
champs
If Len(tblLine(k)) < 872 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(872 - Len(tblLine(k)), " ")
End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Mid$(tblLine(k), 872, 1) = "F"
Next
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
> Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
> caratere à inserer à la colonne 872 mais je pense que je vais y
> arriver.
>
> Un grand merci à toi.
>
> @+
>
> Yannick
>
>
> "ng" a écrit :
>
>> Salut,
>>
>> Option Explicit
>>
>> Private Sub Form_Load()
>> Dim k As Integer, strBuffer As String, tblLine() As String
>>
>> '//ouverture du fichier en mode binaire pour tout recupérer,
>> '// c'est plus rapide comme (surtout qu'on veut travailler sur
>> chaque ligne)
>>
>> k = FreeFile
>> Open "c:1.txt" For Binary As #k
>> strBuffer = String$(LOF(k), vbNullChar)
>> Get #k, , strBuffer
>> Close #k
>>
>> '//séparation en plusieurs lignes
>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>> '//puis on boucle sur chaque ligne
>> For k = 0 To UBound(tblLine)
>> '//y a t'il deja assez de caratères ?
>> If Len(tblLine(k)) < 784 Then
>> '//non ! alors on complète avec des espaces
>> tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)),
>> " ") End If
>> '//puis on change le caratère
>> Mid$(tblLine(k), 784, 1) = "E"
>> Next
>>
>> '//on ecrit les modifs
>> k = FreeFile
>> Open "c:1.txt" For Output As #k
>> Print #k, Join(tblLine, vbCrLf);
>> Close #k
>>
>> Erase tblLine
>>
>> End Sub
>>
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> yannick wrote:
>>> Il faut que mon fichier face 923 carateres donc comment utiliser la
>>> fonction String$
>>> pour qu' elle remplace par " "
>>>
>>> Merci pour tes reponses
>>> quelle galere je n'y arrive pas
>>>
>>> @+
>>>
>>> Yannick
>>>
>>>
>>> "ng" a écrit :
>>>
>>>> Salut,
>>>>
>>>> Oui il faut que les 784 caratères existent c'est évident, sinon il
>>>> faut les creér au préablable (fonction String$(" ", nb) qui est
>>>> lpus rapide que Space$(nb) ).
>>>>
>>>> --
>>>> Nicolas G.
>>>> FAQ VB : http://faq.vb.free.fr
>>>> API Guide : http://www.allapi.net
>>>> Google Groups : http://groups.google.fr/
>>>> MZ-Tools : http://www.mztools.com/
>>>>
>>>> yannick wrote:
>>>>> je creer un fichier texte je saisis
>>>>> 111111111
>>>>> 222222222
>>>>> 333333333
>>>>> 444444444
>>>>>
>>>>> je n'obtiens rien (pas de E colonne 784)
>>>>>
>>>>> si je fais la meme chose et que je vais sous dos pour faire un
>>>>> edit
>>>>> 1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
>>>>> et j'enregistre mon fichier 1.txt
>>>>> je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
>>>>> ete du laligne 1 colonne 784
>>>>>
>>>>> J'espere que tu as compris mon pb
>>>>>
>>>>> @+
>>>>>
>>>>> Yannick
>>>>>
>>>>> "ng" a écrit :
>>>>>
>>>>>> ???
>>>>>>
>>>>>> je ne comprends plus très bien là ?
>>>>>> quel est ton format de fichier exactement ?
>>>>>> Et a quoi correspondent ce que tu appelles positions ?
>>>>>> Car mon code fonctionne parfaitement bien pour un fichier ayant
>>>>>> des lignes avec au mois 784 caractères...
>>>>>>
>>>>>> --
>>>>>> Nicolas G.
>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>> API Guide : http://www.allapi.net
>>>>>> Google Groups : http://groups.google.fr/
>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>
>>>>>> yannick wrote:
>>>>>>> Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
>>>>>>> manuellement que j'appuie sur espace pour chaque ligne à la
>>>>>>> position 784.
>>>>>>> Donc probleme.
>>>>>>> Peut -on remplacer tous les vides dans le fichier par la valeur
>>>>>>> espace? sachant que mon fichier s'arrete à la position 921.
>>>>>>>
>>>>>>> Merci pour ton aide.
>>>>>>>
>>>>>>> @+
>>>>>>>
>>>>>>> Yannick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "ng" a écrit :
>>>>>>>
>>>>>>>> Salut,
>>>>>>>>
>>>>>>>> Line Input n'est pas très rapide, essaye plutot un code comme
>>>>>>>> celui ci :
>>>>>>>>
>>>>>>>> Option Explicit
>>>>>>>>
>>>>>>>> Private Sub Form_Load()
>>>>>>>> Dim k As Integer, strBuffer As String, tblLine() As String
>>>>>>>>
>>>>>>>> '//ouverture du fichier en mode binaire pour tout
>>>>>>>> recupérer, '// c'est plus rapide comme (surtout qu'on veut
>>>>>>>> travailler
>>>>>>>> sur chaque ligne)
>>>>>>>>
>>>>>>>> k = FreeFile
>>>>>>>> Open "c:1.txt" For Binary As #k
>>>>>>>> strBuffer = String$(LOF(k), vbNullChar)
>>>>>>>> Get #k, , strBuffer
>>>>>>>> Close #k
>>>>>>>>
>>>>>>>> '//séparation en plusieurs lignes
>>>>>>>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>>>>>>>> '//puis on boucle sur chaque ligne
>>>>>>>> For k = 0 To UBound(tblLine)
>>>>>>>> '//vérifie si la ligne est assez grande,
>>>>>>>> '//tu peux l'enlever si tu es sur
>>>>>>>> '//que c'est tjrs le cas (mais attention
>>>>>>>> '//aux lignes vides !)
>>>>>>>> If Len(tblLine(k)) >= 784 Then
>>>>>>>> '//change le caractère 784
>>>>>>>> Mid$(tblLine(k), 784, 1) = "E"
>>>>>>>> End If
>>>>>>>> Next
>>>>>>>>
>>>>>>>> '//on ecrit les modifs
>>>>>>>> k = FreeFile
>>>>>>>> Open "c:1.txt" For Output As #k
>>>>>>>> Print #k, Join(tblLine, vbCrLf);
>>>>>>>> Close #k
>>>>>>>>
>>>>>>>> Erase tblLine
>>>>>>>>
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicolas G.
>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>
>>>>>>>> yannick wrote:
>>>>>>>>> Bonjour ng,
>>>>>>>>> je suis novice mais j'essaye de me depatouiller sous vb
>>>>>>>>> voici mon code
>>>>>>>>>
>>>>>>>>> Dim NomFic As String
>>>>>>>>> Dim NoFic As Integer
>>>>>>>>> Dim s As String
>>>>>>>>>
>>>>>>>>> NoFic = FreeFile
>>>>>>>>> NomFic = "articles.txt"
>>>>>>>>> Open NomFic For Binary Access Read As NoFic
>>>>>>>>>
>>>>>>>>> Do
>>>>>>>>> If Loc(NoFic) = FileLen(NomFic) Then Exit Do
>>>>>>>>> Mid$(s, 784, 1) = "E"
>>>>>>>>> Line Input #NoFic, s
>>>>>>>>>
>>>>>>>>> Loop
>>>>>>>>> Close #NoFic
>>>>>>>>>
>>>>>>>>> Merci pour ton aide
>>>>>>>>>
>>>>>>>>> @+
>>>>>>>>>
>>>>>>>>> Yannick
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> "ng" a écrit :
>>>>>>>>>
>>>>>>>>>> Salut,
>>>>>>>>>>
>>>>>>>>>> Peut-on voir ton code ?
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Nicolas G.
>>>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>>>
>>>>>>>>>> yannick wrote:
>>>>>>>>>>> Merci Jean-Marc,
>>>>>>>>>>> je n' y arrive pas j'ai une erreur d'incompatibilte sur
>>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>>
>>>>>>>>>>> @+
>>>>>>>>>>>
>>>>>>>>>>> Yannick
>>>>>>>>>>>
>>>>>>>>>>> "Jean-Marc" a écrit :
>>>>>>>>>>>
>>>>>>>>>>>> "yannick" <yannick@discussions.microsoft.com> a écrit dans
>>>>>>>>>>>> le message de
>>>>>>>>>>>> news:2F06C912-ACBC-43AF-9AF2-83212D56CFAA@microsoft.com...
>>>>>>>>>>>>> Bonjour et bonne année à tous,
>>>>>>>>>>>>> j'ai un fichier txt (pas de separateurs de champs, longeur
>>>>>>>>>>>>> fixe) et j'aimerais mettre "E" à la position 784 pour
>>>>>>>>>>>>> chaque ligne. je pense l'importer dans une base mdb puis
>>>>>>>>>>>>> l'exporter. Je voudrais savoir quelle est l'instruction VB
>>>>>>>>>>>>> pour un format de longeur fixe? Je sais que la posistion 1
>>>>>>>>>>>>> c'est tel champs , la 9 un autre etc...
>>>>>>>>>>>>> Ou peut-on ecrire d'irectement dans ce fichier txt ?
>>>>>>>>>>>>
>>>>>>>>>>>> Hello,
>>>>>>>>>>>>
>>>>>>>>>>>> Si les record sont organisés en lignes, alors c'est tout
>>>>>>>>>>>> simple. Lire le fichier ligne par ligne, puis pour écrire à
>>>>>>>>>>>> la position 784, faire ceci:
>>>>>>>>>>>>
>>>>>>>>>>>> soit s la chaine de caractere qui contient la ligne.
>>>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>>>
>>>>>>>>>>>> Il ne reste plus qu'à réécrire dans un second fichier les
>>>>>>>>>>>> lignes ainsi modifiées. Ensuite, on écrase le fichier
>>>>>>>>>>>> original et on renomme le nouveau fichier avec le nom de
>>>>>>>>>>>> l'original.
>>>>>>>>>>>>
>>>>>>>>>>>> On pourrait directement écrire dans le fichier original,
>>>>>>>>>>>> mais bof.. je préfère passer par un fichier intermédiaire.
>>>>>>>>>>>> C'est juste une affaire de gout.
>>>>>>>>>>>>
>>>>>>>>>>>> Si tu veux des détails, voir l'aide de l'instruction
>>>>>>>>>>>> "Open". Mode Texte si tes records sont en lignes, mode
>>>>>>>>>>>> Binary sinon.
>>>>>>>>>>>>
>>>>>>>>>>>> hmm... pas sur que je sois très clair...
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Jean-marc
>>>>>>>>>>>> "There are only 10 kind of people
>>>>>>>>>>>> those who understand binary and those who don't."
Salut,
Oui c'est tout bete :
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ? On vérifie pour le plus grand
champs
If Len(tblLine(k)) < 872 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(872 - Len(tblLine(k)), " ")
End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Mid$(tblLine(k), 872, 1) = "F"
Next
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
> Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
> caratere à inserer à la colonne 872 mais je pense que je vais y
> arriver.
>
> Un grand merci à toi.
>
> @+
>
> Yannick
>
>
> "ng" a écrit :
>
>> Salut,
>>
>> Option Explicit
>>
>> Private Sub Form_Load()
>> Dim k As Integer, strBuffer As String, tblLine() As String
>>
>> '//ouverture du fichier en mode binaire pour tout recupérer,
>> '// c'est plus rapide comme (surtout qu'on veut travailler sur
>> chaque ligne)
>>
>> k = FreeFile
>> Open "c:1.txt" For Binary As #k
>> strBuffer = String$(LOF(k), vbNullChar)
>> Get #k, , strBuffer
>> Close #k
>>
>> '//séparation en plusieurs lignes
>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>> '//puis on boucle sur chaque ligne
>> For k = 0 To UBound(tblLine)
>> '//y a t'il deja assez de caratères ?
>> If Len(tblLine(k)) < 784 Then
>> '//non ! alors on complète avec des espaces
>> tblLine(k) = tblLine(k) & String$(784 - Len(tblLine(k)),
>> " ") End If
>> '//puis on change le caratère
>> Mid$(tblLine(k), 784, 1) = "E"
>> Next
>>
>> '//on ecrit les modifs
>> k = FreeFile
>> Open "c:1.txt" For Output As #k
>> Print #k, Join(tblLine, vbCrLf);
>> Close #k
>>
>> Erase tblLine
>>
>> End Sub
>>
>>
>> --
>> Nicolas G.
>> FAQ VB : http://faq.vb.free.fr
>> API Guide : http://www.allapi.net
>> Google Groups : http://groups.google.fr/
>> MZ-Tools : http://www.mztools.com/
>>
>> yannick wrote:
>>> Il faut que mon fichier face 923 carateres donc comment utiliser la
>>> fonction String$
>>> pour qu' elle remplace par " "
>>>
>>> Merci pour tes reponses
>>> quelle galere je n'y arrive pas
>>>
>>> @+
>>>
>>> Yannick
>>>
>>>
>>> "ng" a écrit :
>>>
>>>> Salut,
>>>>
>>>> Oui il faut que les 784 caratères existent c'est évident, sinon il
>>>> faut les creér au préablable (fonction String$(" ", nb) qui est
>>>> lpus rapide que Space$(nb) ).
>>>>
>>>> --
>>>> Nicolas G.
>>>> FAQ VB : http://faq.vb.free.fr
>>>> API Guide : http://www.allapi.net
>>>> Google Groups : http://groups.google.fr/
>>>> MZ-Tools : http://www.mztools.com/
>>>>
>>>> yannick wrote:
>>>>> je creer un fichier texte je saisis
>>>>> 111111111
>>>>> 222222222
>>>>> 333333333
>>>>> 444444444
>>>>>
>>>>> je n'obtiens rien (pas de E colonne 784)
>>>>>
>>>>> si je fais la meme chose et que je vais sous dos pour faire un
>>>>> edit
>>>>> 1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
>>>>> et j'enregistre mon fichier 1.txt
>>>>> je lance l' exe et cela fonctionne pour la premiere ligne car j'ai
>>>>> ete du laligne 1 colonne 784
>>>>>
>>>>> J'espere que tu as compris mon pb
>>>>>
>>>>> @+
>>>>>
>>>>> Yannick
>>>>>
>>>>> "ng" a écrit :
>>>>>
>>>>>> ???
>>>>>>
>>>>>> je ne comprends plus très bien là ?
>>>>>> quel est ton format de fichier exactement ?
>>>>>> Et a quoi correspondent ce que tu appelles positions ?
>>>>>> Car mon code fonctionne parfaitement bien pour un fichier ayant
>>>>>> des lignes avec au mois 784 caractères...
>>>>>>
>>>>>> --
>>>>>> Nicolas G.
>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>> API Guide : http://www.allapi.net
>>>>>> Google Groups : http://groups.google.fr/
>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>
>>>>>> yannick wrote:
>>>>>>> Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
>>>>>>> manuellement que j'appuie sur espace pour chaque ligne à la
>>>>>>> position 784.
>>>>>>> Donc probleme.
>>>>>>> Peut -on remplacer tous les vides dans le fichier par la valeur
>>>>>>> espace? sachant que mon fichier s'arrete à la position 921.
>>>>>>>
>>>>>>> Merci pour ton aide.
>>>>>>>
>>>>>>> @+
>>>>>>>
>>>>>>> Yannick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "ng" a écrit :
>>>>>>>
>>>>>>>> Salut,
>>>>>>>>
>>>>>>>> Line Input n'est pas très rapide, essaye plutot un code comme
>>>>>>>> celui ci :
>>>>>>>>
>>>>>>>> Option Explicit
>>>>>>>>
>>>>>>>> Private Sub Form_Load()
>>>>>>>> Dim k As Integer, strBuffer As String, tblLine() As String
>>>>>>>>
>>>>>>>> '//ouverture du fichier en mode binaire pour tout
>>>>>>>> recupérer, '// c'est plus rapide comme (surtout qu'on veut
>>>>>>>> travailler
>>>>>>>> sur chaque ligne)
>>>>>>>>
>>>>>>>> k = FreeFile
>>>>>>>> Open "c:1.txt" For Binary As #k
>>>>>>>> strBuffer = String$(LOF(k), vbNullChar)
>>>>>>>> Get #k, , strBuffer
>>>>>>>> Close #k
>>>>>>>>
>>>>>>>> '//séparation en plusieurs lignes
>>>>>>>> tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
>>>>>>>> '//puis on boucle sur chaque ligne
>>>>>>>> For k = 0 To UBound(tblLine)
>>>>>>>> '//vérifie si la ligne est assez grande,
>>>>>>>> '//tu peux l'enlever si tu es sur
>>>>>>>> '//que c'est tjrs le cas (mais attention
>>>>>>>> '//aux lignes vides !)
>>>>>>>> If Len(tblLine(k)) >= 784 Then
>>>>>>>> '//change le caractère 784
>>>>>>>> Mid$(tblLine(k), 784, 1) = "E"
>>>>>>>> End If
>>>>>>>> Next
>>>>>>>>
>>>>>>>> '//on ecrit les modifs
>>>>>>>> k = FreeFile
>>>>>>>> Open "c:1.txt" For Output As #k
>>>>>>>> Print #k, Join(tblLine, vbCrLf);
>>>>>>>> Close #k
>>>>>>>>
>>>>>>>> Erase tblLine
>>>>>>>>
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicolas G.
>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>
>>>>>>>> yannick wrote:
>>>>>>>>> Bonjour ng,
>>>>>>>>> je suis novice mais j'essaye de me depatouiller sous vb
>>>>>>>>> voici mon code
>>>>>>>>>
>>>>>>>>> Dim NomFic As String
>>>>>>>>> Dim NoFic As Integer
>>>>>>>>> Dim s As String
>>>>>>>>>
>>>>>>>>> NoFic = FreeFile
>>>>>>>>> NomFic = "articles.txt"
>>>>>>>>> Open NomFic For Binary Access Read As NoFic
>>>>>>>>>
>>>>>>>>> Do
>>>>>>>>> If Loc(NoFic) = FileLen(NomFic) Then Exit Do
>>>>>>>>> Mid$(s, 784, 1) = "E"
>>>>>>>>> Line Input #NoFic, s
>>>>>>>>>
>>>>>>>>> Loop
>>>>>>>>> Close #NoFic
>>>>>>>>>
>>>>>>>>> Merci pour ton aide
>>>>>>>>>
>>>>>>>>> @+
>>>>>>>>>
>>>>>>>>> Yannick
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> "ng" a écrit :
>>>>>>>>>
>>>>>>>>>> Salut,
>>>>>>>>>>
>>>>>>>>>> Peut-on voir ton code ?
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Nicolas G.
>>>>>>>>>> FAQ VB : http://faq.vb.free.fr
>>>>>>>>>> API Guide : http://www.allapi.net
>>>>>>>>>> Google Groups : http://groups.google.fr/
>>>>>>>>>> MZ-Tools : http://www.mztools.com/
>>>>>>>>>>
>>>>>>>>>> yannick wrote:
>>>>>>>>>>> Merci Jean-Marc,
>>>>>>>>>>> je n' y arrive pas j'ai une erreur d'incompatibilte sur
>>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>>
>>>>>>>>>>> @+
>>>>>>>>>>>
>>>>>>>>>>> Yannick
>>>>>>>>>>>
>>>>>>>>>>> "Jean-Marc" a écrit :
>>>>>>>>>>>
>>>>>>>>>>>> "yannick" a écrit dans
>>>>>>>>>>>> le message de
>>>>>>>>>>>> news:
>>>>>>>>>>>>> Bonjour et bonne année à tous,
>>>>>>>>>>>>> j'ai un fichier txt (pas de separateurs de champs, longeur
>>>>>>>>>>>>> fixe) et j'aimerais mettre "E" à la position 784 pour
>>>>>>>>>>>>> chaque ligne. je pense l'importer dans une base mdb puis
>>>>>>>>>>>>> l'exporter. Je voudrais savoir quelle est l'instruction VB
>>>>>>>>>>>>> pour un format de longeur fixe? Je sais que la posistion 1
>>>>>>>>>>>>> c'est tel champs , la 9 un autre etc...
>>>>>>>>>>>>> Ou peut-on ecrire d'irectement dans ce fichier txt ?
>>>>>>>>>>>>
>>>>>>>>>>>> Hello,
>>>>>>>>>>>>
>>>>>>>>>>>> Si les record sont organisés en lignes, alors c'est tout
>>>>>>>>>>>> simple. Lire le fichier ligne par ligne, puis pour écrire à
>>>>>>>>>>>> la position 784, faire ceci:
>>>>>>>>>>>>
>>>>>>>>>>>> soit s la chaine de caractere qui contient la ligne.
>>>>>>>>>>>> mid$(s,784,1) = "E"
>>>>>>>>>>>>
>>>>>>>>>>>> Il ne reste plus qu'à réécrire dans un second fichier les
>>>>>>>>>>>> lignes ainsi modifiées. Ensuite, on écrase le fichier
>>>>>>>>>>>> original et on renomme le nouveau fichier avec le nom de
>>>>>>>>>>>> l'original.
>>>>>>>>>>>>
>>>>>>>>>>>> On pourrait directement écrire dans le fichier original,
>>>>>>>>>>>> mais bof.. je préfère passer par un fichier intermédiaire.
>>>>>>>>>>>> C'est juste une affaire de gout.
>>>>>>>>>>>>
>>>>>>>>>>>> Si tu veux des détails, voir l'aide de l'instruction
>>>>>>>>>>>> "Open". Mode Texte si tes records sont en lignes, mode
>>>>>>>>>>>> Binary sinon.
>>>>>>>>>>>>
>>>>>>>>>>>> hmm... pas sur que je sois très clair...
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Jean-marc
>>>>>>>>>>>> "There are only 10 kind of people
>>>>>>>>>>>> those who understand binary and those who don't."
tout à fait, j'ai comme meme reussi à trouver ceci
de plus j'ai ete oblige de mettre For k = 0 To UBound(tblLine) - 1 car
j'avais une ligne supplementaire.
Je te remercie.
@+
Yannick
"ng" a écrit :Salut,
Oui c'est tout bete :
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ? On vérifie pour le
plus grand champs
If Len(tblLine(k)) < 872 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(872 - Len(tblLine(k)),
" ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Mid$(tblLine(k), 872, 1) = "F"
Next
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
caratere à inserer à la colonne 872 mais je pense que je vais y
arriver.
Un grand merci à toi.
@+
Yannick
"ng" a écrit :Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur
chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 -
Len(tblLine(k)), " ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Il faut que mon fichier face 923 carateres donc comment utiliser
la fonction String$
pour qu' elle remplace par " "
Merci pour tes reponses
quelle galere je n'y arrive pas
@+
Yannick
"ng" a écrit :Salut,
Oui il faut que les 784 caratères existent c'est évident, sinon
il faut les creér au préablable (fonction String$(" ", nb) qui
est lpus rapide que Space$(nb) ).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:je creer un fichier texte je saisis
111111111
222222222
333333333
444444444
je n'obtiens rien (pas de E colonne 784)
si je fais la meme chose et que je vais sous dos pour faire un
edit
1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
et j'enregistre mon fichier 1.txt
je lance l' exe et cela fonctionne pour la premiere ligne car
j'ai ete du laligne 1 colonne 784
J'espere que tu as compris mon pb
@+
Yannick
"ng" a écrit :???
je ne comprends plus très bien là ?
quel est ton format de fichier exactement ?
Et a quoi correspondent ce que tu appelles positions ?
Car mon code fonctionne parfaitement bien pour un fichier ayant
des lignes avec au mois 784 caractères...
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
manuellement que j'appuie sur espace pour chaque ligne à la
position 784.
Donc probleme.
Peut -on remplacer tous les vides dans le fichier par la
valeur espace? sachant que mon fichier s'arrete à la position
921.
Merci pour ton aide.
@+
Yannick
"ng" a écrit :Salut,
Line Input n'est pas très rapide, essaye plutot un code comme
celui ci :
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As
String
'//ouverture du fichier en mode binaire pour tout
recupérer, '// c'est plus rapide comme (surtout qu'on
veut travailler
sur chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//vérifie si la ligne est assez grande,
'//tu peux l'enlever si tu es sur
'//que c'est tjrs le cas (mais attention
'//aux lignes vides !)
If Len(tblLine(k)) >= 784 Then
'//change le caractère 784
Mid$(tblLine(k), 784, 1) = "E"
End If
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Bonjour ng,
je suis novice mais j'essaye de me depatouiller sous vb
voici mon code
Dim NomFic As String
Dim NoFic As Integer
Dim s As String
NoFic = FreeFile
NomFic = "articles.txt"
Open NomFic For Binary Access Read As NoFic
Do
If Loc(NoFic) = FileLen(NomFic) Then Exit Do
Mid$(s, 784, 1) = "E"
Line Input #NoFic, s
Loop
Close #NoFic
Merci pour ton aide
@+
Yannick
"ng" a écrit :Salut,
Peut-on voir ton code ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci Jean-Marc,
je n' y arrive pas j'ai une erreur d'incompatibilte sur
mid$(s,784,1) = "E"
@+
Yannick
"Jean-Marc" a écrit :"yannick" a écrit
dans le message de
news:Bonjour et bonne année à tous,
j'ai un fichier txt (pas de separateurs de champs,
longeur fixe) et j'aimerais mettre "E" à la position
784 pour chaque ligne. je pense l'importer dans une
base mdb puis l'exporter. Je voudrais savoir quelle est
l'instruction VB pour un format de longeur fixe? Je
sais que la posistion 1 c'est tel champs , la 9 un
autre etc...
Ou peut-on ecrire d'irectement dans ce fichier txt ?
Hello,
Si les record sont organisés en lignes, alors c'est tout
simple. Lire le fichier ligne par ligne, puis pour
écrire à la position 784, faire ceci:
soit s la chaine de caractere qui contient la ligne.
mid$(s,784,1) = "E"
Il ne reste plus qu'à réécrire dans un second fichier les
lignes ainsi modifiées. Ensuite, on écrase le fichier
original et on renomme le nouveau fichier avec le nom de
l'original.
On pourrait directement écrire dans le fichier original,
mais bof.. je préfère passer par un fichier
intermédiaire. C'est juste une affaire de gout.
Si tu veux des détails, voir l'aide de l'instruction
"Open". Mode Texte si tes records sont en lignes, mode
Binary sinon.
hmm... pas sur que je sois très clair...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
tout à fait, j'ai comme meme reussi à trouver ceci
de plus j'ai ete oblige de mettre For k = 0 To UBound(tblLine) - 1 car
j'avais une ligne supplementaire.
Je te remercie.
@+
Yannick
"ng" a écrit :
Salut,
Oui c'est tout bete :
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ? On vérifie pour le
plus grand champs
If Len(tblLine(k)) < 872 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(872 - Len(tblLine(k)),
" ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Mid$(tblLine(k), 872, 1) = "F"
Next
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
caratere à inserer à la colonne 872 mais je pense que je vais y
arriver.
Un grand merci à toi.
@+
Yannick
"ng" a écrit :
Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur
chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 -
Len(tblLine(k)), " ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Il faut que mon fichier face 923 carateres donc comment utiliser
la fonction String$
pour qu' elle remplace par " "
Merci pour tes reponses
quelle galere je n'y arrive pas
@+
Yannick
"ng" a écrit :
Salut,
Oui il faut que les 784 caratères existent c'est évident, sinon
il faut les creér au préablable (fonction String$(" ", nb) qui
est lpus rapide que Space$(nb) ).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
je creer un fichier texte je saisis
111111111
222222222
333333333
444444444
je n'obtiens rien (pas de E colonne 784)
si je fais la meme chose et que je vais sous dos pour faire un
edit
1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
et j'enregistre mon fichier 1.txt
je lance l' exe et cela fonctionne pour la premiere ligne car
j'ai ete du laligne 1 colonne 784
J'espere que tu as compris mon pb
@+
Yannick
"ng" a écrit :
???
je ne comprends plus très bien là ?
quel est ton format de fichier exactement ?
Et a quoi correspondent ce que tu appelles positions ?
Car mon code fonctionne parfaitement bien pour un fichier ayant
des lignes avec au mois 784 caractères...
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
manuellement que j'appuie sur espace pour chaque ligne à la
position 784.
Donc probleme.
Peut -on remplacer tous les vides dans le fichier par la
valeur espace? sachant que mon fichier s'arrete à la position
921.
Merci pour ton aide.
@+
Yannick
"ng" a écrit :
Salut,
Line Input n'est pas très rapide, essaye plutot un code comme
celui ci :
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As
String
'//ouverture du fichier en mode binaire pour tout
recupérer, '// c'est plus rapide comme (surtout qu'on
veut travailler
sur chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//vérifie si la ligne est assez grande,
'//tu peux l'enlever si tu es sur
'//que c'est tjrs le cas (mais attention
'//aux lignes vides !)
If Len(tblLine(k)) >= 784 Then
'//change le caractère 784
Mid$(tblLine(k), 784, 1) = "E"
End If
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Bonjour ng,
je suis novice mais j'essaye de me depatouiller sous vb
voici mon code
Dim NomFic As String
Dim NoFic As Integer
Dim s As String
NoFic = FreeFile
NomFic = "articles.txt"
Open NomFic For Binary Access Read As NoFic
Do
If Loc(NoFic) = FileLen(NomFic) Then Exit Do
Mid$(s, 784, 1) = "E"
Line Input #NoFic, s
Loop
Close #NoFic
Merci pour ton aide
@+
Yannick
"ng" a écrit :
Salut,
Peut-on voir ton code ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:
Merci Jean-Marc,
je n' y arrive pas j'ai une erreur d'incompatibilte sur
mid$(s,784,1) = "E"
@+
Yannick
"Jean-Marc" a écrit :
"yannick" <yannick@discussions.microsoft.com> a écrit
dans le message de
news:2F06C912-ACBC-43AF-9AF2-83212D56CFAA@microsoft.com...
Bonjour et bonne année à tous,
j'ai un fichier txt (pas de separateurs de champs,
longeur fixe) et j'aimerais mettre "E" à la position
784 pour chaque ligne. je pense l'importer dans une
base mdb puis l'exporter. Je voudrais savoir quelle est
l'instruction VB pour un format de longeur fixe? Je
sais que la posistion 1 c'est tel champs , la 9 un
autre etc...
Ou peut-on ecrire d'irectement dans ce fichier txt ?
Hello,
Si les record sont organisés en lignes, alors c'est tout
simple. Lire le fichier ligne par ligne, puis pour
écrire à la position 784, faire ceci:
soit s la chaine de caractere qui contient la ligne.
mid$(s,784,1) = "E"
Il ne reste plus qu'à réécrire dans un second fichier les
lignes ainsi modifiées. Ensuite, on écrase le fichier
original et on renomme le nouveau fichier avec le nom de
l'original.
On pourrait directement écrire dans le fichier original,
mais bof.. je préfère passer par un fichier
intermédiaire. C'est juste une affaire de gout.
Si tu veux des détails, voir l'aide de l'instruction
"Open". Mode Texte si tes records sont en lignes, mode
Binary sinon.
hmm... pas sur que je sois très clair...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
tout à fait, j'ai comme meme reussi à trouver ceci
de plus j'ai ete oblige de mettre For k = 0 To UBound(tblLine) - 1 car
j'avais une ligne supplementaire.
Je te remercie.
@+
Yannick
"ng" a écrit :Salut,
Oui c'est tout bete :
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ? On vérifie pour le
plus grand champs
If Len(tblLine(k)) < 872 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(872 - Len(tblLine(k)),
" ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Mid$(tblLine(k), 872, 1) = "F"
Next
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Bonjour je te remericie pour ton aide, cela fonctionne, j'ai d'autre
caratere à inserer à la colonne 872 mais je pense que je vais y
arriver.
Un grand merci à toi.
@+
Yannick
"ng" a écrit :Salut,
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As String
'//ouverture du fichier en mode binaire pour tout recupérer,
'// c'est plus rapide comme (surtout qu'on veut travailler sur
chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//y a t'il deja assez de caratères ?
If Len(tblLine(k)) < 784 Then
'//non ! alors on complète avec des espaces
tblLine(k) = tblLine(k) & String$(784 -
Len(tblLine(k)), " ") End If
'//puis on change le caratère
Mid$(tblLine(k), 784, 1) = "E"
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Il faut que mon fichier face 923 carateres donc comment utiliser
la fonction String$
pour qu' elle remplace par " "
Merci pour tes reponses
quelle galere je n'y arrive pas
@+
Yannick
"ng" a écrit :Salut,
Oui il faut que les 784 caratères existent c'est évident, sinon
il faut les creér au préablable (fonction String$(" ", nb) qui
est lpus rapide que Space$(nb) ).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:je creer un fichier texte je saisis
111111111
222222222
333333333
444444444
je n'obtiens rien (pas de E colonne 784)
si je fais la meme chose et que je vais sous dos pour faire un
edit
1.txt à la ligne 1 colonne (position) 784 je fais barre d'espace
et j'enregistre mon fichier 1.txt
je lance l' exe et cela fonctionne pour la premiere ligne car
j'ai ete du laligne 1 colonne 784
J'espere que tu as compris mon pb
@+
Yannick
"ng" a écrit :???
je ne comprends plus très bien là ?
quel est ton format de fichier exactement ?
Et a quoi correspondent ce que tu appelles positions ?
Car mon code fonctionne parfaitement bien pour un fichier ayant
des lignes avec au mois 784 caractères...
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci cela fonctionne à condition que j'ouvre le fichier 1.txt
manuellement que j'appuie sur espace pour chaque ligne à la
position 784.
Donc probleme.
Peut -on remplacer tous les vides dans le fichier par la
valeur espace? sachant que mon fichier s'arrete à la position
921.
Merci pour ton aide.
@+
Yannick
"ng" a écrit :Salut,
Line Input n'est pas très rapide, essaye plutot un code comme
celui ci :
Option Explicit
Private Sub Form_Load()
Dim k As Integer, strBuffer As String, tblLine() As
String
'//ouverture du fichier en mode binaire pour tout
recupérer, '// c'est plus rapide comme (surtout qu'on
veut travailler
sur chaque ligne)
k = FreeFile
Open "c:1.txt" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
'//séparation en plusieurs lignes
tblLine = Split(strBuffer, vbCrLf): strBuffer = ""
'//puis on boucle sur chaque ligne
For k = 0 To UBound(tblLine)
'//vérifie si la ligne est assez grande,
'//tu peux l'enlever si tu es sur
'//que c'est tjrs le cas (mais attention
'//aux lignes vides !)
If Len(tblLine(k)) >= 784 Then
'//change le caractère 784
Mid$(tblLine(k), 784, 1) = "E"
End If
Next
'//on ecrit les modifs
k = FreeFile
Open "c:1.txt" For Output As #k
Print #k, Join(tblLine, vbCrLf);
Close #k
Erase tblLine
End Sub
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Bonjour ng,
je suis novice mais j'essaye de me depatouiller sous vb
voici mon code
Dim NomFic As String
Dim NoFic As Integer
Dim s As String
NoFic = FreeFile
NomFic = "articles.txt"
Open NomFic For Binary Access Read As NoFic
Do
If Loc(NoFic) = FileLen(NomFic) Then Exit Do
Mid$(s, 784, 1) = "E"
Line Input #NoFic, s
Loop
Close #NoFic
Merci pour ton aide
@+
Yannick
"ng" a écrit :Salut,
Peut-on voir ton code ?
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
yannick wrote:Merci Jean-Marc,
je n' y arrive pas j'ai une erreur d'incompatibilte sur
mid$(s,784,1) = "E"
@+
Yannick
"Jean-Marc" a écrit :"yannick" a écrit
dans le message de
news:Bonjour et bonne année à tous,
j'ai un fichier txt (pas de separateurs de champs,
longeur fixe) et j'aimerais mettre "E" à la position
784 pour chaque ligne. je pense l'importer dans une
base mdb puis l'exporter. Je voudrais savoir quelle est
l'instruction VB pour un format de longeur fixe? Je
sais que la posistion 1 c'est tel champs , la 9 un
autre etc...
Ou peut-on ecrire d'irectement dans ce fichier txt ?
Hello,
Si les record sont organisés en lignes, alors c'est tout
simple. Lire le fichier ligne par ligne, puis pour
écrire à la position 784, faire ceci:
soit s la chaine de caractere qui contient la ligne.
mid$(s,784,1) = "E"
Il ne reste plus qu'à réécrire dans un second fichier les
lignes ainsi modifiées. Ensuite, on écrase le fichier
original et on renomme le nouveau fichier avec le nom de
l'original.
On pourrait directement écrire dans le fichier original,
mais bof.. je préfère passer par un fichier
intermédiaire. C'est juste une affaire de gout.
Si tu veux des détails, voir l'aide de l'instruction
"Open". Mode Texte si tes records sont en lignes, mode
Binary sinon.
hmm... pas sur que je sois très clair...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."