|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Bonjour,
Je suis nouveau en programmation et en train de suivre un cours d'initiation à l'aide du langage PASCAL. Dans un exercice on nous demande de trier une liste d'enregistrements selon un de ses champs. Je désire créer ma liste d'enregistrements dans un fichier mais je ne sais pas comment organiser ce fichier pour qu'il soit récupérable par le programme. J'ai déjà réussi à lire un fichier texte où les informations étaient organisées ligne par ligne mais je ne comprends pas comment structurer des enregistrements. Une piste de solution m'aiderait grandement. Par contre, je ne veux pas la réponse en clair car j'aime apprendre pas essais et erreurs. Au plaisir ! |
|
|
00
|
|
|
#2 | ||||
![]() ![]() ![]() |
Bonjour !
La gestion des fichiers d'enregistrements est peut-être plus simple encore que celle des fichiers texte. Soit un enregistrement : Code :
Code :
Var Personnel : File of FichePersonne; Pour créer, lire, écrire, rechercher un enregistrement précis, etc, les fonctions suivantes sont disponibles : - Assign (pour définir le nom du fichier); - Rewrite (pour créer un nouveau fichier); - Reset (pour ouvrir un fichier existant); - Read (pour lire un enregistrement); - Write (pour écrire un enregistrement); - Seek (pour atteindre un enregistrement précis); - Eof (pour détecter la fin du fichier). Un tout petit exemple de lecture de fichier : Code :
J'espère avoir été plus ou moins clair ? A bientôt ! |
||||
|
10
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Salut Alcatîz,
J'essairai dès ce soir cette façon de faire. Un problème subsiste tout de même dans mon esprit. Comment dois-je organiser l'information dans mon fichier ? Citation:
Citation:
Ce sont les idées qui me viennent à l'esprit. Qu'en penses-tu ? Comme je suis au travail, je ne peux pas les expérimenter tout de suite. Merci encore et au plaisir. |
||
|
|
10
|
|
|
#4 |
![]() ![]() ![]() |
Ta première proposition colle tout-à-fait avec l'organisation physique la plus simple des données dans un fichier, avec des enregistrements de taille fixe.
Ta seconde proposition est possible, avec des enregistrements de taille variable. L'avantage de cette méthode est un gain substantiel de place (pour un fichier volumineux) mais l'inconvénient est que c'est plus difficile à programmer. Là, ton imagination peut se défouler : tu peux séparer tes données par des caractères spéciaux, les faire précéder de leur taille, etc, etc. Bonne programmation ! |
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Salut Alcatîz,
Comme mes enregistrements sont de taille fixes, j'opterai pour la première solution. Si je comprends bien, comme ils sont de taille fixes, je n'aurai pas besoir d'insérer une ligne vide entre chacun des enregistrements à moins de prévoir un champ bidon à cet effet n'est-ce pas ? Si ça fonctionne et j'ai bon espoir, il ne me restera plus qu'à extraire les champs nom et les trier par ordre alphabétique. Une question cependant, une fois les noms triés, le reste de l'enregistrement suit-il ce tri i.e. le prénom Pierre suivra-t-il le nom Lavoie ? Merci à l'avance ! |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Inscription : avril 2002 Messages : 2 278 ![]() |
Mais si tu utilises un fichier d'enregistrement, ce ne sera pas à toi de gérer l'organisation de tes fichiers. En effet, si tu utilises les procédures write et read sur ton fichier, Turbo Pascal organisera lui même le fichier !!
a+ |
|
|
00
|
|
|
#7 | ||
![]() ![]() ![]() |
Pour ce qui est du tri et de l'exploitation de tes données, si ton fichier n'est pas trop volumineux, le plus simple (et le plus rapide) est de lire entièrement le fichier et de tout stocker en mémoire (soit dans un tableau d'enregistrements, soit dans une liste chaînée).
Ensuite, tu pourras effectuer un tri sur n'importe lequel des champs. Par exemple : Code :
Bon courage ! |
||
|
10
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() Inscription : mars 2002 Messages : 1 203 ![]() |
Les chaînes Turbo Pascal étant statiques, tu peux aussi trier ton tableau directement dans le fichier, mais ça prendra un peu plus de temps.
par contre, comme Wormful l'a dit, tu n'as pas à te préoccuper de l'organisation des données. Un enregistrement possède une taille fixe, et par conséquent, le positionnement, la lecture et l'écriture de tells structures est tellement simple à gérer que ça a été inclu dans le langage Pascal. Seul inconvénient : c'est un programme qui doit rentrer les données dans le fichier, et non toi qui dois les taper manuellement. A+ |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Salut la gang,
Premièrement MERCI pour vos idées et votre aide. J'ai réussi à écrire un programme qui demande à l'utilisateur d'entrer sa liste d'enregistrements dans le format que je désire. Ensuite je sauvegarde ces enregistrements dans un fichier. Par la suite j'appelle cet enregistrement pour le placer dans un vecteur et le trier en ordre alphabétique des champs noms. Et tout ça fonctionne... Il ne me reste plus qu'à écrire la liste triée à la suite de celle existante ce que je suis en locomotive (en train) d'élucider avec, je crois, la commande APPEND. Pour terminer, il ne me restera plus qu'à faire imprimer le tout, mais ça j'y parviens déjà. Alors merci de vos encouragements. Peut-être juste me confirmer que la commande APPEND est bien la bonne pour écrire à la suite d'un fichier existant. |
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() ![]() Assistant aux utilisateurs Inscription : octobre 2002 Messages : 993 ![]() |
Bonjour
Citation:
Cordialement
__________________
"Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux." Attribué indistinctement à : Thomas Jefferson Benjamin Franklin Albert Einstein ! |
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Allo !
Merci ALT. Je m'y attaque dès ce soir. Au plaisir ! |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Allo !
Après une soirée à piocher sur mon clavier, je n'arrive toujours pas à écrire à la suite de mon fichier. La commande APPEND me donne toujours une message TYPES INCOMPATIBLES car elle semble faite pour les fichier texte et non pas pour les fichiers d'enregistrements. HELP Aussi, Comment fait-on pour appeler une procédure depuis une autre procédure quand celles-ci sont déclarées toutes deux dans le programme pricipal je reçois le message IDENTIFICATEUR NON DÉFINI quand j'essai. Autre point, comme je suis capable de créer mon fichier avec mes enregistrements non triés, je suis aussi capable de les imprimer. Cependant, les caractères accentués inscrits lors de la saisie ne sont pas rendus correctements lors de l'impression. Comment m'en sortir Je suis un peu en mode panique car je n'ai que jusqu'à vendredi pour remettre mon travail. Merci à l'avance pour vos lumières |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() ![]() Assistant aux utilisateurs Inscription : octobre 2002 Messages : 993 ![]() |
Bonjour
Citation:
Pour appeler une proc. à partir d'une autre, il faut que les constantes, variables, types... soient "visibles" des deux proc. Donc, qu'ils soient déclarés dans le programme principal. Exemple : var v:type_de_la_variable; procedure un; begin ... v:=valeur; deux; ... [b]end[b]; procedure deux; begin ... v:=nouvelle_valeur; ... end; Ou bien, appeler la proc. avec des paramètres (bien meilleur) : procedure un; var v:type_variable; begin ... v:=valeur; deux(v); ... end; procedure deux (bidule:type_variable); begin ... bidule:=nouvelle_valeur; ... end; Bon, il y aurait encore beaucoup à en dire, mais rien que ça, tu aurais dû le savoir... Cordialement
__________________
"Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux." Attribué indistinctement à : Thomas Jefferson Benjamin Franklin Albert Einstein ! |
|
|
|
00
|
|
|
#14 | ||
![]() ![]() ![]() |
Hello !
Append est en effet une procédure réservée aux fichiers textes. Par contre, tu peux ouvrir ton fichier et positionner le pointeur de fichier à la fin des données, à l'aide des instructions suivantes : Code :
Bon courage ! |
||
|
10
|
|
|
#15 | |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Rebonjour,
Première chose, ALT dit : Citation:
Ceci étant dit, Il me semble avoir essayé quelque chose de semblable à ce désigne ALT mais je vais y revoir de plus près. J'utilise déjà l'appel de procédure avec paramètres depuis le programme principal et ça fonctionne sans problèmes. Reste donc à voir pourquoi ça fonctionne pas depuis l'intérieur d'une autre procédure. ALCATÎS : Une fois la commande SEEK(Fichier,FileSize(Fichier)); exécutée, le pointeur est-il de lui même postionné à la fin du fichier ou dois-je utiliser une commande de positionnement qui utilise FileSize comme paramètre ? Et enfin, je part à la recherche du sujet pour les caractères. À tous MERCI et je vous redonne des nouvelles. |
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 13 ![]() |
Salut à tous,
Enfin tout fonctionne Le problème de la fonction qui en appelle une autre est probablement due au compilateur car je devais simplement déclarer la fonction appelée devant celle appelante pour ne plus avoir de problème d'identificateur. Alcatîs : J'ai utilisé la commande SEEK(FILESIZE(fichier)) et BINGO Pour l'imprimante, je continu les démarches mais ce n'est plus du ressort de ce message. Maintenant, le violon... Un gros MERCI |
|
|
00
|
|
|
#17 | ||
|
Expert Confirmé
![]() ![]() Inscription : mars 2002 Messages : 1 203 ![]() |
Si tu as un problème du type "serpent qui se mort la queue" avec tes procédures, il faut que tu fasses une déclaration forward, comme ceci :
Code :
PS: Tu n'essaie pas ce programme là, c'est une boucle infinie ! (enfin pas si infinie que ça... Tu le verras plus ou moins vite, en fonction de la taille de la pile) A+ |
||
|
|
10
|
|
|
#18 |
|
Invité de passage
![]() Maita infoinformatique Inscription : juin 2012 Messages : 1 ![]() |
je cherche des astuces en programmation (pascal) fichiers d'enregistrement??§§ merci d'avance
|
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 433 ![]() |
Joe,
Et un déterrage après plus de 9 ans ! Ça va exploser les records.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 732 ![]() |
Heureuse découverte pour ma part.
Cette discussion (principalement les messages d'Alcatîz) contient absolument tout ce qu'on a besoin de savoir sur les fichiers d'enregistrements ! Tiens, je vais même en prendre une copie. Donc, pour tout savoir sur les fichiers d'enregistrements, il ne faut que prendre le temps de lire l'ensemble de cette discussion.
__________________
L'Art est long et le Temps est court. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com