OVH Cloud OVH Cloud

lecture écriture fichier plat

6 réponses
Avatar
ROLLOT Pascal Jean
Bonjour,

En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans pour
se positionner à une ligne bien précise modifier cette ligne puis continuer
à lire le fichier. En clair, comment aller modifier une ligne bine précise
dans un fichier texte et ne pas modifier le reste.

Merci de votre aide.

6 réponses

Avatar
X
Bonjour,

Tu demanderas si tu veux des exemples:

Le problème du fichier texte ligne par ligne, est qu'on ne peut le
modifier directement en mode texte, en gros, il faut lire pour rechercher la
ligne voulue, ensuite à ce moment tu connais le n° de ta ligne, après, il
faut le sauvegarder (listbox par exemple) moins la ligne à modifier. Puis tu
crée un nouveau fichier texte bis, ou tu envoies dedans toutes les lignes de
l'ancien fichier, plus ta ligne que tu voulais modifier, après, tu supprimes
le fichier d'origine, et tu renommes le fichier bis en fichier d'origine,
c'est assez lourd en fait, mais en s'aidant des listsBox ça va mieux...
Tu peux aussi le faire en trois morceaux comme sous-cité si tu veux
respecter l'ancienne hiérarchie des lignes...

Sinon tu as une autre méthode (qui n'est pas recommandée par l'aide de
vb6), car il ne faut pas se mélanger les pédales, tu fais ainsi:
Il y a plusieurs méthodes, mais en voici une pour une fichier pas trop gros:
Tu prends 3 variables
dim avant as string
dim recherche as string
dim apres as string
Tu lis ton fichier texte en mode "binaire", tu recherches ainsi ta chaîne
plus ascii13+10, quand tu l'as trouvé cette chaîne, tu as la position de
l'octet de début de chaîne et sa longueur, car on va lire le fichier en
boucle.
A partir de ce moment, du charge dans la variable début, le fichier jusqu'à
la position recherchée exclus, puis dans ta variable recherche, tu charge la
chaîne à modifier, que tu modifie en la terminant pas ascii 13+10, et à
parti du premier octet terminant cette chaîne (ascii 10), tu charge le reste
du fichier dans la troisième variable (apres).
Après tu remets le fichier à 0 (nul)
En dernier, tu envoie toujours en binaire dans le fichier texte, tes trois
variables dans l'ordre de déclaration, et ça devrait te reconstituer ton
fichier texte...

Tu peux aussi charger tout le fichier en variable, et à l'aide de la
fonction de recherche de texte, connaître le n° de l'octet de début, etc, on
peut appliquer plusieurs méthodes, bis...

--
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"ROLLOT Pascal Jean" a écrit dans le message de news:
ecAW$
Bonjour,

En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans
pour
se positionner à une ligne bien précise modifier cette ligne puis
continuer
à lire le fichier. En clair, comment aller modifier une ligne bine précise
dans un fichier texte et ne pas modifier le reste.

Merci de votre aide.




Avatar
Pascal
Bonjour,

Le code ci-dessous permet de modifier valeur d'un parametre dans un
fichier.ini du type
Param1=val1
Pour modifile call gEcrireIi("Param1","newval")

'-----------------------------------------------------------------
' gEcrireIni: modifie un parametre du . ini
'entrées: le parametre et sa valeur
'-----------------------------------------------------------------
Public Sub gEcrireIni(strParametre As String, strValeur As String)
Dim strNomFichierIni As String
Dim strTemp As String
Dim strFichier As String
Dim strNomParam As String
Dim intNoFic As Integer
Dim intPos As Integer

intNoFic = FreeFile
strNomFichierIni = App.Path & "" & App.EXEName & ".ini"
Open strNomFichierIni For Input As #intNoFic
Do
Line Input #intNoFic, strTemp

intPos = InStr(strTemp, "=")
If intPos > 0 And Mid$(strTemp, 1, 1) <> ";" Then
strNomParam = Mid$(strTemp, 1, intPos - 1)
If strNomParam = strParametre Then
strTemp = strParametre & "=" & strValeur
End If
End If
If strFichier = "" Then
strFichier = strTemp
Else
If CStr(strTemp) <> "" Then
strFichier = strFichier & vbNewLine & strTemp
End If
End If
Loop Until EOF(intNoFic) = True
Close #intNoFic

intNoFic = FreeFile
strNomFichierIni = App.Path & "" & App.EXEName & ".ini"
Open strNomFichierIni For Output As #intNoFic
Write #intNoFic, strFichier
Close #intNoFic



End Sub


"ROLLOT Pascal Jean" a écrit dans le message de news:
ecAW$
Bonjour,

En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans
pour
se positionner à une ligne bien précise modifier cette ligne puis
continuer
à lire le fichier. En clair, comment aller modifier une ligne bine précise
dans un fichier texte et ne pas modifier le reste.

Merci de votre aide.




Avatar
ROLLOT Pascal Jean
Merci beaucoup.
"X" a écrit dans le message de
news:
Bonjour,

Tu demanderas si tu veux des exemples:

Le problème du fichier texte ligne par ligne, est qu'on ne peut le
modifier directement en mode texte, en gros, il faut lire pour rechercher


la
ligne voulue, ensuite à ce moment tu connais le n° de ta ligne, après, il
faut le sauvegarder (listbox par exemple) moins la ligne à modifier. Puis


tu
crée un nouveau fichier texte bis, ou tu envoies dedans toutes les lignes


de
l'ancien fichier, plus ta ligne que tu voulais modifier, après, tu


supprimes
le fichier d'origine, et tu renommes le fichier bis en fichier d'origine,
c'est assez lourd en fait, mais en s'aidant des listsBox ça va mieux...
Tu peux aussi le faire en trois morceaux comme sous-cité si tu veux
respecter l'ancienne hiérarchie des lignes...

Sinon tu as une autre méthode (qui n'est pas recommandée par l'aide de
vb6), car il ne faut pas se mélanger les pédales, tu fais ainsi:
Il y a plusieurs méthodes, mais en voici une pour une fichier pas trop


gros:
Tu prends 3 variables
dim avant as string
dim recherche as string
dim apres as string
Tu lis ton fichier texte en mode "binaire", tu recherches ainsi ta chaîne
plus ascii13+10, quand tu l'as trouvé cette chaîne, tu as la position de
l'octet de début de chaîne et sa longueur, car on va lire le fichier en
boucle.
A partir de ce moment, du charge dans la variable début, le fichier


jusqu'à
la position recherchée exclus, puis dans ta variable recherche, tu charge


la
chaîne à modifier, que tu modifie en la terminant pas ascii 13+10, et à
parti du premier octet terminant cette chaîne (ascii 10), tu charge le


reste
du fichier dans la troisième variable (apres).
Après tu remets le fichier à 0 (nul)
En dernier, tu envoie toujours en binaire dans le fichier texte, tes trois
variables dans l'ordre de déclaration, et ça devrait te reconstituer ton
fichier texte...

Tu peux aussi charger tout le fichier en variable, et à l'aide de la
fonction de recherche de texte, connaître le n° de l'octet de début, etc,


on
peut appliquer plusieurs méthodes, bis...

--
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"ROLLOT Pascal Jean" a écrit dans le message de news:
ecAW$
> Bonjour,
>
> En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans
> pour
> se positionner à une ligne bien précise modifier cette ligne puis
> continuer
> à lire le fichier. En clair, comment aller modifier une ligne bine


précise
> dans un fichier texte et ne pas modifier le reste.
>
> Merci de votre aide.
>
>




Avatar
ROLLOT Pascal Jean
Merci beaucoup
"Pascal" a écrit dans le message de
news:44f42f9c$0$27389$
Bonjour,

Le code ci-dessous permet de modifier valeur d'un parametre dans un
fichier.ini du type
Param1=val1
Pour modifile call gEcrireIi("Param1","newval")

'-----------------------------------------------------------------
' gEcrireIni: modifie un parametre du . ini
'entrées: le parametre et sa valeur
'-----------------------------------------------------------------
Public Sub gEcrireIni(strParametre As String, strValeur As String)
Dim strNomFichierIni As String
Dim strTemp As String
Dim strFichier As String
Dim strNomParam As String
Dim intNoFic As Integer
Dim intPos As Integer

intNoFic = FreeFile
strNomFichierIni = App.Path & "" & App.EXEName & ".ini"
Open strNomFichierIni For Input As #intNoFic
Do
Line Input #intNoFic, strTemp

intPos = InStr(strTemp, "=")
If intPos > 0 And Mid$(strTemp, 1, 1) <> ";" Then
strNomParam = Mid$(strTemp, 1, intPos - 1)
If strNomParam = strParametre Then
strTemp = strParametre & "=" & strValeur
End If
End If
If strFichier = "" Then
strFichier = strTemp
Else
If CStr(strTemp) <> "" Then
strFichier = strFichier & vbNewLine & strTemp
End If
End If
Loop Until EOF(intNoFic) = True
Close #intNoFic

intNoFic = FreeFile
strNomFichierIni = App.Path & "" & App.EXEName & ".ini"
Open strNomFichierIni For Output As #intNoFic
Write #intNoFic, strFichier
Close #intNoFic



End Sub


"ROLLOT Pascal Jean" a écrit dans le message de news:
ecAW$
> Bonjour,
>
> En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans
> pour
> se positionner à une ligne bien précise modifier cette ligne puis
> continuer
> à lire le fichier. En clair, comment aller modifier une ligne bine


précise
> dans un fichier texte et ne pas modifier le reste.
>
> Merci de votre aide.
>
>




Avatar
SAISAS
Bonjour,

pas dautre choix que de lire le fichier , de remplacer la chaine et d'écrire
dans le fichier. Ce qui peut se faire très simplement en vb, comme par
exemple :

Sub TextStreamReplace
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1,
TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("fichier.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
s = ts.ReadAll 'lit tout le fichier
ts.Close
s = Replace(s, "ancien", "nouveau", 1, 1) ' pour remplacer la chaine
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write s 'ecrit le fichier modifié
ts.Close
End Sub

PS : j'entends d'ici les hurlements sur la propreté du code (j'ai pompé dans
l'"aide vb!).

"ROLLOT Pascal Jean" a écrit :

Bonjour,

En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans pour
se positionner à une ligne bien précise modifier cette ligne puis continuer
à lire le fichier. En clair, comment aller modifier une ligne bine précise
dans un fichier texte et ne pas modifier le reste.

Merci de votre aide.





Avatar
MCh
Bonjour,

Il faut lire le fichier dans une variable
puis utiliser la fonction replace et enfin ecraser le fichier original.

Function LitTrans$(Fichier$) As Boolean
'Lit un fichier nommé et le met dans LitTrans$
Dim Fi
Dim trans$

Fi = FreeFile
'Test si le fichier existe
If Dir(App.Path & "Pages" & Fichier) <> "" Then
Open App.Path & "Pages" & Fichier For Binary Access Read As #Fi
Do While Not EOF(Fi)
trans = ""
Line Input #Fi, trans
If trans <> "" Then P = P & trans & vbNewLine
Loop

Close #Fi
LitTrans=Trans
End If 'Dir
End Function

'Ecriture du nouveau fichier
Sub sFichier(Fich$, Texte$)
Dim f
f = FreeFile
On Error Resume Next
Open App.Path & "Pages" & Fich$ For Output As #f
Print #f, Texte
Close #f
On Error GoTo 0
End Sub

(En suposant qu'il exite un répertoire Pages dans le répertoire de
l'application)

'Dans une feuille ou module :
Dim P$
P$=LitTrans ("MonFichierTexte.txt")
P$=Replace(P$,"Chaine à remplacer","Chaine de remplacement")
sFichier "MonFichierTexte.txt",P$

Maurice.


"ROLLOT Pascal Jean" a écrit dans le message de news:
ecAW$
Bonjour,

En vb6, comment faut-il faire pour ouvrir un ficheir texte, lire dedans
pour
se positionner à une ligne bien précise modifier cette ligne puis
continuer
à lire le fichier. En clair, comment aller modifier une ligne bine précise
dans un fichier texte et ne pas modifier le reste.

Merci de votre aide.