IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Recherche de prix dans un fichier texte


Sujet :

Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Recherche de prix dans un fichier texte
    Bonjour ,
    je dois faire un automate et j'ai quelque souci voici mon énoncé.
    "Vous devez construire un programme qui lit un fichier texte contenant une annonce de vente ou location de
    maison ou nous pouvons trouver un (ou plusieurs) prix. Le but du programme est de détecter tous les prix du texte."


    mon souci est que je ne vois pas vraiment comment créer le programme, j'avais en tête d'ouvrir l'annonce en tant que file of byte puis détecter les nombres avec la fonction qui permet de connaitre la nature de l'élément grâce au code ASCII ( je ne me souviens plus de la fonction )


    merci

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 418
    Points
    59 418
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    Plutôt que détecter les nombres du texte, ton programme devrait commencer par détecter la devise ('€', 'EUR'). Car sur une annonce, il y a beaucoup de nombres : la surface, le nombre de pièces, des distances ("à 3 km du centre ville"), etc.

    Ensuite, le prix peut soit précéder, soit suivre la devise ('EUR 137500', '137500 €'); le prix peut être écrit avec des séparateurs de milliers ('137 500','137.500'), avec des décimales...

    Il y a de quoi s'amuser !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci pour ta réponse,je pense que j'ai compris ce que tu ma dit je crois que je vais commencé pas faire une procédure qui détecte les mots 'euros, /mois... les choses principales qui se trouvent dans les annonces' mais je ne vois pas comment je pourrait faire pour couper le prix qui se trouverait avant ou après ces indices, je pensais couper ce qui se trouvait avant le prix mais comme je ne sais pas la longueur exacte je bloque.


    Merci

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 418
    Points
    59 418
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par idoclub Voir le message
    je pensais couper ce qui se trouvait avant le prix mais comme je ne sais pas la longueur exacte je bloque.
    Si tu pars du principe que le prix précède toujours la devise (ce qui n'est pas toujours le cas ), tu peux récupérer les chiffres un à un, en partant de l'espace qui précède la devise, en remontant la chaîne jusqu'à rencontrer des caractères autres que des chiffres (en passant simplement les espaces).
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Oui je vois le principe, mais ce qui me pose problème c'est que si j'utilise filepos pour savoir si la devise est contenue ou pas dans le fichier texte comment je fais pour amener le pointeur au niveau de la devise pour ensuite reculer.
    merci



    edit:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    program aaaaaaa;
    var t : text ;
        s,b: string ;
        a,cmpt: integer;
        pasfini: boolean;
    begin
    assign(t,'nom');
    reset(t);
     
     
    readln(t,s);
    if pos('euros',s)<>0 then
       begin
       a:= pos('euros',s);
       b:= copy(s,1,a-2);
       cmpt:= a-2;
       pasfini:= true ;
       while  pasfini do
              begin
              if (b[cmpt]<>'1') and (b[cmpt]<>'2') and (b[cmpt]<>'3') then(je ne me rappelle plus comment dire que b[cmpt] n''est pas un nombre)
                 begin
                 delete(b,1,cmpt); 
                 pasfini:= false;
                 end
              else
                  begin
                  cmpt:= cmpt-1;
                  pasfini:= true;
                  end;
     
              end;
       end;


    je suis arriver a ce programme après vos conseille, est-ce que c'est correct ?

    je sait que le programme ne fonctionne qu'avec 'euros' mais si ceci est bon comment faire pour que sa fonctionne pour les autres mot clés ?

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 418
    Points
    59 418
    Billets dans le blog
    2
    Par défaut
    Tu dois créer une boucle qui lit entièrement ton fichier et ne pas oublier de refermer celui-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Assign(t,'nom');
      Reset(t);
      while not EOF(t) do
        begin
          ReadLn(t,s);
          ...
        end;
      Close(t);
    N'oublie pas non plus de gérer les erreurs d'ouverture ou de lecture du fichier.

    Tu dois également penser que le prix peut se trouver à la fin d'une ligne et la devise au début de la suivante; je te conseille donc de garder systématiquement une copie de la ligne précédente.

    Pour chercher plusieurs versions de la devise, voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
          a := Pos('euro',s);
          if a = 0
             then
               begin
                 a := pos('€',s);
                 if a = 0
                    then
                      a := Pos('eur',s);
               end;
          if a <> 0
             then   (* Devise trouvée *)
               begin
                 ...
               end;
    Pour faciliter ta recherche, tu devrais mettre ta chaîne entièrement en minuscules (ou en majuscules, mais dans ce cas il faut bien évidemment tester la devise en majuscules).

    Pour tester qu'un caractère est un chiffre, tu peux faire
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    program aaaaaaa;
    var t : text ;
        s,b,c,w: string ;
        a,cmpt,i: integer;
        pasfini: boolean;
     
    begin
    assign(t,'nom');
    reset(t);
    while not eof(t) do
          begin
          c:='';
          readln(t,s);
          a := Pos('euros',s);
     
     
          if a = 0 then
             begin
             a := pos('E',s);
             if a = 0 then
                begin
                a := Pos('K',s);
                c:='000';
                if a=0 then
                w:= s ;
                end;
             end;
     
     
             if(a<>0)and(a<>1)then
             begin
             b:= copy(s,1,a-2);
             cmpt:= a-2;
             pasfini:= true ;
     
     
             while  pasfini and (cmpt<>0) do
                    begin
                    if (b[cmpt]<>'.') and (b[cmpt]<>'0') and (b[cmpt]<>'1') and (b[cmpt]<>'2') and (b[cmpt]<>'3') and (b[cmpt]<>'4') and (b[cmpt]<>'5') and (b[cmpt]<>'6') and (b[cmpt]<>'7') and (b[cmpt]<>'8') and (b[cmpt]<>'9') then
                       begin
                       delete(b,1,cmpt);
                       pasfini:= false;
                       end
                          else
                              begin
                              cmpt:= cmpt-1;
                              pasfini:= true;
                              end;
                          end;
     
     
             if a=1 then
           begin
          i := length(w) ;
           while  pasfini and (i<>0) do
                 begin
                  if (w[i]<>'.') and(w[i] in ['0'..'9'])then
                     begin
                  pasfini:= false;
                     end
                        else
                            begin
                            i:= i-1;
                            pasfini:= true;
                            end;
                        end;
     
              writeln(w);
     
             end;
     
             end;
     
     
     
    writeln(b+c);
    end;
    close(t);
    end.
    voici le programme que j'ai fait avec votre aide et voici le type d'annonce a tester

    SARAN PROX CENTRE maison 115m2, s-sol complet, combles amen., cuis. equ., sej-sal. chem.
    insert, 4ch., mezza & bur., terr. 400m2, 230.000 E. Tel. 05.16.96.04.58 - 06.81.61.19.64.

    ORLEANS CTRE F2 50M2 , rue Jeanne d’Arc, 3´eme ´etage libre au 15/04/08, 470 euros + 30 euros
    chges. Tel.02.37.32.25.97 ou 06.85.06.36.55.


    CHATEAU RENAULT, IMMEUBLE de rapport, belle situation geographique, 1 T4, 2 T2, 15.240
    euros/annuel, prix 190 K euros. Tel. 06.09.03.06.02.



    Ce qui me pose problème c'est pour le E si je teste la présence de E il me donne le E d'un mot mais si je converti tout en minuscules il me converti la devise aussi.

    Je dois aussi tester comme vous me l'avez rappelé la situation ou le prix se trouve en fin de ligne j'ai essayer un petit truc mais je ne suis pas sur que cela fonctionne, et la situation ou il y a deux prix sur la même ligne mais sa j'ai pas trouver.

    MERCI.(il me reste peu de temps donc tout aide est bienvenue)

Discussions similaires

  1. Rechercher un mot dans un fichier texte
    Par elscorpio dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/06/2014, 17h04
  2. Recherche de motif dans un fichier texte.
    Par Gugul dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2010, 10h54
  3. [PHP 5.0] Rechercher un script dans un fichier texte
    Par schats dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2009, 21h24
  4. Recherche de palindromes dans un fichier texte
    Par dyala dans le forum Pascal
    Réponses: 4
    Dernier message: 25/05/2007, 19h10
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo