OVH Cloud OVH Cloud

Lecture d'un fichier txt

24 réponses
Avatar
yannick
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 ?

Merci pour les reponses.

Yannick

10 réponses

1 2 3
Avatar
LE TROLL
Salut, alors ton fichier n'est pas de longueur identique à chaque
enregistrement, ou c'est ta boucle...
---------

"yannick" a écrit dans le message de
news:
Merci LE TROLL,
J'ai essaye, cela ecrit bien dans le fichier mais pas à la bonne position,
le premier E
est à la ligne 19 position 66 le deuxieme ligne 25 position 88 le
troisieme
ligne 31 position 110........

Sinon comment savoir le nombre d'enregistrement pour la boucle car mon
fichier varie

Merci pour tes lumieres.

@+

Yannick


"LE TROLL" a écrit :

Salut,

Si le fichier txt est petit, ça va aussi vite de le faire à la main,
sinon:

Comme les datas sont fixes (dis-tu), tu peux accéder à l'octet en
écrivant en mode binaire:

Dim p1 As Integer
Dim i As Long
ChDrive App.Path
ChDir App.Path
p1 = FreeFile
Open "nomFichier.txt" For Binary As p1
for i = 1 to nombreD'enregistrement
Put p1, (784 * i), "E"
next i
close p1

Je ne crois pas qu'il y ait d'autres façons de modifier un fichier en
VB/Dos
(pas de mode "modif" hélas)...
Ou il faut lire le fichier, modifier par variable et réécrire ailleurs,
puis
renommer dans le fichier initial, et supprimer le doublon...
Si ça ne marche pas utilise des variables à la place des calculs pour
passe
les paramètres:
Dim p2 As Long
Dim o As String * 1
p = 784 * i
o = "E"
Put p1, p, o
---------

"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 ?
>
> Merci pour les reponses.
>
> Yannick
>







Avatar
yannick
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."





Avatar
ng
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."
















Avatar
yannick
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."





Avatar
ng
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."




















Avatar
LE TROLL
Salut, pour forcer une longueur:

Variable X * y ' y = longueur
X = "?" ' contenu
enregistre X

Tu auras toujours la même longueur, mais * est je crois empilé/dépilé, donc
ne pas en abuser, et le faire en local un maximum...
---------

"yannick" a écrit dans le message de
news:
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."







Avatar
LE TROLL
Heu...

Variable = fchier

Oui, mais si pas trop gros, car après ça peut être gigantesque 4 Go par
exemple, ce qui n'améliore pas les performances de la RAM... De préférence,
ne monter que l'enregistrement concerné...
----

"ng" a écrit dans le message de news:

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."
























Avatar
ng
La taille du fichier n'est pas précisé, ce code est rapide pour des fichiers
ayant une taille de l'ordre du Mo (de 1 à 10 environ), sinon il faut couper
le fichier et le traiter en plus petits morceaux. C'est faisable mais le
code est uin peu plus délicat (et il doit se faire en binaire, il n'est pas
question de input/line input pour des fichiers aussi gros).

--
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/

LE TROLL wrote:
Heu...

Variable = fchier

Oui, mais si pas trop gros, car après ça peut être gigantesque 4 Go
par exemple, ce qui n'améliore pas les performances de la RAM... De
préférence, ne monter que l'enregistrement concerné...
----

"ng" a écrit dans le message de news:

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."
























Avatar
Pierre Alexis
Jean-Marc a écrit :

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.



Non ce n'est pas une bonne solution ça !!! Car si tu recrées "bètement"
un nouveau fichier, tu perds pleins d'informations propres à l'ancien
fichier tels que les permissions, les informations d'instant (date de
création, etc.), les éventuels stream associées au fichier, etc.

Il faut donc absolument rééecrire dans l'ancien fichier.

--
Pierre ALEXIS
Courriel :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
Jean-Marc
"Pierre Alexis" a écrit dans le message de
news:eqNX%
Jean-Marc a écrit :

> 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.

Non ce n'est pas une bonne solution ça !!! Car si tu recrées "bètement"
un nouveau fichier, tu perds pleins d'informations propres à l'ancien
fichier tels que les permissions, les informations d'instant (date de
création, etc.), les éventuels stream associées au fichier, etc.

Il faut donc absolument rééecrire dans l'ancien fichier.



Hello,

les spécifications du problème ne faisaient pas mention de devoir
conserver des informations "externes" du fichier original. Si c'est
nécessaire, alors on peut effectivement écrire dans le fichier
original, tout dépend des contraintes. Je ne fait pas l'hyppothèse
d'existences de contraintes "dures" si elles n'apparaissent pas dans
l'énoncé.

Qui plus est, je préfère personnelement créer un nouveau fichier quand
je fais des modifications sur un fichier existant: je bénéficie ainsi
d'informations utiles (date et heure de la création, nouvelles
permissions, etc). Si je dois conserver un historique, je gère les
backup tout seul comme un grand.

Mais c'est affaire de style, n'est ce pas...

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
1 2 3