OVH Cloud OVH Cloud

Chaine de caractères en VB6

13 réponses
Avatar
Marie
Bonjour

J'ai un fichier .txt dans lequel est inscrit plusieurs=20
lignes de texte. Avec du code VB6, je voudrais pouvoir=20
remplacer dans ce fichier une chaine de caract=E8res par une=20
autre (par ex : remplacer la chaine 01/01/1999 par=20
01/01/2000) sachant que cete chaine peut se trouver=20
n'importe o=F9 dans le fichier.

Par avance merci

10 réponses

1 2
Avatar
Christophe
Bonjour,
va lire la réponse au post d'Antoine "2 Problèmes lancer un exe ..."

ça te fera un début

Christophe Vergon

"Marie" a écrit dans le message
de news: 11fe01c38445$ad96b1d0$
Bonjour

J'ai un fichier .txt dans lequel est inscrit plusieurs
lignes de texte. Avec du code VB6, je voudrais pouvoir
remplacer dans ce fichier une chaine de caractères par une
autre (par ex : remplacer la chaine 01/01/1999 par
01/01/2000) sachant que cete chaine peut se trouver
n'importe où dans le fichier.

Par avance merci
Avatar
sarrazin
Bonsoir,
il y a un très bon exemple de Microsoft : SAR (Search and replace)

"Marie" a écrit dans le message
news: 11fe01c38445$ad96b1d0$
Bonjour

J'ai un fichier .txt dans lequel est inscrit plusieurs
lignes de texte. Avec du code VB6, je voudrais pouvoir
remplacer dans ce fichier une chaine de caractères par une
autre (par ex : remplacer la chaine 01/01/1999 par
01/01/2000) sachant que cete chaine peut se trouver
n'importe où dans le fichier.

Par avance merci


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.521 / Virus Database: 319 - Release Date: 23/09/03
Avatar
François Picalausa
Bonjour/soir,

Il est facilement possible de charger un fichier, d'effectuer les
modifications et de réécrire le fichier.
Voici un exemple:
Dim FFN AS Integer, strBuffer As String
FFN = FreeFile

Open "c:toto.txt" For Binary As FFN
strBuffer = String$(Lof(FFN), vbNullChar)
Get FFN,, strBuffer
Close FFN
strBuffer=Replace(strBuffer,"01/01/1999","01/01/2000")

Kill "c:toto.txt"
Open "c:toto.txt" For Binary As FFN
Put FFN,, strBuffer
Close FFN

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


"Marie" a écrit dans le
message de news:11fe01c38445$ad96b1d0$
Bonjour

J'ai un fichier .txt dans lequel est inscrit plusieurs
lignes de texte. Avec du code VB6, je voudrais pouvoir
remplacer dans ce fichier une chaine de caractères par une
autre (par ex : remplacer la chaine 01/01/1999 par
01/01/2000) sachant que cete chaine peut se trouver
n'importe où dans le fichier.

Par avance merci


Avatar
Bismark Prods
en VB6 cela ne pose aucun problème je pense. Tu te place ton texte dans une
variable string, tu execute un replace(x,y) et tu enregistre le resultat
sous le meme nom que le fichier ouvert !

"Marie" a écrit dans le message
de news:11fe01c38445$ad96b1d0$
Bonjour

J'ai un fichier .txt dans lequel est inscrit plusieurs
lignes de texte. Avec du code VB6, je voudrais pouvoir
remplacer dans ce fichier une chaine de caractères par une
autre (par ex : remplacer la chaine 01/01/1999 par
01/01/2000) sachant que cete chaine peut se trouver
n'importe où dans le fichier.

Par avance merci
Avatar
surfeur75
Oh Marie, si tu savais...

Bonjour,

Ben, in extenso, je dirais qu'il faut déjà tester pour savoir où est ta
chaîne à remplacer, évidemment...

Puis, si le fichier est petit, comme susdit par d'autres personnes,
mettre dans une variable, modifier ta date, et remettre tout dans le fichier
par écrasement de l'ancien "output", mais il y a un risque à ce genre de
manipulation, c'est la coupure (de courant, la baisse de tension, etc...),
et tu perds tout éventuellement, alors il faut dans la manipulation,
toujours avoir un fichier valide, donc il faut le faire avec 2 fichiers, tu
dupliques ton fichier, tu fais comme sus-cité, puis tu supprimes après ton
fichier en double...

Sinon, si ton fichier est gros, il peut être possible de modifier par
d'autre procédures (fais des tests avec le mode d'accès binaire ou direct),
qui te permet à l'aide d'un pointeur, de modifier exactement l'endroit, et
seulement celui-ci, mais il faut bien connaître la structure de ton fichier,
car ce ne sont pas des méthodes recommandées officiellement, mais
théoriquement ça marche, car le problème en réalité du fichier texte, c'est
que hélas, contrairement à d'autres langages, on ne peut, ni insérer
(modification), ni supprimer un morceau (on ne peut que rajouter en fin, du
fait de l'absence de pointeur dans la méthode), il faut de facto et
schématiquement le recopier en modifiant ce que tu veux, puis le réécrire,
s'il est gros ça se fait directement en lisant un fichier et en écrivant
avec les modifs dans l'autre, après test, puis in fine, avec la suppression
du fichier doublon...

@+, bye, Joe.
-------------------

"Marie" a écrit dans le message
de news:11fe01c38445$ad96b1d0$
Bonjour

J'ai un fichier .txt dans lequel est inscrit plusieurs
lignes de texte. Avec du code VB6, je voudrais pouvoir
remplacer dans ce fichier une chaine de caractères par une
autre (par ex : remplacer la chaine 01/01/1999 par
01/01/2000) sachant que cete chaine peut se trouver
n'importe où dans le fichier.

Par avance merci
Avatar
Pierre Alexis
Salut François,

Tu as écrit :

Kill "c:toto.txt"
Open "c:toto.txt" For Binary As FFN
Put FFN,, strBuffer
Close FFN



??????????? Tu supprime le fichier pour ensuite le recréer et l'ouvrir ?!?
Pourquoi ne pas écrire directement ? Comme ceci :

Dim fd As Integer, Buffer As String

fd = FreeFile ' Recupère un file descriptor de libre

' Ouvre le fichier
Open "C:Documents and SettingsPierreMes documentstoto.txt" For Binary
Access Read Write As fd
Buffer = String$(LOF(fd), vbNullChar) ' Initalise le buffer
Get fd, , Buffer ' Lit les données dans le buffer
Buffer = Replace(Buffer, "01/01/1999", "01/01/2000") ' Effectue le
remplacement
Put fd, 1, Buffer ' Ecrit les données
Close FFN ' Ferme le fichier

--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
François Picalausa
Bonjour/soir,

??????????? Tu supprime le fichier pour ensuite le recréer et
l'ouvrir ?!?



Révise ton binary et tu sauras que si les données écrites sont de tailles
inférieures aux données déjà présentes, la taille du fichier n'est pas pour
autant tronquée.

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


"Pierre Alexis" a écrit dans le message de
news:
Salut François,

Tu as écrit :

Kill "c:toto.txt"
Open "c:toto.txt" For Binary As FFN
Put FFN,, strBuffer
Close FFN



??????????? Tu supprime le fichier pour ensuite le recréer et
l'ouvrir ?!? Pourquoi ne pas écrire directement ? Comme ceci :

Dim fd As Integer, Buffer As String

fd = FreeFile ' Recupère un file descriptor de libre

' Ouvre le fichier
Open "C:Documents and SettingsPierreMes documentstoto.txt" For
Binary Access Read Write As fd
Buffer = String$(LOF(fd), vbNullChar) ' Initalise le buffer
Get fd, , Buffer ' Lit les données dans le buffer
Buffer = Replace(Buffer, "01/01/1999", "01/01/2000") ' Effectue le
remplacement
Put fd, 1, Buffer ' Ecrit les données
Close FFN ' Ferme le fichier


Avatar
François Picalausa
Bonjour/soir,

Ouuppsss, partit trop vite.

J'ai oublié de dire que ton exemple ne fonctionnait pas....
Open "C:Documents and SettingsPierreMes documentstoto.txt" For Binary


Access Read Write As *fd*
Close *FFN* ' Ferme le fichier



il faut écrire "Close fd"

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


"Pierre Alexis" a écrit dans le message de
news:
Salut François,

Tu as écrit :

Kill "c:toto.txt"
Open "c:toto.txt" For Binary As FFN
Put FFN,, strBuffer
Close FFN



??????????? Tu supprime le fichier pour ensuite le recréer et
l'ouvrir ?!? Pourquoi ne pas écrire directement ? Comme ceci :

Dim fd As Integer, Buffer As String

fd = FreeFile ' Recupère un file descriptor de libre

' Ouvre le fichier
Open "C:Documents and SettingsPierreMes documentstoto.txt" For
Binary Access Read Write As fd
Buffer = String$(LOF(fd), vbNullChar) ' Initalise le buffer
Get fd, , Buffer ' Lit les données dans le buffer
Buffer = Replace(Buffer, "01/01/1999", "01/01/2000") ' Effectue le
remplacement
Put fd, 1, Buffer ' Ecrit les données
Close FFN ' Ferme le fichier


Avatar
Pierre Alexis
Salut François,

Tu as écrit :

Révise ton binary et tu sauras que si les données écrites sont de tailles
inférieures aux données déjà présentes, la taille du fichier n'est pas pour
autant tronquée.



C'est nul ça niveau performance. Fin bon y'a pas mieux à c'kil parait :-(. Et
certains disent même que c'est une limite de l'OS... Donc logiquement en C++
par exemple, il faut travailler de la même façon... J'vais me renseigner, car
ça me parrait vraiment bourrain comme méthode.

Fin non ça cloche cette méthode. Parce que au moment où tu recrées ton
fichier, tu dois commencer à recopier les droits qu'il y avait sur ton ancien
fichier... Sinon tu perds tous les droits que tu avais mis dessus, car ceux-ci
sont remplacés par les droits par défauts (càd en général ceux de l'objet
parent).

--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
Pierre Alexis
Salut François,

Tu as écrit :

J'ai oublié de dire que ton exemple ne fonctionnait pas....
Open "C:Documents and SettingsPierreMes documentstoto.txt" For Binary
Access Read Write As *fd* Close *FFN* ' Ferme le fichier



il faut écrire "Close fd"



Un copié-collé de ton code est la cause de cette erreur.

--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
1 2