OVH Cloud OVH Cloud

fichier texte.

14 réponses
Avatar
ephores
Bonjour ,
je voudrais faire un simple petit agenda. J'ai un fichier texte de ce type :

"
10/09/2004
anniversaire
12/09/2004
reunion
bureau
rendez-vous
13/09/2004
restaurant

"

je voudrais pouvoir lire les info d'une date precise et afficher dans une
textbox.
aussi si je modifie le contenu du 12 septembre, qu'il supprime et remplace
par le nouveau contenu.

Merci les pro !

10 réponses

1 2
Avatar
Jean-Marc
"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
Bonjour ,
je voudrais faire un simple petit agenda. J'ai un fichier texte de ce type


:

"
10/09/2004
anniversaire
12/09/2004
reunion
bureau
rendez-vous
13/09/2004
restaurant

"



Hello,
il faut formaliser un tout petit peu plus le format du fichier texte: Est ce
que le format est toujours: une date, suivi d'infos, une info par ligne, la
fin des données pour une date étant soit la fin du fichier soit une nouvelle
date?

Si oui, alors ce n'est pas très compliqué.

On lit le fichier, ligne par ligne; si c'est une date, alors on crée une
nouvelle entrée date,
sinon, on stocke les infos comme apprtenant à la dernière date.
On fera pour cela une structure de données assez simple, du genre
Type EntreeCalendrier
date as String
infosJour(50) as String ' selon le nombre de trucs à stocker pour une
journée
End Type

et une bon tableau de tout ça:

Dim Calendrier(1000) as EntreeCAlendrier
' on peut rendre tout ça dynamique, mais ce n'est pas le but semble il

On stocke le contenu de tout le fichier en mémoire.

Exemple d'utilisation:

Pour l'affichage, on affiche par exemple dans une list box les entrées
dates, puis dans un texte box multilignes les infos pour la date
sélectionnée.
On rafraichit juste le textbox sur l'évènement double clic de la liste, par
exemple.

Si l'utilisateur change une info, on stocke tout ça au bon endroit dans le
tableau.

Puis à la fermeture du programme, on écrase le fichier texte qu'on remplace
par le nouveau, avec le contenu du tableau.
On peu aussi aisément rajouter une entrée dans le tableau.

Cela te semble t'il suffisant pour démarrer?

--
Jean-marc
Avatar
ephores
Merci , je vais essayer de me debrouiller avec ça, mais ça risque d'être
long si il faut charcher tous l'agenda en mémoire, car dans mon exemple il y
a trois dates et deux lignes par date, mais en réel....
existe t il une fonction du style Instr, où on lit le fichier et on charge
en memoire ce qu'il y a entre deux caractere du style "*"
ansi je ferai :

dans mon fichier texte :

10/09/2004
*anniversaire*
12/09/2004
*reunion
bureau
rendez-vous*
13/09/2004
*restaurant*

"
dans ma fonction Open monfichier texte
while oef(1)... etc
if ligneÚte then 'affiche dans une textbox ce qu'il y a entre les 2 *

Merci !


"Jean-Marc" a écrit dans le message de
news:41449267$0$12175$
"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
> Bonjour ,
> je voudrais faire un simple petit agenda. J'ai un fichier texte de ce


type
:
>
> "
> 10/09/2004
> anniversaire
> 12/09/2004
> reunion
> bureau
> rendez-vous
> 13/09/2004
> restaurant
>
> "

Hello,
il faut formaliser un tout petit peu plus le format du fichier texte: Est


ce
que le format est toujours: une date, suivi d'infos, une info par ligne,


la
fin des données pour une date étant soit la fin du fichier soit une


nouvelle
date?

Si oui, alors ce n'est pas très compliqué.

On lit le fichier, ligne par ligne; si c'est une date, alors on crée une
nouvelle entrée date,
sinon, on stocke les infos comme apprtenant à la dernière date.
On fera pour cela une structure de données assez simple, du genre
Type EntreeCalendrier
date as String
infosJour(50) as String ' selon le nombre de trucs à stocker pour une
journée
End Type

et une bon tableau de tout ça:

Dim Calendrier(1000) as EntreeCAlendrier
' on peut rendre tout ça dynamique, mais ce n'est pas le but semble il

On stocke le contenu de tout le fichier en mémoire.

Exemple d'utilisation:

Pour l'affichage, on affiche par exemple dans une list box les entrées
dates, puis dans un texte box multilignes les infos pour la date
sélectionnée.
On rafraichit juste le textbox sur l'évènement double clic de la liste,


par
exemple.

Si l'utilisateur change une info, on stocke tout ça au bon endroit dans le
tableau.

Puis à la fermeture du programme, on écrase le fichier texte qu'on


remplace
par le nouveau, avec le contenu du tableau.
On peu aussi aisément rajouter une entrée dans le tableau.

Cela te semble t'il suffisant pour démarrer?

--
Jean-marc





Avatar
Jean-Marc
"ephores" <ephores(at)free.fr> a écrit dans le message de
news:OwZuH%
Merci , je vais essayer de me debrouiller avec ça, mais ça risque d'être
long si il faut charcher tous l'agenda en mémoire, car dans mon exemple il


y
a trois dates et deux lignes par date, mais en réel....
existe t il une fonction du style Instr, où on lit le fichier et on charge
en memoire ce qu'il y a entre deux caractere du style "*"
ansi je ferai :

dans mon fichier texte :

10/09/2004
*anniversaire*
12/09/2004
*reunion
bureau
rendez-vous*
13/09/2004
*restaurant*

"
dans ma fonction Open monfichier texte
while oef(1)... etc
if ligneÚte then 'affiche dans une textbox ce qu'il y a entre les 2 *

Merci !



Bien sur, il y a des dizaines de façon de faire ça. je ne connais pas ton
niveau en prog.

En fait le chargement en mémoire ne sera jamais long, car tu n'as jamais un
agenda sur des dizaines d'années, ni avec des centaines de taches par jours.

Il n'y a pas de fonction pour lire dans le fichier avec des instr, il faut
de toute façon lire tout le contenu du fichier, ou alors tu fais un systeme
qui accède sans arret au fichier et ce sera la galère, en particulier quand
tu voudras supprimer des record.

J'ai mis ici une implémentation possible (code source + .vbp):
http://users.skynet.be/candide/jmn/divers/agenda.htm
(c'est juste un exemple, hein!)

--
Jean-marc
Avatar
Jean-Marc
"ephores" <ephores(at)free.fr> a écrit dans le message de
news:OwZuH%
Merci , je vais essayer de me debrouiller avec ça, mais ça risque d'être
long si il faut charcher tous l'agenda en mémoire, car dans mon exemple il


y
a trois dates et deux lignes par date, mais en réel....
existe t il une fonction du style Instr, où on lit le fichier et on charge
en memoire ce qu'il y a entre deux caractere du style "*"
ansi je ferai :

dans mon fichier texte :

10/09/2004
*anniversaire*
12/09/2004
*reunion
bureau
rendez-vous*
13/09/2004
*restaurant*

"
dans ma fonction Open monfichier texte
while oef(1)... etc
if ligneÚte then 'affiche dans une textbox ce qu'il y a entre les 2 *



---

Bien sur, il y a des dizaines de façon de faire ça. je ne connais pas
ton niveau en prog.

En fait le chargement en mémoire ne sera jamais long, car tu n'as
jamais un agenda sur des dizaines d'années, ni avec des centaines de
taches par jours.

en mettant les choses au pire, tu stockes un agenda sur 3 ans = 1095 jours
et comme et es surbooké, tu as 20 taches par jour, tous les jours: 21900
records.

C'est négligeable, c'est vraiment rien du tout pour une machine moderne!

Il n'y a pas de fonction pour lire dans le fichier avec des instr, il
faut de toute façon lire tout le contenu du fichier, ou alors tu fais
un systeme qui accède sans arret au fichier et ce sera la galère, en
particulier quand tu voudras supprimer des record.

J'ai mis ici une implémentation possible (code source + .vbp):
http://users.skynet.be/candide/jmn/divers/agenda.htm
(c'est juste un exemple, hein!)

Soyons clair: pour faire un mini truc perso, ou un exercice scolaire, c'est
très bien.
Dans la réalité, sauf contraintes particulières, on ne ferait pas comme ça,
mais c'est
une autre question.


--
Jean-marc
Avatar
houbahop2003
Bonjour,
C'est en me faisant faire un programme de ce genre la qu'un de mes maitres
de stage m'a fait découvrir les bases de données.

Tu vas faire ton appli avec un fichier texte, puis quand ça marchera bien,
tu va dire, tiens, et si je rajouttais telle donnée, et telle donnée, et
encore telle relation entre les personnes... etc. Et tu te rendra compte par
toi meme que ça va devenir de plus en plus complexe à gérer avec des
fichiers, jusqu'au point ou tu sera bloqué.

Et la il faut tout recommencer en utilisant une base de donnée qui est
adaptée pour ce genre d'applis.
L'idéal pour débuter, c'est une base access je crois ( *.mdb) .
tu la cree soit avec Vb ou bien avec l'éditeur graphique d'access, puis tu
l'exploite en VB avec la technologie ADO.

Le mieux c'est de te renseigner sur le net, ou bien d'acheter un petit livre
de poche VB qui contient les explications.

Bonne chance !


"ephores" <ephores(at)free.fr> a écrit dans le message de news:
OwZuH#
Merci , je vais essayer de me debrouiller avec ça, mais ça risque d'être
long si il faut charcher tous l'agenda en mémoire, car dans mon exemple il


y
a trois dates et deux lignes par date, mais en réel....
existe t il une fonction du style Instr, où on lit le fichier et on charge
en memoire ce qu'il y a entre deux caractere du style "*"
ansi je ferai :

dans mon fichier texte :

10/09/2004
*anniversaire*
12/09/2004
*reunion
bureau
rendez-vous*
13/09/2004
*restaurant*

"
dans ma fonction Open monfichier texte
while oef(1)... etc
if ligneÚte then 'affiche dans une textbox ce qu'il y a entre les 2 *

Merci !


"Jean-Marc" a écrit dans le message de
news:41449267$0$12175$
> "ephores" <ephores(at)free.fr> a écrit dans le message de
> news:
> > Bonjour ,
> > je voudrais faire un simple petit agenda. J'ai un fichier texte de ce
type
> :
> >
> > "
> > 10/09/2004
> > anniversaire
> > 12/09/2004
> > reunion
> > bureau
> > rendez-vous
> > 13/09/2004
> > restaurant
> >
> > "
>
> Hello,
> il faut formaliser un tout petit peu plus le format du fichier texte:


Est
ce
> que le format est toujours: une date, suivi d'infos, une info par ligne,
la
> fin des données pour une date étant soit la fin du fichier soit une
nouvelle
> date?
>
> Si oui, alors ce n'est pas très compliqué.
>
> On lit le fichier, ligne par ligne; si c'est une date, alors on crée une
> nouvelle entrée date,
> sinon, on stocke les infos comme apprtenant à la dernière date.
> On fera pour cela une structure de données assez simple, du genre
> Type EntreeCalendrier
> date as String
> infosJour(50) as String ' selon le nombre de trucs à stocker pour


une
> journée
> End Type
>
> et une bon tableau de tout ça:
>
> Dim Calendrier(1000) as EntreeCAlendrier
> ' on peut rendre tout ça dynamique, mais ce n'est pas le but semble il
>
> On stocke le contenu de tout le fichier en mémoire.
>
> Exemple d'utilisation:
>
> Pour l'affichage, on affiche par exemple dans une list box les entrées
> dates, puis dans un texte box multilignes les infos pour la date
> sélectionnée.
> On rafraichit juste le textbox sur l'évènement double clic de la liste,
par
> exemple.
>
> Si l'utilisateur change une info, on stocke tout ça au bon endroit dans


le
> tableau.
>
> Puis à la fermeture du programme, on écrase le fichier texte qu'on
remplace
> par le nouveau, avec le contenu du tableau.
> On peu aussi aisément rajouter une entrée dans le tableau.
>
> Cela te semble t'il suffisant pour démarrer?
>
> --
> Jean-marc
>
>
>




Avatar
ephores
Merci JeanMarc, ton aide ma été précieuse, et merci pour l'exemple, c'est
exactement ce que je cherchais.
t'ee le meilleur. !


"Jean-Marc" a écrit dans le message de
news:4144a9ac$0$12157$
"ephores" <ephores(at)free.fr> a écrit dans le message de
news:OwZuH%
> Merci , je vais essayer de me debrouiller avec ça, mais ça risque d'être
> long si il faut charcher tous l'agenda en mémoire, car dans mon exemple


il
y
> a trois dates et deux lignes par date, mais en réel....
> existe t il une fonction du style Instr, où on lit le fichier et on


charge
> en memoire ce qu'il y a entre deux caractere du style "*"
> ansi je ferai :
>
> dans mon fichier texte :
>
> 10/09/2004
> *anniversaire*
> 12/09/2004
> *reunion
> bureau
> rendez-vous*
> 13/09/2004
> *restaurant*
>
> "
> dans ma fonction Open monfichier texte
> while oef(1)... etc
> if ligneÚte then 'affiche dans une textbox ce qu'il y a entre les 2 *

---

Bien sur, il y a des dizaines de façon de faire ça. je ne connais pas
ton niveau en prog.

En fait le chargement en mémoire ne sera jamais long, car tu n'as
jamais un agenda sur des dizaines d'années, ni avec des centaines de
taches par jours.

en mettant les choses au pire, tu stockes un agenda sur 3 ans = 1095 jours
et comme et es surbooké, tu as 20 taches par jour, tous les jours: 21900
records.

C'est négligeable, c'est vraiment rien du tout pour une machine moderne!

Il n'y a pas de fonction pour lire dans le fichier avec des instr, il
faut de toute façon lire tout le contenu du fichier, ou alors tu fais
un systeme qui accède sans arret au fichier et ce sera la galère, en
particulier quand tu voudras supprimer des record.

J'ai mis ici une implémentation possible (code source + .vbp):
http://users.skynet.be/candide/jmn/divers/agenda.htm
(c'est juste un exemple, hein!)

Soyons clair: pour faire un mini truc perso, ou un exercice scolaire,


c'est
très bien.
Dans la réalité, sauf contraintes particulières, on ne ferait pas comme


ça,
mais c'est
une autre question.


--
Jean-marc





Avatar
ephores
oui c'est vrai, mais vous l'aurez compris, j'en suis pas la
malheureusement....
mais une question : faut il installer acces pour faire une base de données
avec VB ?
n'est il pas plus simple de programmer avec Windev dès qu'on touche aux
bases de données ?

Merci de m' m'eclairer.

"houbahop2003" a écrit dans le message de
news:ci2a96$ad3$
Bonjour,
C'est en me faisant faire un programme de ce genre la qu'un de mes maitres
de stage m'a fait découvrir les bases de données.

Tu vas faire ton appli avec un fichier texte, puis quand ça marchera bien,
tu va dire, tiens, et si je rajouttais telle donnée, et telle donnée, et
encore telle relation entre les personnes... etc. Et tu te rendra compte


par
toi meme que ça va devenir de plus en plus complexe à gérer avec des
fichiers, jusqu'au point ou tu sera bloqué.

Et la il faut tout recommencer en utilisant une base de donnée qui est
adaptée pour ce genre d'applis.
L'idéal pour débuter, c'est une base access je crois ( *.mdb) .
tu la cree soit avec Vb ou bien avec l'éditeur graphique d'access, puis tu
l'exploite en VB avec la technologie ADO.

Le mieux c'est de te renseigner sur le net, ou bien d'acheter un petit


livre
de poche VB qui contient les explications.

Bonne chance !


"ephores" <ephores(at)free.fr> a écrit dans le message de news:
OwZuH#
> Merci , je vais essayer de me debrouiller avec ça, mais ça risque d'être
> long si il faut charcher tous l'agenda en mémoire, car dans mon exemple


il
y
> a trois dates et deux lignes par date, mais en réel....
> existe t il une fonction du style Instr, où on lit le fichier et on


charge
> en memoire ce qu'il y a entre deux caractere du style "*"
> ansi je ferai :
>
> dans mon fichier texte :
>
> 10/09/2004
> *anniversaire*
> 12/09/2004
> *reunion
> bureau
> rendez-vous*
> 13/09/2004
> *restaurant*
>
> "
> dans ma fonction Open monfichier texte
> while oef(1)... etc
> if ligneÚte then 'affiche dans une textbox ce qu'il y a entre les 2 *
>
> Merci !
>
>
> "Jean-Marc" a écrit dans le message de
> news:41449267$0$12175$
> > "ephores" <ephores(at)free.fr> a écrit dans le message de
> > news:
> > > Bonjour ,
> > > je voudrais faire un simple petit agenda. J'ai un fichier texte de


ce
> type
> > :
> > >
> > > "
> > > 10/09/2004
> > > anniversaire
> > > 12/09/2004
> > > reunion
> > > bureau
> > > rendez-vous
> > > 13/09/2004
> > > restaurant
> > >
> > > "
> >
> > Hello,
> > il faut formaliser un tout petit peu plus le format du fichier texte:
Est
> ce
> > que le format est toujours: une date, suivi d'infos, une info par


ligne,
> la
> > fin des données pour une date étant soit la fin du fichier soit une
> nouvelle
> > date?
> >
> > Si oui, alors ce n'est pas très compliqué.
> >
> > On lit le fichier, ligne par ligne; si c'est une date, alors on crée


une
> > nouvelle entrée date,
> > sinon, on stocke les infos comme apprtenant à la dernière date.
> > On fera pour cela une structure de données assez simple, du genre
> > Type EntreeCalendrier
> > date as String
> > infosJour(50) as String ' selon le nombre de trucs à stocker pour
une
> > journée
> > End Type
> >
> > et une bon tableau de tout ça:
> >
> > Dim Calendrier(1000) as EntreeCAlendrier
> > ' on peut rendre tout ça dynamique, mais ce n'est pas le but semble il
> >
> > On stocke le contenu de tout le fichier en mémoire.
> >
> > Exemple d'utilisation:
> >
> > Pour l'affichage, on affiche par exemple dans une list box les entrées
> > dates, puis dans un texte box multilignes les infos pour la date
> > sélectionnée.
> > On rafraichit juste le textbox sur l'évènement double clic de la


liste,
> par
> > exemple.
> >
> > Si l'utilisateur change une info, on stocke tout ça au bon endroit


dans
le
> > tableau.
> >
> > Puis à la fermeture du programme, on écrase le fichier texte qu'on
> remplace
> > par le nouveau, avec le contenu du tableau.
> > On peu aussi aisément rajouter une entrée dans le tableau.
> >
> > Cela te semble t'il suffisant pour démarrer?
> >
> > --
> > Jean-marc
> >
> >
> >
>
>




Avatar
le_troll
Bonsoir, j'ai lu un peu tout le fil, j'ai déjà fait des agendas,
plusieurs observations qui n'engagent que moi:

D'une part, je crois qu'il ne faut pas prévoir de taille fixe, car tu
peux un jour vouloir dépasser la taille prévue, donc il faut simplement un
mot clef sur lequel chercher, mais la date n'est pas suffisante, car tu peux
toi-même saisir une date, et alors là le programme ne saura plus comment
faire, par exp
le 10/10/4 du écris rdv au 11/10/4
Le programme ne va pas savoir quelle est la date qui indique le début de ta
data..
Il faut mettre un signe spécial de début et de fin d'enregistrement, c'est
bien mieux, et si jamais l'utilisateur saisit ce signe, tu renvoies une
erreur "mot réservé", par exp
$D$...la date...<chr13>+<chr10>
.....
$F$<chr13>+<chr10>
Là tu sais que tu dois chercher la date se situant juste après $D$ jusqu'à
$F$ inclusivement..., puis à l'affichage évidemment tu enlèves ces
marques...

Ensuite, pour la modifications ou suppression, en dupliquant le fichier
en *.tmp, tu recopies tout sauf la date à modifier que tu changes, ou la
date à supprimer que tu saute, puis tu tries...

Pour terminer, je ne suis pas pour les BDD, un programme doit être
autonome, c'est source de plantage dans le futur, en plus ça t'enlève des
manipulation intéressantes à faire, on doit être capable de tout faire par
fichier sois-même...

Si tu veux les sources de mon agenda, tu me dis (mais il est assez
étoffé, il calcule la position de la lune, etc)...

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !


"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
Bonjour ,
je voudrais faire un simple petit agenda. J'ai un fichier texte de ce type


:

"
10/09/2004
anniversaire
12/09/2004
reunion
bureau
rendez-vous
13/09/2004
restaurant

"

je voudrais pouvoir lire les info d'une date precise et afficher dans une
textbox.
aussi si je modifie le contenu du 12 septembre, qu'il supprime et remplace
par le nouveau contenu.

Merci les pro !




Avatar
geo
Si tu veux persister dans les fichiers textes, il y a les bases de
donnee a acces direct.
...une survivance des GWbasic et Basica :-) qui fonctionnent toujours
sous VB.

Type Record ' Désigne le type défini par l'utilisateur.
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record ' Déclare la variable.
Open "FICHTEST" For Random As #1 Len = Len(MyRecord)
' Ferme le fichier avant de l'ouvrir à nouveau dans un autre mode.
Close #1

Mais a mon avis tu as interet a te mettre a ADO , c'est quand meme + simple


Géo
Avatar
houbahop2003
"le_troll" a écrit dans le message de news:

Bonsoir, j'ai lu un peu tout le fil, j'ai déjà fait des agendas,
plusieurs observations qui n'engagent que moi:

D'une part, je crois qu'il ne faut pas prévoir de taille fixe, car tu
peux un jour vouloir dépasser la taille prévue, donc il faut simplement un
mot clef sur lequel chercher, mais la date n'est pas suffisante, car tu


peux
toi-même saisir une date, et alors là le programme ne saura plus comment
faire, par exp
le 10/10/4 du écris rdv au 11/10/4
Le programme ne va pas savoir quelle est la date qui indique le début de


ta
data..
Il faut mettre un signe spécial de début et de fin d'enregistrement,


c'est
bien mieux, et si jamais l'utilisateur saisit ce signe, tu renvoies une
erreur "mot réservé", par exp
$D$...la date...<chr13>+<chr10>
.....
$F$<chr13>+<chr10>
Là tu sais que tu dois chercher la date se situant juste après $D$ jusqu'à
$F$ inclusivement..., puis à l'affichage évidemment tu enlèves ces
marques...




Et pourquoi ne pas mettre un caractére ascii non affichable? (autre que
CRLF,TAB)
Au moins l'utilisateur ne le saisirait pas au clavier (on peut toujours
faire le test caractére réservé au cas ou il tenterai une combinaison
ALT+code)

Ensuite, pour la modifications ou suppression, en dupliquant le


fichier
en *.tmp, tu recopies tout sauf la date à modifier que tu changes, ou la
date à supprimer que tu saute, puis tu tries...

Pour terminer, je ne suis pas pour les BDD,


Moi si, de nos jours, on trouve des BDD partout, dans tous les systemes
d'information, s'en priver serait dommage
un programme doit être
autonome,


En incluant la bibliothéque d'accés au données, le programme ne sera pas
moins autonome qu'avant.

c'est source de plantage dans le futur,


Ah, parce que triturer un fichier texte dans tous les sens ca n'est pas
source de complexité et donc de plantage ?

en plus ça t'enlève des
manipulation intéressantes à faire, on doit être capable de tout faire par
fichier sois-même...


je suis ok ,c'est un exercice intéréssant...

Ce que je recommande, c'est de faire le test d'un fichier texte, et de
tenter une BDD aprés.
Dans ce cas ci, c'est un exemple simple, donc gérable avec des fichiers,
mais si un jour le programmeur veut faire plus complexe,
Il sera au pied du mur et comprendra de lui meme que ce n'est pas gérable de
cette façon.

Dominique.
1 2