Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2655 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Lecture d'un fichier à accés direct...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lecture d'un fichier à accés direct...

n°1228893
jiojio
Posté le 23-10-2005 à 01:41:39  profilanswer
 

Bonjour,
j'ai créé un fichier "hotel.dat" avec Delphi en mettant les informations du type hotel. Je voudrais fair la moyenne des prix des hotels mais je n'arrive pas à acceder aux données de mon fichier hotel.dat. J'avais essayé également avec une boucle while eof...(je pense que àa doit être mieux que le repeat mais bon...) donc je fais la moyenne et je l'affiche sous format HTML.
 
type
  THotel = record
    code, prix, cp : integer;
    designation : string[30];
    numero_rue : string[10];
    rue : string[50];
    ville : string[20];
  end;
 
var
  rec : file of THotel;
  MonHotel : THotel;
 
  moy, i, total : integer;
 
 
begin
   total := 0;
   moy := 0;
   i := 1;
 
    assignfile(rec,'hotel.dat');
 
    if fileexists('hotel.dat') then
        begin
 
 
          Repeat
                  read(rec,MonHotel);
            total := total + MonHotel.prix;
            i:= i + 1;
 
 
             moy := (total DIV i);
 
             //ecriture à l'écran
             writeln('Content-type: text/html');
             writeln;
             writeln('<html>');
             writeln('<head><title>Moyenne des prix des hôtels</title></head>');
             writeln('<body>');
             writeln('<h1>Moyenne des prix des hôtels<hr></h1>');
             writeln('La moyenne des prix des hôtels : ' + IntToStr(moy));
             writeln(' €');
          Until SeekEof (rec);
      end;
 
  close(rec);
 
end.

mood
Publicité
Posté le 23-10-2005 à 01:41:39  profilanswer
 

n°1229126
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-10-2005 à 18:54:30  profilanswer
 

Tu mettrais pas plutôt le calcul de moyenne et l'affichage hors de la boucle ?
 
Et comment ça tu "n'arrives pas à accéder aux données" ?


Message édité par antp le 23-10-2005 à 18:55:13

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229222
jiojio
Posté le 23-10-2005 à 22:28:03  profilanswer
 

oula oui...on a ça alors? Le truc c'est que je n'ai pas d'erreur de compilation mais quand je veux pour executer le programme bah la page html s'affiche avec message ne peut pas afficher le contenu de la page blabla alors je me demande j'utilise bien le fichier en accés direct dans ce cas...merci d'avance
 
type  
  THotel = record  
    code, prix, cp : integer;  
    designation : string[30];  
    numero_rue : string[10];  
    rue : string[50];  
    ville : string[20];  
  end;  
 
var  
  rec : file of THotel;  
  MonHotel : THotel;  
 
  moy, i, total : integer;  
 
 
begin  
   total := 0;  
   moy := 0;  
   i := 1;  
 
     
             Repeat  
               read(rec,MonHotel);  
               total := total + MonHotel.prix;  
               i:= i + 1;  
            Until SeekEof (rec);  
 
            moy := (total DIV i);  
 
             //ecriture à l'écran  
             writeln('Content-type: text/html');  
             writeln;  
             writeln('<html>');  
             writeln('<head><title>Moyenne des prix des hôtels</title></head>');  
             writeln('<body>');  
             writeln('<h1>Moyenne des prix des hôtels<hr></h1>');  
             writeln('La moyenne des prix des hôtels : ' + IntToStr(moy));  
             writeln(' €');  
           
      close(rec);  
 
end.

n°1229251
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-10-2005 à 23:35:11  profilanswer
 

Essaie déjà avec un vrai browser (Firefox, Opera, etc.) qui te donnera un vrai message d'erreur plutôt que de dire juste qu'il ne peut pas afficher le contenu :p


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229271
jiojio
Posté le 23-10-2005 à 23:52:24  profilanswer
 

lol oui aussi mais j'ai pas hey hey

n°1229292
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-10-2005 à 00:07:13  profilanswer
 

T'as pas quoi ? Un vrai browser ? Ça se télécharge facilement :p
 
Il manque quand même un bout dans ton code. Après le AssignFile il faut faire un Reset pour ouvrir le fichier. Et j'utiliserais Eof plutôt que SeekEof, qui semble plutôt destiné à des fichiers textes...


Message édité par antp le 24-10-2005 à 00:08:01

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229309
jiojio
Posté le 24-10-2005 à 00:34:38  profilanswer
 

program moyenne;
 
{$APPTYPE CONSOLE}
 
uses
  sysutils,
  btsinfo;
 
type
  THotel = record
    code, prix, cp : integer;
    designation : string[30];
    numero_rue : string[10];
    rue : string[50];
    ville : string[20];
  end;
 
var
  rec : file of THotel;
  MonHotel : THotel;
 
   i : integer;
   moy , total : integer;
 
begin
   total := 0;
   moy := 0;
   i := 1;
 
            assignfile(rec,'hotel.dat');
            reset(rec);
            WHILE NOT Eof (rec) DO
            BEGIN
               Read(rec,MonHotel);
               total := total + MonHotel.prix;
               i:= i + 1;
            END ;
 
            moy := (total DIV i);
 
             //ecriture à l'écran  
             writeln('Content-type: text/html');
             writeln;
             writeln('<html>');
             writeln('<head><title>Moyenne des prix des hôtels</title></head>');
             writeln('<body>');
             writeln('<h1>Moyenne des prix des hôtels<hr></h1>');
             writeln('La moyenne des prix des hôtels : ' + IntToStr(moy));
             writeln(' €');  
 
      close(rec);
 
end.

n°1229310
jiojio
Posté le 24-10-2005 à 00:36:10  profilanswer
 

regarde j'ai fait ça c'est déjà mieux que la premiere version sauf que ça ne marche toujours pas hey hey (je pense qu'il serait mieux de gérer la moyenne avec un REAL mais c'est quoi la fonction IntToStr(moy) mais pour le réel ? ;)

n°1229384
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-10-2005 à 10:39:40  profilanswer
 

FloatToStr, ou Format avec %f ou %g, selon ce que tu veux comme type d'affichage.
T'as essayé d'envoyer du texte à l'écran sans lire le fichier, juste afficher un 'bonjour', pour être sûr que c'est la lecture du fichier qui bloque ?
À l'inverse, t'as essayé de lancer le soft directement depuis la console plutôt qu'en CGI, pour voir le résultat à l'écran de la console plutôt que via le browser ?s


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229397
macgawel
Posté le 24-10-2005 à 10:50:48  profilanswer
 

jiojio a écrit :

regarde j'ai fait ça c'est déjà mieux que la premiere version sauf que ça ne marche toujours pas hey hey


Déjà, en html, quand on ouvre des balises il faut les fermer  :fou: ...
Ensuite, je te conseillerais de tester en premier lieu si ton programme calcule bien la moyenne, et après de tester la fonction d'affichage.
 

Citation :

(je pense qu'il serait mieux de gérer la moyenne avec un REAL mais c'est quoi la fonction IntToStr(moy) mais pour le réel ? ;)


Effectivement, si tu veux avoir une moyenne exacte, il vaut mieux utiliser un réél  :D (voire un  Currency ?)
Et pour la fonction équivalente à InttoStr, peut-être un "as String", ou en cherchant dans l'aide  :p  
 
AMHA :
1. Tu écris le bout de code qui te calcule la moyenne, avec un affichage simple (un bête Write qui t'affiche juste la moyenne, pas en html) et avec un (à la limite 2) hôtel dans ton .DAT.
2. Tu le testes avec le bon fichier .DAT
3. Tu écris le bout de code qui affiche la page html,  

Code :
  1. //ecriture à l'écran   
  2. moy := <une valeur quelconque>
  3. writeln('Content-type: text/html');
  4. writeln;
  5. writeln('<html>');
  6. writeln('<head><title>Moyenne des prix des hôtels</title></head>');
  7. writeln('<body>');
  8. writeln('<h1>Moyenne des prix des hôtels<hr></h1>');
  9. writeln('La moyenne des prix des hôtels : ' + IntToStr(moy));
  10. writeln(' €');


 
4. Et une fois que les deux parties fonctionnent, tu fais la totale.
 
PS : Tu devrait mettre ton close dès que tu as fini d'utiliser le fichier .DAT, et - dans l'idéal - encadrer ton bloc "lecture du fichier .DAT" par un Try-Except...

mood
Publicité
Posté le 24-10-2005 à 10:50:48  profilanswer
 

n°1229417
jiojio
Posté le 24-10-2005 à 11:01:29  profilanswer
 

On m'a appris à faire comme ça pour l'affichage..mais je ne comprends pas dans le programme moyenne je lis bien le fichier avant d'afficher la moyenne des prix...
Regarde c'est mon programme qui permet de mettre les informations dans le fichier (il fonctionne parfaitement) :
 
program hotel;
 
{$APPTYPE CONSOLE}
 
uses
  sysutils,
  btsinfo;
 
type
  THotel = record
    code, prix, cp : integer;
    designation : string[30];
    numero_rue : string[10];
    rue : string[50];
    ville : string[20];
  end;
 
 
var
  rec : file of THotel;
  MonHotel : THotel;
  designation, numero_rue, rue, ville : string;
  code , prix, cp : integer;
  position : integer;
  tmp : string;             // la variable tmp est intermédiare et servira à stocker
                            // une donnée du formulaire afin de la modifier
 
begin
  //attention la procedure RequestFormInit et la fonction RequestFom ne font pas partie de DELPHI !
  RequestFormInitialize(); //permet de transferer les données du formulaire dans un fichier temporaire.
 
  tmp := requestform('code'); //recherche de la clé 'code' dans le fichier temporaire et renvoie de la valeur.
  code := strtoint(tmp);      // stroint transforme un integer en string
 
  designation:=requestform('designation');
 
  tmp := requestform('prix');
  prix := strtoint(tmp);      // stroint transforme un integer en string
 
  numero_rue:=requestform('numero_rue');
  rue := requestform('rue');
  tmp := requestform('cp');
  cp := strtoint(tmp);
  ville := requestform('ville');
 
 
 //ecriture à l'écran
  writeln('Content-type: text/html');
  writeln;
  writeln('<html>');
  writeln('<head><title>Enregistrement des hotels</title></head>');
  writeln('<body>');
  writeln('<h1>Saisir les informations concernant les élèves<hr></h1>');
  writeln('Code               : '+ IntToStr(code) +'<br>');          // IntToStr() permet de convertir
  writeln('Désignation              : '+ designation +'<br>');       // un integer en string
  writeln('Prix              : '+ IntToStr(prix) +' € <br>');
  writeln('Numéro de rue              : '+ numero_rue +'<br>');
  writeln('Rue              : '+ rue +'<br>');
  writeln('Code postal              : '+ IntToStr(cp) +'<br>');
  writeln('Ville              : '+ ville +'<br>');
  writeln('</body></html>');
 
 
  //enregistrement des données sur l'hotel dans un fichier du serveur
  MonHotel.code:=code;
  MonHotel.designation:=designation;
  MonHotel.prix:=prix;
  MonHotel.numero_rue:=numero_rue;
  MonHotel.rue:=rue;
  MonHotel.cp:=cp;
  MonHotel.ville:=ville;
 
 
    assignfile(rec,'hotel.dat');
    if fileexists('hotel.dat') then
  begin
    reset(rec);
    position:=filesize(rec);
    seek(rec,position);
    write(rec,MonHotel);
  end
  else
  begin
    rewrite(rec);
  end;
  write(rec,MonHotel);
  close(rec);
 
end.

n°1229428
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-10-2005 à 11:09:24  profilanswer
 

macgawel a écrit :

Déjà, en html, quand on ouvre des balises il faut les fermer  :fou: ...


 
Non, ça c'est en XML/XHTML. En HTML on peut laisser plein de trucs ouverts, cf cette page qui a une syntaxe tout à fait valide : http://antp.be/temp/html4open.html


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1229599
jiojio
Posté le 24-10-2005 à 13:39:11  profilanswer
 

effectivement ! je n'avais pas fermé les balises (j'y avais penser ce matin dans mon lit...et oui LOL)
Enfin merci pour votre aide :)
Il fonctionne parfaitement maintenant :)
bye

n°1230128
jiojio
Posté le 25-10-2005 à 00:24:19  profilanswer
 

Bon j'ai encore un petit pb...ça marchait et...ça ne marche plus :| !
 
regardez je vois pas pourquoi là...
 
 
program moyenne;
 
{$APPTYPE CONSOLE}
 
uses
  sysutils,
  btsinfo;
 
type
  THotel = record
    code, prix, cp : integer;
    designation : string[30];
    numero_rue : string[10];
    rue : string[50];
    ville : string[20];
  end;
 
// déclarations des variables
var  
  rec : file of THotel;
  MonHotel : THotel;
 
  total,i : integer;
  moy : real;
 
begin
   total := 0;
   moy := 0;
   i := 1;
 
            assignfile(rec,'hotel.dat');  // Affectation de nom de fichier
            reset(rec);   // Ouverture du fichier en lecture
            while not Eof (rec) do  // Jusqu' à la fin du fichier
            begin
               read(rec,MonHotel);  // Après chaque opération la pointeur est avancé vers la position de l’élément suivant
               total := total + MonHotel.prix; // total vaut le total des prix des hôtes se trouvant dans le fichier hoteldat
               i := i + 1;   // à chaque fois que l'on trouve un prix i vaut i + 1
            end;
 
            moy := (total / i); // moy vaut le total des prix / par le nombre de prix trouvés
             
 
 
             //ecriture à l'écran  
             writeln('Content-type: text/html');
             writeln;
             writeln('<html>');
             writeln('<head><title>Moyenne des prix des hôtels</title></head>');
             writeln('<body>');
             writeln('<h1>Moyenne des prix des hôtels<hr></h1>');
             writeln('La moyenne des prix des hôtels : ' + FloatToStr(moy));
             writeln(' €');
             writeln('</body></html>');  
 
             close(rec);  // Fermeture du fichier
end.

n°1230132
jiojio
Posté le 25-10-2005 à 00:25:32  profilanswer
 

le close on pourrait le mettre avant le calcul de la moyenne mais ça ne change rien...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Lecture d'un fichier à accés direct...

 

Sujets relatifs
Mettre le contenu d'un fichier en variable[DOS] extraire le nom d'un fichier pour renommer un autre
Double lecture avec fscanfInclude/Require en cascade et acces aux variables
Lister les fichier d'un disque dur et faire correspondre le fichierOuvrir un fichier ; Agrandir la fenêtre [VB6]
Vbscript - Convertir un fichier TXT du format Unicode vers ANSIVBScript - Modification d'un fichier par script
Forcer un fichier .xls à s'ouvrir dans excelprobleme de verification de poid d'un fichier en php
Plus de sujets relatifs à : Lecture d'un fichier à accés direct...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR