OVH Cloud OVH Cloud

remplacer de l'ascii dans un fichier

7 réponses
Avatar
Mickawell
Salut

voila voila j'ai une ptite question :

comment remplacer une valeur ascii par une autre dans un fichier texte ??
je precise que lorsque j'utilise Line Input, le contenu de mon fichier se
retrouve sur une seule ligne,
donc il ne contient pas de saut de ligne...

Mon exemple :

2a 2a 2a 2a 0a 21 0a 21 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 20

je souhaite remplacer "0a" par : "0d 0a"

j'ai essayé ca :

' Ouverture du fichier en lecture
Open NomFichierASP For Input As #FileNumberASP
' Lecture de la 1ere ligne
Line Input #FileNumberASP, VL_Ligne
' Remplacement de "0a" par "0d 0a)
VL_Ligne_Mod = Replace(VL_Ligne, Asc("0a"), Asc("0d0a"))
' Fermeture du fichier
Close #FileNumberASP
' Reouverture du fichier en ecriture
Open NomFichierLog For Output Access Write As #FileNumberASP
' Ecriture de la ligne
Print #FileNumberASP, VL_Ligne_Mod
' Fermeture du fichier
Close #FileNumberASP

Et ca marche pas du tout...

Voila ca a l'air tout simple et tellement galere pour moi...

Thhaannxx a tout ceux qui pourront m'aider...

7 réponses

Avatar
Zoury
Salut Mickawell! :O)

comment remplacer une valeur ascii par une autre dans un fichier texte ??
je precise que lorsque j'utilise Line Input, le contenu de mon fichier se
retrouve sur une seule ligne,
donc il ne contient pas de saut de ligne...



Pourquoi lire le fichier ligne par ligne s'il n'y a pas de saut de ligne?
Tu plus, tu ne souhaites pas faire un traitement particulier sur chacune des
lignes, tu veux remplacer tous la "0a" du texte par "0d 0a" c'est ça?

Essaie ceci :
'***
' Module1
Option Explicit

Private Sub Main()

Dim hFile As Integer
Dim s As String

' Lit le fichier en un seul bloc
hFile = FreeFile
Open "c:file1.txt" For Binary As #hFile
s = String$(LOF(hFile), Chr$(0))
Get #hFile, , s
Close #hFile

' remplace "0a" par "0d 0a"
s = Replace(s, "0a", "0d 0a")

' Récrit le contenu du fichier en un seul bloc
hFile = FreeFile
Open "c:file1.txt" For Binary As #hFile
Put #hFile, , s
Close #hFile

End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
surfeur75
Bonjour,

Ce que je ferais (au plus simple, car il y a 3 façons de le faire, au
moins), mais d'autres compléteront peut être:

-1- Tu balances dans une liste "L1" tout ce qui vient avant la ligne à
changer.
-2- Tu balances dans une autre liste "L2" tout ce qui va après la ligne à
changer.
-3- Tu balance dans une troisième liste "L3", la liste "L1" + ta ligne à
changer + la liste "L2"
-4- Tu dupliques ton fichier "f1" en "f2" (sécurité).
-5- Tu ouvre ton fichier d'origine "f1" en mode (écrasement si existe), et
tu lui balance la liste "L3" qui contient tout, y compris la modif.
-6- Si ça se passe bien, tu supprimes ton fichier de sécu "f2", dans le cas
contraire, tu recommences avec le fichier "f2" pour base...

Les autres façons:
-1- tu peux jongler avec 2 fichiers, sur le même principe que les listes...
Tu lis et écrit dans le second fichier ce que tu as lu dans le premier,
jusqu'à la ligne à modifier, puis tu modifies la ligne, puis tu l'écris dans
le second, fichier, et tu reprends comme indiqué au début, jusqu'à la fin,
reste juste après à changer le nom des fichiers...
-2- Tu peux écrire en accès direct (pointeur de ligne), si les lignes font
toutes la même longueur, directement en modif de ta ligne.
-3- Tu peux écrire en "binaire" (pointeur d'octet, mais cuisine non
recommandée), avec le pointeur, juste où il faut...

Le problème est que les fichiers sans pointeur (texte, accès séquentiel, ne
supportent pas la modif directe, ni les fichiers texte accès direct si les
lignes n'ont pas toutes la même longueur...
Je sais, il manque un mode "modif" et un mode "delete" automatique dans les
fonction de fichier MicroSoft, peut être qu'un jour il nous fera le bonheur
de les créer, comme ça existe sur d'autres OS...

Pour m'écrire

@+, bye, Joe.
Il l'a fait car il ne savais pas que c'était impossible, alea jacta est!
--------------

"Mickawell" a écrit dans le message de news:
blv27f$tj$
Salut

voila voila j'ai une ptite question :

comment remplacer une valeur ascii par une autre dans un fichier texte ??
je precise que lorsque j'utilise Line Input, le contenu de mon fichier se
retrouve sur une seule ligne,
donc il ne contient pas de saut de ligne...

Mon exemple :

2a 2a 2a 2a 0a 21 0a 21 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 20

je souhaite remplacer "0a" par : "0d 0a"

j'ai essayé ca :

' Ouverture du fichier en lecture
Open NomFichierASP For Input As #FileNumberASP
' Lecture de la 1ere ligne
Line Input #FileNumberASP, VL_Ligne
' Remplacement de "0a" par "0d 0a)
VL_Ligne_Mod = Replace(VL_Ligne, Asc("0a"), Asc("0d0a"))
' Fermeture du fichier
Close #FileNumberASP
' Reouverture du fichier en ecriture
Open NomFichierLog For Output Access Write As #FileNumberASP
' Ecriture de la ligne
Print #FileNumberASP, VL_Ligne_Mod
' Fermeture du fichier
Close #FileNumberASP

Et ca marche pas du tout...

Voila ca a l'air tout simple et tellement galere pour moi...

Thhaannxx a tout ceux qui pourront m'aider...




Avatar
Zoury
Salut Surfeur75! :O)

Ce que je ferais (au plus simple, car il y a 3 façons de le faire, au
moins), mais d'autres compléteront peut être:

-1- Tu balances dans une liste "L1" tout ce qui vient avant la ligne à
changer.
-2- Tu balances dans une autre liste "L2" tout ce qui va après la ligne à
changer.
-3- Tu balance dans une troisième liste "L3", la liste "L1" + ta ligne à
changer + la liste "L2"
-4- Tu dupliques ton fichier "f1" en "f2" (sécurité).
-5- Tu ouvre ton fichier d'origine "f1" en mode (écrasement si existe), et
tu lui balance la liste "L3" qui contient tout, y compris la modif.
-6- Si ça se passe bien, tu supprimes ton fichier de sécu "f2", dans le


cas
contraire, tu recommences avec le fichier "f2" pour base...



et c'est ça le *plus* simple?? :O)))
Je te conseilles fortement de lire mon message.. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Zoury
> un converti de la croisade open binary contre FSO (et autre)



hehe! :O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Christophe
Zoury est un fan du open as binary

Et il a raison !!!!!

ça parait compliqué (d'un point de vue conception) de travailler avec des
octets, mais c'est tellement plus efficace

Christophe Vergon

un converti de la croisade open binary contre FSO (et autre)


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

Salut Surfeur75! :O)

> Ce que je ferais (au plus simple, car il y a 3 façons de le faire,


au
> moins), mais d'autres compléteront peut être:
>
> -1- Tu balances dans une liste "L1" tout ce qui vient avant la ligne à
> changer.
> -2- Tu balances dans une autre liste "L2" tout ce qui va après la ligne


à
> changer.
> -3- Tu balance dans une troisième liste "L3", la liste "L1" + ta ligne à
> changer + la liste "L2"
> -4- Tu dupliques ton fichier "f1" en "f2" (sécurité).
> -5- Tu ouvre ton fichier d'origine "f1" en mode (écrasement si existe),


et
> tu lui balance la liste "L3" qui contient tout, y compris la modif.
> -6- Si ça se passe bien, tu supprimes ton fichier de sécu "f2", dans le
cas
> contraire, tu recommences avec le fichier "f2" pour base...

et c'est ça le *plus* simple?? :O)))
Je te conseilles fortement de lire mon message.. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
surfeur75
Zoury, oui c'est le plus simple ta méthode, mais je partais du
principe qu'il était plus simple de manipuler des objets que de faire du
code, d'autant qu'il faut voir la taille du fichier dans la variable et les
ascii 13+10, alors j'ai joué la prudence, mais tu as raison sinon...
@+, bye, Joe.
---------------

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

Salut Surfeur75! :O)

> Ce que je ferais (au plus simple, car il y a 3 façons de le faire,


au
> moins), mais d'autres compléteront peut être:
>
> -1- Tu balances dans une liste "L1" tout ce qui vient avant la ligne à
> changer.
> -2- Tu balances dans une autre liste "L2" tout ce qui va après la ligne


à
> changer.
> -3- Tu balance dans une troisième liste "L3", la liste "L1" + ta ligne à
> changer + la liste "L2"
> -4- Tu dupliques ton fichier "f1" en "f2" (sécurité).
> -5- Tu ouvre ton fichier d'origine "f1" en mode (écrasement si existe),


et
> tu lui balance la liste "L3" qui contient tout, y compris la modif.
> -6- Si ça se passe bien, tu supprimes ton fichier de sécu "f2", dans le
cas
> contraire, tu recommences avec le fichier "f2" pour base...

et c'est ça le *plus* simple?? :O)))
Je te conseilles fortement de lire mon message.. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
ThunderMusic
Bonjour,

' remplace "0a" par "0d 0a"
s = Replace(s, "0a", "0d 0a")



à moins que je sois completement en dehors de la track, je crois que tu veux
bien changer les caracteres 0A(10) en caractere 0D0A(13+10), c'est bien ca?
Si c'est ca, il faudra écrire ceci :
s = replace(s, chr(0h0a), chr(0h0d) & chr(0h0a))

Sauf que si tu veux vraiment remplacer la string "0a" par "0d 0a", alors là,
c l'autre solution la meilleure... mais ca semblait pas être ca dans le
post initial. ;)

j'espère que ca a pu t'aider.

ThunderMusic