Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Consultation d'un fichier

10 réponses
Avatar
Jean-Michel
Bonjour,

J'ai un petit probleme, je lis un fichier text ligne par ligne, mais en
faite le fichier texte est composé d'une seul ligne séparé par un caractére
en forme de carré, et ce caractére j'aimerai le voir comme un retour à la
ligne.

Jusqu'a maitenant je fais :

Open txtCheminFichier.Text For Input As #i
Do While Not EOF(i)
Line Input #i, Ligne
[...]

Le probleme c'est donc qu'il rentre qu'un fois dans le do pour me donner
tout le fichier dans la variable Ligne
J'aimerai eviter de faire un traitement de la variable ligne, je voudrai
qu'il rentre plusieur fois dans le do...

Merci pour votre aide!

10 réponses

Avatar
le_troll
Bonjour ??? Le code va au Do autant de fois que la fin n'est pas atteinte,
s'il n'y a qu'une ligne, il ne va pas y aller plus... Si tu veux que ton
"carré" soir un <rc>, ben pour une seule ligne, tu peux peut être le faire à
la main (supprimer le carré, et à sa place faire <Rc>), ça fera 2 lignes...
In fine, sinon, tu peux monter la ligne du fichier dans une variable, la
séparer où tu veux (où est le carré), avec "mid(,,) puis en création
(output) écrire ce que tu as coupé en 2, tu auras 2 lignes... Mais je ne
sais pas si j'ai bien compris...
--
Merci, @+, bye, Joe
ng75 arobase noos point fr
------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
----------------------------------------------------------


"Jean-Michel" a écrit dans le
message de news:
Bonjour,

J'ai un petit probleme, je lis un fichier text ligne par ligne, mais en
faite le fichier texte est composé d'une seul ligne séparé par un


caractére
en forme de carré, et ce caractére j'aimerai le voir comme un retour à la
ligne.

Jusqu'a maitenant je fais :

Open txtCheminFichier.Text For Input As #i
Do While Not EOF(i)
Line Input #i, Ligne
[...]

Le probleme c'est donc qu'il rentre qu'un fois dans le do pour me donner
tout le fichier dans la variable Ligne
J'aimerai eviter de faire un traitement de la variable ligne, je voudrai
qu'il rentre plusieur fois dans le do...

Merci pour votre aide!




Avatar
François Picalausa
Bonjour/soir,

Essaye une ouverture binaire:
Dim FFN As Integer, strBuffer As String
Dim strLines() As String, i As Long

FFN = FreeFile

Open "c:toto1.txt" For Binary As FFN
strFileContent = String(LOF(FFN), Chr(0))
Get FFN, , strFileContent
Close FFN

'Remplace tous les vbCr et les vbLf par des CrLf et découpe la chaine
suivant les CrLf
strFileContent = Replace(Replace(strFileContent, vbCr, vbCrLf), vbLf,
vbCrLf)
strLines = Split(strFileContent, vbCrLf)

For i = LBound(strLines) To UBound(strLines)
MsgBox strLines(i)
Next i

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jean-Michel" a écrit dans le
message de news:
Bonjour,

J'ai un petit probleme, je lis un fichier text ligne par ligne, mais
en faite le fichier texte est composé d'une seul ligne séparé par un
caractére en forme de carré, et ce caractére j'aimerai le voir comme
un retour à la ligne.

Jusqu'a maitenant je fais :

Open txtCheminFichier.Text For Input As #i
Do While Not EOF(i)
Line Input #i, Ligne
[...]

Le probleme c'est donc qu'il rentre qu'un fois dans le do pour me
donner tout le fichier dans la variable Ligne
J'aimerai eviter de faire un traitement de la variable ligne, je
voudrai qu'il rentre plusieur fois dans le do...

Merci pour votre aide!


Avatar
Jean-Michel
Ce que je voudrai bien faire, c'est de remplacer les carée par des retours à
la ligne !
Mais est ce que tu pourrai me dire comment faire!

Merci beaucoup !

"le_troll" a écrit dans le message de
news:
Bonjour ??? Le code va au Do autant de fois que la fin n'est pas atteinte,
s'il n'y a qu'une ligne, il ne va pas y aller plus... Si tu veux que ton
"carré" soir un <rc>, ben pour une seule ligne, tu peux peut être le faire


à
la main (supprimer le carré, et à sa place faire <Rc>), ça fera 2


lignes...
In fine, sinon, tu peux monter la ligne du fichier dans une variable, la
séparer où tu veux (où est le carré), avec "mid(,,) puis en création
(output) écrire ce que tu as coupé en 2, tu auras 2 lignes... Mais je ne
sais pas si j'ai bien compris...
--
Merci, @+, bye, Joe
ng75 arobase noos point fr
------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
----------------------------------------------------------


"Jean-Michel" a écrit dans le
message de news:
> Bonjour,
>
> J'ai un petit probleme, je lis un fichier text ligne par ligne, mais en
> faite le fichier texte est composé d'une seul ligne séparé par un
caractére
> en forme de carré, et ce caractére j'aimerai le voir comme un retour à


la
> ligne.
>
> Jusqu'a maitenant je fais :
>
> Open txtCheminFichier.Text For Input As #i
> Do While Not EOF(i)
> Line Input #i, Ligne
> [...]
>
> Le probleme c'est donc qu'il rentre qu'un fois dans le do pour me donner
> tout le fichier dans la variable Ligne
> J'aimerai eviter de faire un traitement de la variable ligne, je voudrai
> qu'il rentre plusieur fois dans le do...
>
> Merci pour votre aide!
>
>




Avatar
Vincent Guichard
François Picalausa a écrit :
Bonjour/soir,

Essaye une ouverture binaire:
Dim FFN As Integer, strBuffer As String
Dim strLines() As String, i As Long

FFN = FreeFile

Open "c:toto1.txt" For Binary As FFN
strFileContent = String(LOF(FFN), Chr(0))
Get FFN, , strFileContent
Close FFN

'Remplace tous les vbCr et les vbLf par des CrLf et découpe la chaine
suivant les CrLf
strFileContent = Replace(Replace(strFileContent, vbCr, vbCrLf), vbLf,
vbCrLf)


pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par des
<CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ le fichier
ne contient que des <CR>, à la fin il va contenir des <CR><CR><LF>...
Il vaut mieux utiliser éventutellement:
strFileContent = Replace(Replace(strFileContent, vbCr, vbLf), vbLf, vbCrLf)

strLines = Split(strFileContent, vbCrLf)


mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste après?


For i = LBound(strLines) To UBound(strLines)
MsgBox strLines(i)
Next i




Vincent GUICHARD
Avatar
François Picalausa
Bonjour/soir,

"Vincent Guichard" a écrit dans le message
de news:c4ragp$rm0$
pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par des
<CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ le
fichier ne contient que des <CR>, à la fin il va contenir des
<CR><CR><LF>...



Effectivement, j'ai commis une erreur.
Et la correction est bien
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf), vbCr, vbLf)
strLines = Split(strFileContent, vbLf)

mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste
après?


Non, pas supprimer ni ajouter.
Simplement convertir tous les séparateurs (vbCr, vbCrLf) en un même
séparateur (vbLf) pour ensuite splitter la chaine selon ce séparateur
(vbLf).
Celà permet de travailler avec tout type de fichiers, peu importe le
séparateur qu'ils utilisent.


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Jean-Michel
Donc, avant toute chose, comment je replace ceci dans mon fichier.

Car je ne sais pas a quoi correspond vos variables :

strFileContent
strLines


Merci beaucoup !

"François Picalausa" a écrit dans le message de
news:
Bonjour/soir,

"Vincent Guichard" a écrit dans le message
de news:c4ragp$rm0$
> pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par des
> <CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ le
> fichier ne contient que des <CR>, à la fin il va contenir des
> <CR><CR><LF>...

Effectivement, j'ai commis une erreur.
Et la correction est bien
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf), vbCr,


vbLf)
strLines = Split(strFileContent, vbLf)

> mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste
> après?
Non, pas supprimer ni ajouter.
Simplement convertir tous les séparateurs (vbCr, vbCrLf) en un même
séparateur (vbLf) pour ensuite splitter la chaine selon ce séparateur
(vbLf).
Celà permet de travailler avec tout type de fichiers, peu importe le
séparateur qu'ils utilisent.


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com







Avatar
François Picalausa
Bonjour/soir,

Encore une erreur ou quelles sont les joies du copier-coller :-(

strLines est déclaré comme ceci:
Dim strLines() As String

et il faut remplacer strBufar strFileContent dans les déclarations:
Dim FFN As Integer, strFileContent As String

Voici le code au final:
Dim FFN As Integer, strFileContent As String
Dim strLines() As String, i As Long

FFN = FreeFile

Open "c:toto1.txt" For Binary As FFN
strFileContent = String(LOF(FFN), Chr(0))
Get FFN, , strFileContent
Close FFN

'Remplace tous les vbCrLf et les vbCr par des CrLf et découpe la chaine
'suivant les Lf
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf), vbCr,
vbLf)
strLines = Split(strFileContent, vbLf)

For i = LBound(strLines) To UBound(strLines)
'Affiche chaque ligne du fichier
MsgBox strLines(i)
Next i

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jean-Michel" a écrit dans le
message de news:%
Donc, avant toute chose, comment je replace ceci dans mon fichier.

Car je ne sais pas a quoi correspond vos variables :

strFileContent
strLines


Merci beaucoup !

"François Picalausa" a écrit dans le message de
news:
Bonjour/soir,

"Vincent Guichard" a écrit dans le
message de news:c4ragp$rm0$
pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par des
<CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ le
fichier ne contient que des <CR>, à la fin il va contenir des
<CR><CR><LF>...



Effectivement, j'ai commis une erreur.
Et la correction est bien
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf),
vbCr, vbLf) strLines = Split(strFileContent, vbLf)

mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste
après?


Non, pas supprimer ni ajouter.
Simplement convertir tous les séparateurs (vbCr, vbCrLf) en un même
séparateur (vbLf) pour ensuite splitter la chaine selon ce séparateur
(vbLf).
Celà permet de travailler avec tout type de fichiers, peu importe le
séparateur qu'ils utilisent.


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com




Avatar
ng
Salut,

strFileContent = String(LOF(FFN), Chr(0))


ahhhh :) => strFileContent = String(LOF(FFN), Chr$(0))
Bon ok je chipotte :)

Sinon pourquoi ne pas utiliser Space$() ?
=> strFileContent = Space$(LOF(FFN))

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

François Picalausa a écrit :

Bonjour/soir,

Encore une erreur ou quelles sont les joies du copier-coller :-(

strLines est déclaré comme ceci:
Dim strLines() As String

et il faut remplacer strBufar strFileContent dans les déclarations:
Dim FFN As Integer, strFileContent As String

Voici le code au final:
Dim FFN As Integer, strFileContent As String
Dim strLines() As String, i As Long

FFN = FreeFile

Open "c:toto1.txt" For Binary As FFN
strFileContent = String(LOF(FFN), Chr(0))
Get FFN, , strFileContent
Close FFN

'Remplace tous les vbCrLf et les vbCr par des CrLf et découpe la
chaine 'suivant les Lf
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf),
vbCr, vbLf)
strLines = Split(strFileContent, vbLf)

For i = LBound(strLines) To UBound(strLines)
'Affiche chaque ligne du fichier
MsgBox strLines(i)
Next i


"Jean-Michel" a écrit dans le
message de news:%
Donc, avant toute chose, comment je replace ceci dans mon fichier.

Car je ne sais pas a quoi correspond vos variables :

strFileContent
strLines


Merci beaucoup !

"François Picalausa" a écrit dans le message de
news:
Bonjour/soir,

"Vincent Guichard" a écrit dans le
message de news:c4ragp$rm0$
pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par
des <CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ
le fichier ne contient que des <CR>, à la fin il va contenir des
<CR><CR><LF>...



Effectivement, j'ai commis une erreur.
Et la correction est bien
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf),
vbCr, vbLf) strLines = Split(strFileContent, vbLf)

mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste
après?


Non, pas supprimer ni ajouter.
Simplement convertir tous les séparateurs (vbCr, vbCrLf) en un même
séparateur (vbLf) pour ensuite splitter la chaine selon ce
séparateur (vbLf).
Celà permet de travailler avec tout type de fichiers, peu importe le
séparateur qu'ils utilisent.


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com






Avatar
Jean-Michel
Ca marche, c'est parfait merci !

Merci Merci Merci

"François Picalausa" a écrit dans le message de
news:uo$
Bonjour/soir,

Encore une erreur ou quelles sont les joies du copier-coller :-(

strLines est déclaré comme ceci:
Dim strLines() As String

et il faut remplacer strBufar strFileContent dans les déclarations:
Dim FFN As Integer, strFileContent As String

Voici le code au final:
Dim FFN As Integer, strFileContent As String
Dim strLines() As String, i As Long

FFN = FreeFile

Open "c:toto1.txt" For Binary As FFN
strFileContent = String(LOF(FFN), Chr(0))
Get FFN, , strFileContent
Close FFN

'Remplace tous les vbCrLf et les vbCr par des CrLf et découpe la


chaine
'suivant les Lf
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf), vbCr,
vbLf)
strLines = Split(strFileContent, vbLf)

For i = LBound(strLines) To UBound(strLines)
'Affiche chaque ligne du fichier
MsgBox strLines(i)
Next i

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jean-Michel" a écrit dans le
message de news:%
> Donc, avant toute chose, comment je replace ceci dans mon fichier.
>
> Car je ne sais pas a quoi correspond vos variables :
>
> strFileContent
> strLines
>
>
> Merci beaucoup !
>
> "François Picalausa" a écrit dans le message de
> news:
>> Bonjour/soir,
>>
>> "Vincent Guichard" a écrit dans le
>> message de news:c4ragp$rm0$
>>> pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par des
>>> <CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ le
>>> fichier ne contient que des <CR>, à la fin il va contenir des
>>> <CR><CR><LF>...
>>
>> Effectivement, j'ai commis une erreur.
>> Et la correction est bien
>> strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf),
>> vbCr, vbLf) strLines = Split(strFileContent, vbLf)
>>
>>> mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste
>>> après?
>> Non, pas supprimer ni ajouter.
>> Simplement convertir tous les séparateurs (vbCr, vbCrLf) en un même
>> séparateur (vbLf) pour ensuite splitter la chaine selon ce séparateur
>> (vbLf).
>> Celà permet de travailler avec tout type de fichiers, peu importe le
>> séparateur qu'ils utilisent.
>>
>>
>> --
>> François Picalausa (MVP VB)
>> FAQ VB : http://faq.vb.free.fr
>> MSDN : http://msdn.microsoft.com




Avatar
François Picalausa
Bonjour/soir,

Space et même space$ sont lents...
Par contre, il y a encore une erreur dans ce code.. décidément, je vais
banir les touches Ctrl, C et V de mon clavier ;-)
Chr(0) est lent et Chr$(0) aussi, si on les compare à vbNullChar

Donc, Pas space parce que c'est plus lent que String(LOF(FFN), vbNullChar)
(encore faudrait-iml vérifier qu'il n'y avait pas d'erreur de code dans le
bench lorsque je l'ai fait :-S

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


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

strFileContent = String(LOF(FFN), Chr(0))


ahhhh :) => strFileContent = String(LOF(FFN), Chr$(0))
Bon ok je chipotte :)

Sinon pourquoi ne pas utiliser Space$() ?
=> strFileContent = Space$(LOF(FFN))


Bonjour/soir,

Encore une erreur ou quelles sont les joies du copier-coller :-(

strLines est déclaré comme ceci:
Dim strLines() As String

et il faut remplacer strBufar strFileContent dans les déclarations:
Dim FFN As Integer, strFileContent As String

Voici le code au final:
Dim FFN As Integer, strFileContent As String
Dim strLines() As String, i As Long

FFN = FreeFile

Open "c:toto1.txt" For Binary As FFN
strFileContent = String(LOF(FFN), Chr(0))
Get FFN, , strFileContent
Close FFN

'Remplace tous les vbCrLf et les vbCr par des CrLf et découpe la
chaine 'suivant les Lf
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf),
vbCr, vbLf)
strLines = Split(strFileContent, vbLf)

For i = LBound(strLines) To UBound(strLines)
'Affiche chaque ligne du fichier
MsgBox strLines(i)
Next i


"Jean-Michel" a écrit dans le
message de news:%
Donc, avant toute chose, comment je replace ceci dans mon fichier.

Car je ne sais pas a quoi correspond vos variables :

strFileContent
strLines


Merci beaucoup !

"François Picalausa" a écrit dans le message
de news:
Bonjour/soir,

"Vincent Guichard" a écrit dans le
message de news:c4ragp$rm0$
pas bon, ca, a mon avis... Tu renplace d'abord tous les <CR> par
des <CR><LF>, puis les <LF> par des <CR><LF>... donc si au départ
le fichier ne contient que des <CR>, à la fin il va contenir des
<CR><CR><LF>...



Effectivement, j'ai commis une erreur.
Et la correction est bien
strFileContent = Replace(Replace(strFileContent, vbCrLf, vbLf),
vbCr, vbLf) strLines = Split(strFileContent, vbLf)

mais pourquoi ajouter des vbCrLf si c'est pour le supprimer jste
après?


Non, pas supprimer ni ajouter.
Simplement convertir tous les séparateurs (vbCr, vbCrLf) en un même
séparateur (vbLf) pour ensuite splitter la chaine selon ce
séparateur (vbLf).
Celà permet de travailler avec tout type de fichiers, peu importe
le séparateur qu'ils utilisent.


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com