Modification d'un fichier texte

Résolu
gnark_gnark Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 13 juin 2005 - 10 juin 2005 à 12:07
EREF Messages postés 31 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 24 février 2006 - 15 juin 2005 à 20:42
Bonjour,

Y'a t'il un moyen d'ouvrir un fichier et de ne modifier que quelques lignes de ce fichier ? J'utilise la librairie Scripting Runtime Object et je n'ai pas trouvé le moyen d'ouvrir le fichier en lecture/écriture.

Merci d'avance

4 réponses

EREF Messages postés 31 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 24 février 2006
10 juin 2005 à 12:55
regarde la fonction OPEN de Visual Basic.
tu as généralement 3 cas : ouvrir un fichier pour le lire, ouvrir un fichier pour y écrire dedans, ( ces deux cas sont caractérisés par ce qu'on appelle le mode séquentiel); et enfin ouvrir un fichier pour lire et/ou écrire ( ceci est le mode direct).
Le mode SEQUENTIEL comme son nom l'indique, on lit, ou on écrit ce fichier donnée après donnée.
Pour LIRE voir la fonction VB suivante:
OPEN <Ch.directeur du fichier à lire> FOR INPUT AS #1
ce qui veut dire: "ouvre le fichier XXX qu'on appelera dorénavant #1 (ou #2,#3,#4,....), pour y prendre des données les unes après les autres"
INPUT #1,ENR
ce qui veut dire: "prend la ligne en cours du fichier #1, et stock la dans la variable ENR"
CLOSE #1
ce qui veutt dire: "ferme ce fichier , et remet le compteur des lignes à zéro

Pour ECRIRE, c'est idem mais on tape OUTPUT au lieu de INPUT pour la ligne contenant OPEN, et on utilise PRINT au lieu de INPUT pour stocker la variable ENR

ATTENTION: Tout est question du format avec lequel le fichier à été écrit à l'origine, mais généralement tout est réalisable.
Si on veut intercaler une ligne dans un fichier déjà existant, il faut ouvrir le fichier à lire en #1 mode INPUT; et un nouveau fichier ,nommé différement, en écriture en #2 mode OUTPUT; il faudra lire dans #1 toutes les lignes avant, et les écrire dans #2, inscrire dans #2 la ligne à intercaler, puis lire le reste de #1 pour l'écrire dans #2.

PS : Voir aussi sous VB la fonction LINE INPUT.

Le mode DIRECT est utiliser pour stocker des données un peu à la manière d'une base de données. Si cela t'interesse contacte-moi.

2ème PS: Je ne peut pour le moment consulter ce site uniquement les Mercredis.

Salut !!!!
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
10 juin 2005 à 13:16
Pas mieux! Eref m'a coupé l'herbe sous les pieds ... Mais sa réponse est bien... Ceci dit, pour une question de précision, je rajouterais ces quelques commentaires :



Il existe aussi, outre les modes d'accès "INPUT" et "OUTPUT" de "OPEN",
les modes "RANDOM" [input et output] et "BINARY" [permet de lire les
fichiers octet par octet].



Le "#1" est en fait le "canal" du fichier. Il y en a 255 (ou 256, je
sais plus trop!) que tu peux utiliser simlutanément. Ceci dit, les 128
premiers sont un peu différents des suivants. Tu ne peux pas ouvrir
deux fichiers dans un même canal. C'est à dire qu'il faut assigner, via
l'instruction OPEN donc, un fichier à un canal pour pouvoir utiliser ce
fichier. Ensuite, pour faire référence à ce fichier dans les
instructions comme INPUT, LINE INPUT ou encore PRINT, il suffit
d'indiquer son canal (ce qui est bien pratique car cours à écrire!).
Mais pour pouvoir utiliser le canal avec un autre fichier, il faut
fermer le précédent avec l'instruction CLOSE ce qui libérera le canal.
Ceci dit, il y a une fonction pour connaitre le numéro du premier canal
disponible : FREEFILE



varCanal = FreeFile

Open "C:\MonFichier.Txt" For INPUT As varCanal

...

Input varCanal, varDonneeArecuperer

...

Close varCanal



Encore une précision : La technique de Eref n'est pas forcément
la meilleur... En effet, le mieux est de lire ton fichier (ligne par
ligne via l'instruction "LINE INPUT" par exemple) et de stocker toutes
les lignes (ou les données) dans un tableau. Ensuite, de modifier ton
tableau en y ajoutant ce que tu veux puis, d'ouvrir le même fichier (ce
qui l'effacera d'emblé) et d'y écrire le contenu du tableau.



Sinon, y'a plein de sources sur VB-France et y'a aussi l'aide pour t'aider...



Enjoy



(Si une réponse vous convient, cliquez sur le bouton en dessous...)
3
gnark_gnark Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 13 juin 2005
10 juin 2005 à 14:05
Je vous remercie bien pour vos réponses. ;-)

Bonne journée !
0
EREF Messages postés 31 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 24 février 2006
15 juin 2005 à 20:42
ScSAMI à raison sur certains points !!!! (Bien que , concernant les canaux disponibles, je pense que tu sais bien ou t'en ai pour ouvrir tel ou tel fichier!!!) Baste !!!

Le mode DIRECT est pratique mais ne fonctionne pas du tout comme les 2 modes que je t'avais expliqué .
On utilise RANDOM pour ouvrir un fichier , et les instructions GET pour lire , et PUT pour écrire dedans.
Comment ça marche !??!

Ex: Tu veux stocker dans un fichier ton Nom,Prénom,Adresse,et Téléphone, et surtout tu veux pouvoir y accéder directement sans être obligé de lire tout le fichier.

Ces données tu vas les stocker ligne par ligne.
Tu as (en mode RANDOM) un peu plus de 32000 lignes disponibles.

Il est conseillé de passer par une variable Tampon (Ex: Dim ENR as String)
Le code est le suivant:

OPEN <Ch.directeur du fichier à écrire> FOR RANDOM AS #1
ENR=Nom
PUT #1,1,ENR
ENR=Prénom
PUT #1,2,ENR
ENR=Adresse
PUT #1,3,ENR
ENR=Téléphone
PUT #1,4,ENR
CLOSE #1

On à fait quoi ?? en language humain !!!!

On à écrit dans #1, à la ligne 1, la variable ENR, dans laquelle on avait stocké le Nom
On à écrit dans #1, à la ligne 2, la variable ENR, dans laquelle on avait stocké le Prénom
Etc,Etc,..........

Tu as compris ???

Maintenant, si tu veut ressortir ton N° de Téléphone, tu sais qu'il est stocké à la ligne 4, donc le code est le suivant:

OPEN <Ch.directeur du fichier à lire> FOR RANDOM AS #1
GET #1,4,ENR
CLOSE #1

A toi de faire les liens avec les textbox, listbox, combo, label..de tes Form.
Tu peux faire des boucles, et remplacer le N° de ligne par une variable, de manière à incrémenter automatiquement tes lignes.

PS: Si tu ouvres avec WordPad ou Notepad, Etc.. ce fichier, il sera bizarre à l'écran, ne le modifie surtout pas, tu ne pourrait plus l'ouvrir avec l'instruction OPEN comme on vient de faire.

Bref, je crois qu'en toi de nouvelles perspectives se sont ouvertes.......
Si tu veux d'autres renseignements, si je peux je te répondrai ou bien ScSAMI je pense le fera.

Salut !!!! à Mercredi ......
0
Rejoignez-nous