Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Langage
Langage Vos questions sur langage Pascal en général, ses évolutions, les technologies, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/05/2003, 14h45   #1
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut Créer un fichier d'enregistrements

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 !
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2003, 16h38   #2
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 547
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 547
Points : 33 748
Points : 33 748
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
Bonjour !

La gestion des fichiers d'enregistrements est peut-être plus simple encore que celle des fichiers texte.

Soit un enregistrement :
Code :
1
2
3
4
5
Type FichePersonne = Record
       NomPrenom : String [50];
       Age : Byte;
       Adresse : String [80];
     end;
La déclaration d'un fichier contenant des enregistrements déclarés ci-dessus est :
Code :
Var Personnel : File of FichePersonne;
Et la déclaration d'un "buffer" pour lire ou écrire les enregistrements :
Code :
Var Fiche : 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 :
1
2
3
4
5
6
Assign(Personnel,'C:\PERS\PERS.DAT');
Reset(Personnel);
While not eof(Personnel) do begin
  Read(Personnel,Fiche);
  {... traiter les données lues ... }
end;
Lorsqu'on ouvre le fichier, le "pointeur" se positionne sur le 1er enregistrement. A chaque lecture d'enregistrement, le pointeur se déplace vers le suivant.

J'espère avoir été plus ou moins clair ?

A bientôt !
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/05/2003, 21h43   #3
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut Merci

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:
Moi j'essaierais ceci :

Pierre
Lavoie
36
1254
De L'église
Ste-Foy
Québec

Luc
Tremblay
...

Et ainsi de suite pour chacun des enregistrements.
Citation:
Ou bien :

Pierre Lavoie 36 1254 De L'église Ste-Foy Québec Luc Tremblay ...

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.
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/05/2003, 22h01   #4
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 547
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 547
Points : 33 748
Points : 33 748
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
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 !
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/05/2003, 22h37   #5
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut Rebonjour

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 !
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2003, 00h11   #6
M.Dlb
Rédacteur/Modérateur

 
Avatar de M.Dlb
 
Inscription : avril 2002
Messages : 2 278
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2002
Messages : 2 278
Points : 3 434
Points : 3 434
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+
M.Dlb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2003, 16h25   #7
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 547
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 547
Points : 33 748
Points : 33 748
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
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 :
1
2
3
if Tableau[i].NomPrenom < Tableau[j].NomPrenom
   then
     { ... par exemple, déplacer Tableau[i] ... }
Pour ranger tes données dans le bon ordre, tu déplaceras les enregistrements entiers. Il n'y aura ainsi aucun risque que les données d'un enregistrement donné soient dissociées.

Bon courage !
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/05/2003, 21h24   #8
Eric Sigoillot
Expert Confirmé
 
Avatar de Eric Sigoillot
 
Inscription : mars 2002
Messages : 1 203
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mars 2002
Messages : 1 203
Points : 2 868
Points : 2 868
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+
Eric Sigoillot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2003, 14h17   #9
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut Remerciements et suite

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.
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2003, 14h33   #10
ALT
Membre Expert
 
Avatar de ALT
 
Homme
Assistant aux utilisateurs
Inscription : octobre 2002
Messages : 993
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53
Localisation : France, Vienne (Poitou Charente)

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 993
Points : 1 496
Points : 1 496
Bonjour
Citation:
Peut-être juste me confirmer que la commande APPEND est bien la bonne pour écrire à la suite d'un fichier existant.
Oui.

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 !
ALT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2003, 16h48   #11
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut ALT

Allo !

Merci ALT.

Je m'y attaque dès ce soir.

Au plaisir !
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2003, 14h16   #12
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut J'ai des BUGs

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
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2003, 15h14   #13
ALT
Membre Expert
 
Avatar de ALT
 
Homme
Assistant aux utilisateurs
Inscription : octobre 2002
Messages : 993
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53
Localisation : France, Vienne (Poitou Charente)

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 993
Points : 1 496
Points : 1 496
Bonjour

Citation:
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.
Bon, regarde les commandes open, rewrite... J'ai un peu oublié le détail de leurs utilisations, mais il faut suivre cette piste.

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 !
ALT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2003, 19h07   #14
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 547
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 547
Points : 33 748
Points : 33 748
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
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 :
1
2
3
Assign(Fichier,NomFichier);
Reset(Fichier);
Seek(Fichier,FileSize(Fichier));
Quant aux problèmes d'impression, tu pourras trouver des réponses dans un autre message récent déposé sur ce forum traitant d'un problème similaire.

Bon courage !
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2003, 22h53   #15
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut Suite

Rebonjour,

Première chose,

ALT dit :

Citation:
Bon, il y aurait encore beaucoup à en dire, mais rien que ça, tu aurais dû le savoir...
Écoute, comme je le dis si bien dans mon premier message j'en suis à mes débuts en programmation, donc, qu'il m'arrive d'en échapper une n'est pas phénomène méritant d'être relevé. Je mets beaucoup d'énergie à comprendre les rudiments du PASCAL mais j'ai aussi d'autres obligations qui m'empêchent d'y consacrer tout mon temps.

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.
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2003, 13h49   #16
Oregor
Invité de passage
 
Inscription : avril 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 13
Points : 4
Points : 4
Par défaut Tout fonctionne !!!

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 pour votre support et vos encouragements.
Oregor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2003, 18h31   #17
Eric Sigoillot
Expert Confirmé
 
Avatar de Eric Sigoillot
 
Inscription : mars 2002
Messages : 1 203
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mars 2002
Messages : 1 203
Points : 2 868
Points : 2 868
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 :
1
2
3
4
5
6
7
8
9
10
11
12
 
procedure Un; forward;
 
procedure Deux;
begin
Un;
end;
 
procedure Un;
begin
Deux;
end;
Voilà.

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+
Eric Sigoillot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/06/2012, 18h17   #18
Info-programmation
Invité de passage
 
Femme Maita info
informatique
Inscription : juin 2012
Messages : 1
Détails du profil
Informations personnelles :
Nom : Femme Maita info
Localisation : France

Informations professionnelles :
Activité : informatique

Informations forums :
Inscription : juin 2012
Messages : 1
Points : 1
Points : 1
Par défaut mimi

je cherche des astuces en programmation (pascal) fichiers d'enregistrement??§§ merci d'avance
Info-programmation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2012, 18h55   #19
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 433
Points : 3 808
Points : 3 808
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.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2012, 20h02   #20
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 732
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 732
Points : 1 381
Points : 1 381
Citation:
Envoyé par droggo Voir le message
Joe,

Et un déterrage après plus de 9 ans !

Ça va exploser les records.
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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h46.


 
 
 
 
Partenaires

Hébergement Web