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

Turbo Pascal Discussion :

[TP] Lecture d'un fichier texte contenant des coordonnées


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [TP] Lecture d'un fichier texte contenant des coordonnées
    Voila mon probleme !

    j'aurais un fichier .txt contenant :
    "
    a 5 2
    a 6 3
    "
    Ces chiffres et lettres représentent des coordonnées dans une grille !
    colone a et ligne 5 ca serait un 2
    ainsi de suite !

    Mon problème est le suivant :
    comment faire pour lire dans le fichier et après dire que le chiffre doit aller a sa bonne place ?

    J'ai déja mon idée avec des tests une fois que j'ai lu dans le fichier !

    Par exemple si j'utilise des records :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    coord = record 
              col:char;
              ligne:byte;
              valeur:byte;
            end;
    et donc après on assigne le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    assign(F,'c:\.......txt');
    reset(F);
    Mais après je bloque...

    Il faut mettre : read(F, -ici je vois pas quoi mettre pour lire par exemple rien que le a-

    Quelqu'un pourrait m'aider ?
    Ou s'il faut plus d'informations je reste a votre disposition !

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Il faut que tu lises ligne par ligne ton fichier, donc readln(F, ligne), où ligne est une string. Ensuite c'est ta responsabilité de découper cette ligne en fonction des espaces. Tu peux regarder l'aide en ligne de ton compilateur, et les fonctions pos et copy

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Donc je mets par exemple
    je m'arrange pour découper ligne en coord.col, coord.ligne, coord.val et après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toutextxy(x,y,coord.val);

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 847
    Points
    4 847
    Par défaut
    Il faut que tu déclares ton fichier comme étant de type File of coord avec coord le nom de ton record, si je me souviens bien.

    Par contre, il faut que ton fichier corresponde exactement au record en question, ce qui n'est pas le cas ici : il y'a des espaces entre les données.

    Qui plus est, si tu déclares tes champs "ligne" et "valeur" en tant que byte, il va lire un octet, donc si tu as une ligne n°10, il ne faudra pas qu'il soit marqué "10" dans ton fichier, mais la valeur binaire correspondante (du moins c'est ce qui me semble logique, mais je ne peux pas l'affirmer).

    L'idée d'un record est donc intéressante, mais le fichier doit-être généré par ton programme Pascal, parce que tu auras du mal à le faire à la main (à moins d'utiliser un éditeur hexadécimal ).

    Si tu veux lire un fichier que tu auras écris toi-même, oublie le record et "parse" le fichier toi même : pour chaque ligne, tu divise la chaîne de caractère lue en 3 parties en fonction de la position du caractère d'espacement " ".

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    parce que en faite je n'ai pas le choix j'aurais un fichier texte avec les coordonnées déja insérée dedans !
    je ne peux rien y changer ! :s

    donc quel serait le moyen (en pseudo code) pour moi parvenir a lire caractere par caractere les 3 premiers element de chaque ligne?
    et les traiter séparément?

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 847
    Points
    4 847
    Par défaut
    Dans ce cas, utilise la solution de wormful_sickfoot : tu lis ligne par ligne ton fichier avec readln, et tu trouve la position des espaces avec pos, puis tu utilises les fonctions copy ou delete et val pour récupérer tes données.

    Après pour le traitement, c'est à toi de voir, mais il devrait être le même que si tu demandais les valeurs à l'utilisateur (ou très semblable).

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par Loceka
    Il faut que tu déclares ton fichier comme étant de type File of coord avec coord le nom de ton record, si je me souviens bien.ais je ne peux pas l'affirmer).
    Il parle d'un fichier TEXTE, pas d'un fichier binaire (qui est ce qu'on obtient en utilisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var
      f : file of coord;

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type 
    coord = record  col:char;
                    lign:byte;
                    val:byte;
                  end;
    gr = file of coord;
    j'avais ca pour la déclaration du fichier...

    Mais apres...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure remplissage(????????);
    begin
    assign(gr,'c:\g1.txt');
    reset(gr);
    ??????
    close(gr);
     
    end;

  9. #9
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Non justement faut faire l'inverse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var F: Text;
        Ligne: String;
    begin
      Assign(F, 'machin.txt');
      Reset(F);
      Readln(F, Ligne);
      { ligne contient 'a 5 2' par exemple }
    end;

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci jusque ici tout fonctionne bien !
    si je demande de placer la ligne je vois bien la premiere ligne !

    maintenant il faut alors diviser cette ligne en 3 parties
    (la partie colone, ligne et valeur)

    par quel moyen dois-je m'y prendre?

    EDIT :
    J'ai trouvé tout marche bien a présent !
    j'ai en faite pris ligne comme un string[5]
    colo : char;
    rang : byte;
    val:byte;

    colo:=ligne[1]
    rang:=ligne[3]
    et ainsi de suite !

  11. #11
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 847
    Points
    4 847
    Par défaut
    Apparement tu ne lis pas ou tu ne comprends pas ce qu'on t'as dit...

    Il faut que tu utilises la fonction pos ! Pour comprendre comment elle fonctionne, tu peux t'aider de l'aide de ton compilateur, ou d'internet...

Discussions similaires

  1. [DATA] Importation fichier texte contenant des emails, dates, etc.
    Par VuVietHai dans le forum SAS Base
    Réponses: 1
    Dernier message: 29/07/2014, 11h57
  2. Créer un fichier texte contenant des ; sans les " imposés par Excel
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2012, 21h22
  3. Réponses: 11
    Dernier message: 14/06/2011, 18h37
  4. Charger un fichier texte contenant des caractères
    Par dm_manu dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/12/2006, 02h37
  5. Réponses: 3
    Dernier message: 22/06/2006, 17h34

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