begin process at 2010 02 10 05:01:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > TUTORIAL FICHIER ENTREE SORTIE MODE ACCES, CEKIFOSAVOIR KOI ;P

TUTORIAL FICHIER ENTREE SORTIE MODE ACCES, CEKIFOSAVOIR KOI ;P


 Information sur la source

Note :
9,65 / 10 - par 26 personnes
9,65 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Niveau :Débutant Date de création :18/09/2002 Date de mise à jour :19/11/2003 18:15:14 Vu / téléchargé :6 937 / 403

Auteur : celiphane

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note


 Description

TUTORIAL - comment qu'on se sert des fichiers en VB ? - niveau du tut' : neuneu à costo

Tout d'abord, il faut bien savoir se représenter un ficher : c'est un flux d'octets, c'est à dire pour nous misérables humains, un tas de caractères lisibles ou non mis en bordel les un après les autres. Je dis « lisibles ou non » car dans certains cas, il s'agit juste de caractères communs intelligibles comme « A » ou « Z » ou « B » ou. bref. Vous avez à peu près compris.

La deuxième chose à savoir, c'est que ce merdier d'octet, il est souvent formaté. C'est à dire qu'il a pas été écrit aussi n'importe comment qu'il en a l'air et qu'en conséquence il ne se lit pas n'importe comment non plus.

Enfin, pour finir la sauce d'introduction, (et ça vous le savez forcément déjà) un fichier est quelque part sur une unité physique, donc il a d'une part un chemin et d'autre part un nom (puis même souvent une extension ! épatant ? ), mais comme on est en VB, et non pas chez mémé, va aussi falloir lui donné un INTEGER, un numéro quoi, pour le référencer.

On va démarrer sur un exemple bête comme chou :

§ OPEN « c:\point.txt » FOR OUTPUT AS #1

L'instruction OPEN raconte à votre prog' qu'il faut ouvrir le fichier « point.txt » situé dans le rep' « c:\ » en OUTPUT comme étant le fichier #1. Waow !

Si vous suivez bien, le seul truc que vous avez peut-être un peu de mal à interprêter c'est le mot OUTPUT : il s'agit d'un mode d'accès. Voici les 5 à retenir :

OUTPUT : ouvre un fichier VIERGE pour l'écriture (s'il est pas vierge, il le devient ! Gare !)
APPEND : ouvre un fichier pour l'écriture et place le pointeur à la fin
INPUT : ouvre un fichier EXISTANT pour la lecture (error si not exist !!!)
BINARY :  ouvre un fichier en binaire, c'est à dire sans formatage de lecture / écriture
RANDOM : au pif, nan je déconne, ça sert pour écrire / lire des enregistrements (TYPE)

(j'y pense parce que je l'ai cité plus haut : le pointeur c'est comme par exemple le curseur sous le bloc-note de Windows , tu tapes il avance mais il est virtuel, ba là c'est pareil, tu écris dans le fichier il avance pareil, sauf que y'a pas de touche backspace ou delete pour revenir en arrière, enfin si, si vraiment tu veux contrôler ton pointeur, ya l'instruction SEEK, qu'on verras plus bas.)

Donc selon notre exemple, si le fichier « c:\point.txt » n'existait pas, le voilà créé prêt à recevoir nos données, si en revanche il existait, le voilà vide prêt à recevoir nos données quand même !

Disons qu'on complète notre code et qu'au final on obtient ça :

§ OPEN « c:\point.txt » FOR OUTPUT AS #1
§ WRITE #1, « ma chaîne de caractères »
§ WRITE #1, « mon âge est 20 ans »
§ WRITE #1, « mon âge est aussi », 20
§ CLOSE #1

Après l'éxécution, on va se retrouver avec sur « C:\ » le fichier « point.txt » qui va contenir :


« ma chaîne de caractères »
« mon âge est 20 ans »
« mon âge est aussi », 20


et pas autre chose si vous l'éditez avec le bloc-note par exemple.
C'est vraiment le format le plus simple qui soit pour écrire ses données. Notez bien l'instruction CLOSE #1, il faut toujours y penser, c'est mieux, elle sert à fermer votre fichier quand vous en avez fini avec. Si vous faites CLOSE tout court, vous fermez TOUS les fichiers ouverts.

Supposons qu'on veuille récupérer ces données, c'est aussi con :

§ Dim ch1, ch2, ch3 As String
§ Dim Nb as Integer
§
§ OPEN « c:\point.txt » FOR INPUT AS #1
§ INPUT #1, ch1
§ INPUT #1, ch2
§ INPUT #1, ch3, Nb
§ CLOSE #1

Vous avez compris ? On a déclaré les variables (car il faut TOUJOURS déclarer ses variables) et, notez bien le changement de mode d'accès, on a récupéré les données ! Si si ! La syntaxe de INPUT et WRITE c'est : Instruction #Fichier , var1 , var2 , . , varN

Alors déjà rien qu'avec ça, on peut aller loin, faire des sauvegardes de paramètres propres à l'utilisateur dans un prog' etc etc. car vous le savez bien les chaines écrites plus haut dans le fichier peuvent être remplacées par n'importe quel variable, pour peu que vous les récupériez bien sous leur forme à la lecture !

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
L'OPTIMISA TION :
Le must du must c'est de référencer ses fichiers comme ça :

§ Dim Num as Integer
§ Num=FreeFile
§ Open MonFichier for Output As #Num
§ .
§ CLOSE #Num

FreeFile renvoie un numéro de fichier libre : c'est le plus propre du plus must du mieux mieux à faire pour éviter des conflits dans votre prog'.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Evi demment, ya plus encore que ce qu'on vient de voir :
Si on ouvre un fichier comme ça :

§ Open MonFichier For BINARY As #Num

On va décider nous même de ce qu'on va y lire, où qu'on va le faire et pareil pour y écrire !
Exemple :

§ Dim B as Byte
§ Dim S as String * 1
§ Dim S2 as String * 2
§ Dim I as Integer
§ Dim Num as Integer
§
§ Num=FreeFile
§
§ Open MonFichier For BINARY As #Num
§ Get #Num, 1, B
§ Get #Num, 2, S
§ Get #Num,   , S2
§ Get #Num,   , I
§ Close #Num

Disons que « MonFichier » est une variable contenant le chemin et le nom d'un fichier qui contient ça :

Abracadabra

Alors après éxécution,
- B va contenir la valeur 65
- S la chaîne « b »
- S2 la chaîne « ra »
- I la valeur 24931
Pourquoi ?
- Parce que B est un byte, valeur comprise de 0 à 255, codé sur 1 octet donc GET qui sert à PRENDRE (lire quoi) va à l'octet 1 (comme indiqué, matter la ligne.) et va récupérer un BYTE, donc A de Abracadabra étant codé en ASCII par 65 et donc inscrit physiquement comme tel, B va prendre 65 comme valeur
- S aura « b » car S est une chaîne d'un octet, et qu'à l'octet 2 la chaîne d'un octet lisible est un « b »
- S2 aura « ra » car c'est une chaîne de 2 octets et qu'à l'octet 3, la chaîne de 2 octets lisible est « ra ». MAIS AU FAIT POURQUOI CETTE FOIS 3 N'EST PAS INSCRIT COMME L'ETAIS 1 ET 2 APRES LE NUMERO DE FICHIER ??? : parce que c'est pour vous montrer qu'en omettant ce paramètre GET va lire directement à l'endroit où est le pointeur. Rappelez-vous ; le pointeur avance à chaque opération I/O sur le fichier, or comme on vient tout juste précédemment de lire en 2, alors maintenant il est en 3, donc la lecture s'opérera bien ici, et après donc il sera où ??? Sur 5 !!! Bien joué ! (ben oui, il a avancé de 2 car S2 fait 2)
- Enfin, et là seul les plus malins auront compris (dsl pour les autres ;p ), I qui est un INTEGER contient bien 24931 :  « ca » est la chaîne qui est pointé puisque ce type de donnée tient sur 2 octets (soit de -32768 à 32767), mais on s'en fiche de la chaîne car I est un INTEGER, donc en réalité ce qui est pointé c'est les codes ASCII 63 et 61, soit codé en INTEGER 24931 (sortez vos cours d'architecture matériel ! moi j'explique pas le calcul. ;)  )

Voilà la lecture binaire ! Alors c'était pas si compliqué que ça hein ? L'écriture ? Ba c'est quasi pareil sauf qu'on remplace GET par PUT #Fichier, Octet, Variable

Il y a aussi un autre moyen de placer son Pointeur où on veut : c'est SEEK :

§ Seek #Num, 124
§ V = Seek(Num)

Ca va aller poser le curseur à l'octet 124 du fichier Num et ensuite je vous montre comment récupérer la position du pointeur : ici V va prendre 124 (mais si, réfléchissez.)




Le Random :

Un exemple tout de suite, et détaillé, s'il vous plait !!! :

Création d'un type dans un module (volontairement dépouillé pour l'exemple) puis d'un tableau de ce type
§ TYPE Chien
§ Marque as String * 20
§ Prix as Integer
§ END TYPE
§ Public TblDeChien(1 to 20) As Chien

En supposant que votre prog' ait rempli des données dans le tableau, et que vous aimeriez les sauver pour une prochaine utilisation, voilà 2 procédures :

§ Sub SauveMesChiens()
§ Dim i as Byte
§ Dim Num as Integer : Num=Freefile 'deux trucs séparés par « : » = 2 lignes
§ Open MonFichier For Random as #Num
§ For i=1 to 20
§ PUT #Num, , TblDeChien(i)
§ Next i
§ Msgbox « Mes chiens sont sauvegardés dans mon disque. J'espère qu'ils seront sage. »
§ End Sub

§ Sub VaChercherMesChiens()
§ Dim i as Byte
§ Dim Num as Integer : Num=Freefile
§ Open MonFichier For Random as #Num
§ For i=1 to 20
§ GET #Num, , TblDeChien(i)
§ Next i
§ Msgbox « Mes chiens sont récupérés. Ils sont comme avant ! cool »
§ End Sub

Voilà, j'en dirais pas plus la dessus car ça me paraît clair ! Non ? Ba tant pis. Relisez qu'est-ce que vous voulez que je vous dise ?




Bon, approfondissons nos connaissances : un peu plus de OUTPUT / APPEND ça vous tente ?

§ OPEN « c:\point.txt » FOR OUTPUT AS #Num
§ PRINT #Num, « Maintenant j'utilise PRINT pour écrire disdonc ! »
§ Close #Num

Et mon fichier ne va contenir QUE la chaîne sans les guillemets.
La prochaine écriture PRINT derrière celle-là aurait d'abord sauté une ligne puis inscrit son bidule. Résultat : pour lire on peut utiliser un code du genre :

§ Dim Ch as string
§ Open « C:\point.txt » for Input as #Num
§ Do
§ Line Input #Num, Ch
§ Msgbox Ch
§ Loop Until EOF(1)
§ Close #Num

Et là en gros, on lit une ligne et on la place dans Ch, Ch apparaît à l'écran, on lit la suivante et ainsi de suite jusqu'à EOF(1) = TRUE c'est à dire END OF FILE IS TRUE donc Fin de fichier atteint (EOF(1)=TRUE c'est pareil que mettre EOF(1) : dans un test, on peut zapper un =TRUE ça revient au même).

Maintenant essayer un truc du genre :

§ Dim i as byte
§ OPEN « c:\point.txt » FOR OUTPUT AS #Num
§ For i=65 to 70
§ PRINT #Num, Chr(i) ;
§ Next i
§ Close #Num

ATTENTION : N'oubliez pas mon POINT VIRGULE après le Chr(i) !
Après exécution, le fichier va contenir :

ABCDEF

Parce que Chr renvoie le caractère correspondant au code ASCII passé en argument et que le petit « ; » tout con tout bête empêche INPUT d'insérer un retour chariot (traduisible et lisible comme une Chr(13) & Chr(10) ou tout bonnement sous VB la constante VBcrlf ), et parce que je le vaut bien. heu non.




Alors évidemment, dans tout ça on a fait que survoler les I/O mais c'est déjà vrmt pas mal si vous arrangez tout ça à votre sauce !
Un dernier exemple INUTILE pour sa fonction (parce que c'est évidemment better d'utiliser les fonctions faites pour ça mais aussi parce que ya sinon des moyens plus fast de le faire en manuel !!! ) mais BON pour son code et la compréhension qu'il donne !!! :

§ Sub CopieTropConne()
§ Dim C as String * 1
§ Dim F1, F2 As Integer
§
§ F1=FreeFile
§ Open  Fichier1 for Binary as #F1
§
§ F2=FreeFile
§ Open Fichier2 for Output as #F2
§
§ Do
§ GET #F1 , , C
§ If  EOF(F1)  Then Exit Do
§ Print #F2 , C ;
§ Loop
§
§ Close
§ End Sub


Si vous avez VRMT des PB, persévérez !!!     ;p
Au pire sinon tentez un msg, je répond assez svt, si j'en ai le temps et l'envie.
PS : ce tut' n'est pas exempt de bug je pense car je l'ai pas testé, je l'ai fait fissa à la demande comme bcp d'autres de mes sources.

@+ Les Vbistes !!!

Source

  • Cétait Long ?
  • Cétait Null ?
  • Un ptit comment cest toujours bon, pour gueuler ou en cas de pépin, quimporte ca fait plaisir ... @+
Cétait Long ?
Cétait Null ?
Un ptit comment cest toujours bon, pour gueuler ou en cas de pépin, quimporte ca fait plaisir ... @+

 Conclusion

(ps : évitez qd mm les sacages méchants & mauvais, je sais j'ai fait vite fait...   ;O )

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • tutfichier.docTélécharger ce fichier [Réservé aux membres club]53 248 octets

Télécharger le zip


 Sources du même auteur

Source .NET (Dotnet) [.NETV2] CLASSCOM - CLASSE DE COMMUNICATION EN RÉSEAU SIMPLI...
Source avec Zip Source avec une capture COMPARAISON ENTRE 2 CHAINES, RETOURNE UN POURCENTAGE DE RESS...
Source avec Zip CLASS POUR TRANSFERER DES FICHIERS VIA WINSOCK AVEC CONTROLE...
Source avec Zip Source avec une capture CLASS POUR GENERER DYNAMIQUEMENT DES CONTROLES DANS UN CONTE...
Source avec Zip MOTEUR DE SERVEUR FTP OBJET ET FONCTIONNEL TESTE SOUS FILEZI...

 Sources de la même categorie

Source avec Zip Source avec une capture APPLICATION WEB POUR LA GESTION D'UNE AGENCE DE LOCATION DE ... par rachid1449
Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS par Renfield
Source avec Zip Source .NET (Dotnet) DLL POUR K8055 (VM110) UTILISATION SIMPLIFIÉE DE CETTE CARTE par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION MULTICARTES K8055 (CODE TUTO) par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) SPAM ANTI SPAM par bouv

Commentaires et avis

Commentaire de tis01 le 18/09/2002 10:18:14

bah moi j'ai appris plein de choses en lisant ce tut' donc merci

Commentaire de nickadele le 18/09/2002 10:57:33 administrateur CS

Ca fait du bien de se rafraichir la mémoire, en plus ta façon de présenter les choses est cool.
Merci

Commentaire de celiphane le 18/09/2002 21:02:52

Waow, que du bonheur ! (pis la note !!! pfiou ... 10 !!!)
Merci les gars les filles !
Tchao

Commentaire de log2002 le 25/04/2003 13:16:01

super merci d'avoir pris le temps d'écrire touc ça!
@+ pour de nvelles astuces

Commentaire de galaad2 le 23/05/2003 09:16:52

Pffff, j'en ai pris plein les mirettes... j'aurais du le passer sous word, le texte est tout petit sur mon écran...
En tout cas chapeau bas, j'y vois beaucoup plus clair. De ce replonger dans ce style de choses ça me rapelle mes cours!!!

Commentaire de celiphane le 24/05/2003 00:20:02

Et bien, merci !

Commentaire de tiboos le 23/07/2003 12:20:57

le tutorial est tres bien, mais peux tu expliquer l interet du  "file system object" par rapport a ces methodes (car bocoup plus simple et rapide (celles du tutorial))

Commentaire de celiphane le 23/07/2003 14:18:18

tiboos,
j'avoue ne pas m'être bcp exercé sur le file system object (parlons du fso). En effet, j'ai débuté la prog sur QB très jeune, où les cmds de ce tutorial étaient les seuls disponibles. Lorsque j'ai "évolué" vers VisualB,
j'ai naturellement commencé à dvp avec ces fonctions, comme tous dvpeurs commencent par taper du code VB6 sous VB.NET.
Voilà pour la petite histoire.
Sinon, le FSO est comme son nom l'indique un objet qui permet surement bcp de chose, en + des fonctions susprésentées. Je ne saurai en tout cas pas te dire s'il opère plus rapidement, l'accès disque restant un accès disque. De plus, je ne sais pas non plus s'il nous oblige à l'empaqueter dans nos install, gage de lourdeur.
Donc je ne serai ni fan ni mauvaise langue, juste un non connaisseur du propos.

@+
Celiphane

Commentaire de celiphane le 19/11/2003 18:17:03

pour galaad2 (voir commentaire plus haut), je viens de me décider à ajouter un zip : le même texte mais formatté sous word, avec des couleurs ;)

@+
Celiphane

Commentaire de Fraggy le 28/11/2003 02:42:21

Moi j'ai mis 10/10 car j'ai démarer VB il y a 6 mois et ce genre de tutoriel est très intéressant. Il est bien expliqué, il y a des exemples tout prêt, qui nous permette grace au "break point" de comprendre comment cela fonctionne point par point.

En plus il y a un ZIP avec un fichier au format Word. Que demander de plus ? (Faites pas comme moi, j'avais pas vu le zip, j'ai copier le texte ci-dessus et j'ai passé du temp à le re-formater pour que ce soit lisible, près avoir sauvé le tutos, je vois le zip lolll)

Celiphane ==> MERCI !!!

Commentaire de celiphane le 28/11/2003 09:51:47

Fraggy ==> DE RIEN !!!
;)

@+
Celiphane

Commentaire de ssebounet le 17/05/2004 11:36:48

bijour a tous
en fait moi je souhaite utiliser la fonction write pour ecrire dans un ficher. comment fait on pour ne pas avoir de retour chariot automatique?????
merci d avance.
seb

Commentaire de celiphane le 17/05/2004 14:25:25

write n'est pas fait pour ne pas avoir de retour chariot, write permet d'écrire des données dans un format récupérable type pour type avec input.

pour écrire "purement", utilise print, avec si tu le souhaites un ; en fin de ligne pour empêcher le retour chariot.

bon en fait je pense que tu devrais RELIRE le tutorial.

@+
Celiphane

Commentaire de ssebounet le 17/05/2004 17:27:40

non en fait je souhaite ecrire avec un write car mon but est d ecrire dans un flux. dans un stream.

et il n y a que write qui le permet.

mon projet etant de recuperer le flux entre un service web et un client. mon but est de compresser les echange avec une fonction qui recupere le flux d entrer, qui decompresse et qui ensuite renvois les bonnes valeurs dans le flux entrant.

Voila pourquoi je souhaite utiliser write et pas input!!!!

@+
seb

Commentaire de Yliugaome le 28/05/2004 11:24:40

Un tuto bien sympa jtrouve, merci ça m'a appris pas mal de choses ;)

Commentaire de scoder le 08/06/2004 09:47:59

après le super tut' sur winsock voilà un autre tut' très instructif.
Merci Celiphane ;)

Commentaire de ek20imane le 10/06/2004 02:20:14

oui c sure, ceci, si c pas nouveau et on apprend qlqch chose, bein c sur ça nous aide à faire le refresh de la mémo;)

merci comme même, de temps à autre des trucs comme ça bein super:)

Commentaire de Fullnet Software le 19/08/2004 16:04:04

Vraiment merci!!, ya c'est petite choses que je n'avais pas compris et que ton tutoriel m'a ouvert les yeux, chapeau!!!


(merci de prendre du temps pour ecrire des tutoriels pourles nuls comme moi...)

Commentaire de Crash_overide12 le 17/09/2004 15:49:48

Celiphane c décider je t'aime !!!!
Putain sa fait plus de 10h ke je boss non-stop sur un prog (je sais d fois fo ce reposer, mais bon quand on n'aime on ne compte pas.) et la jme suis dis tiens sa fais chier ya juste un truc ki m'enerve c kan je save, and kaprè je open dans une textbox a la fin sa fou un truc chelou, comm si yavais un code qui traine... EH WI cété juste ce putain de ";" a la fin de PRINT, je l'avais Krémen ZAPPER, donc je te remercie pour tous !!!! et je te mais 10/10 a ton tut' il est bien pour les débutant, et RAFRAICHIE la mémoire au "VIEUX" ! ;-)

Commentaire de pattenrond le 11/11/2004 23:28:54

Bonjour à tous

Enfin un tutoriel sur le gestion des fichiers sans les API. 10/10.

Commentaire de futurBosseur le 06/09/2005 09:30:45

Bonjour,

Bien, bon tuto, pratique... mais malheureusement je n'y ai pas trouvé la réponse a ma question.
En effet je cherche a savoir comment lire mon fichier situé sur un serveur web. Dont l'adresse serait du style : http://www.monsite.com/monfichier.txt.
J'ai essayé avec les fso et avec les méthode classique d'open.. rien n'y fait il me dit qu'il ne me trouve pas le fichier, pourtant il existe et il est lisible (permission).
Des idées ?

Commentaire de celiphane le 06/09/2005 10:28:48

Salut,

Les méthodes de lectures de fichiers de VB, y compris les FSO, sont faits pour lire sur le disque dur, ou assimilé (chemin réseaux)... mais en aucun cas via le procotole HTTP, ni FTP ou autre...

Plusieurs solutions s'offrent à toi :
- faire une routine intermédiaire qui télécharge le fichier demandé avec de l'ouvrir en local (recommandé)
- utilisez ce code qui "hack" les fonctions naturelles de VB pour permettre un open http : http://www.vbfrance.com/code.aspx?ID=25953 (bidouille impressionnante mais non recommandable)
- utilisez un client WebDrive, qui transforme un chemin FTP en chemin réseau (non recommandé car oblige le programme à être dépendant d'un autre...)

@+
Celiphane

Commentaire de sanyohan13 le 29/05/2006 11:51:12

très bon tut, j'avoue ne pas avoir tt compris car je débute et j'aimerai savoir comment faire por sauvegarder une richtextbox dans un ficier .xls
10/10 et merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales