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 :

Transformer un fichier texte en matrice


Sujet :

Turbo Pascal

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 4
    Par défaut Transformer un fichier texte en matrice
    Salut à tous,

    Il y a dans mon TD un exo qui me demande de transformer un fichier texte comprenant des nombres en une matrice (chaque case de la matrice comprenant exactement un caractère du fichier).

    Le fichier texte en question est du genre :
    que je dois transformer en une matrice dont la case (ligne=1,colonne=1) contient 0, la case (ligne=1,colonne=2) contient 4, la case (ligne=2,colonne=2) contient 5 etc.

    Seulement, je ne vois absolument pas comment séparer les différents caractères de mon fichier texte . Merci d'avance pour votre aide
    (le code devant être valable pour tous les autres fichiers textes dans le même format ^^).

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Tu peux faire quelque chose de générique, peu importe le nombre de chiffres par lignes/colonnes (tu auras néanmoins un maximum, si tu utilises des tableaux statiques, déclarés lors de création du programme).

    Le principe: lire ligne par ligne avec readln, puis parcourir chaque ligne lue caractère par caractère. Ceci avec des boucles while

  3. #3
    Membre éprouvé Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Par défaut
    Salut,

    Petite rappel pour répondre à ton problème :
    Seulement, je ne vois absolument pas comment séparer les différents caractères de mon fichier texte
    L'accès au nième caractère d'une variable "chaine" de type String se fait grâce à la syntaxe suivante :où n est un entier.
    Voila, et bonne chance.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 4
    Par défaut
    Merci pour vos réponses

    Voici ce que j'ai concoté :

    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
    program texte_matrice;
    var    F : text;
    	t_matrice : array[1..3,1..3] of char;
    	i,j : integer;
    	ligne : string;
     
    begin
    assign(F,'nombres.txt');
    reset(F);
    for i:=1 to 3 do
    begin 
    readln(F,ligne);
    for j:=1 to 3 do t_matrice[i][j]:=ligne[j];
    end;
    close(F);
    end.
    Pourriez-vous me dire si c'est bon ? (Je vous demande ça parce qu'en fait je sais pas comment afficher la matrice) Merci d'avance !

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Oui ca me parait bon, mais pense à indenter ton code, ca aide à la relecture.

    Pour l'affichage, tu parcours ta matrice comme tu l'as fait pour le remplissage, et tu affiches chaque case avec write (sauf le dernier chiffre de la ligne où tu peux utiliser writeln pour aller à la ligne suivante).

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 1 to 23 do
    begin
        for j := 1 to 11 do
        write(t_matrice[i,j], ' ');
        writeln;
    end;
    J'ai essayé plusieurs variantes de ça, mais cela ne marche que dans le cas des matrices carrées

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 4
    Par défaut
    En fait, voici mon fichier texte car.txt

    et le code que j'ai utilisé :


    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
    program texte_matrice;
    uses crt;
    var  F : text;
          ligne : string;
          t_matrice : array[1..4, 1..3] of char;
          i,j : integer;
     
    begin
     
    //Création de la matrice
    assign (F, 'car.txt');
    reset(F);
    for i:=1 to 3 do
        begin 
        readln(F,ligne);
        for j:=1 to 4 do t_matrice[i][j]:=ligne[j];
        end;
    close(F); 
     
     
    //Affichage de la matrice
    for i := 1 to 3 do
        begin
        for j := 1 to 4 do  
        write(t_matrice[i][j], ' ');
        writeln;
        end;
     
    end.
    Pour une matrice comme celle-là (3 lignes et 4 colonnes), ça marche parfaitement. Par contre, si je change le nombre des colonnes (en changeant les valeurs finales de i et j bien-sûr), ça m'affiche n'importe quoi

    Merci d'avance

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Mai,

    Il n'y a aucune raison que ça ne marche pas si tu utilises les valeurs correctes pour les dimensions de la matrice et les compteurs de boucles.

    Pour éviter les problèmes, il faut utiliser des constantes, genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
        nb_lignes = 3;
        nb_col = 4;
    de cette manière, une modification des valeurs est automatiquement répercutée dans tout le programme lors de la compilation, et ça évite de nombreuses erreurs de remplacement.

    Ceci est vrai si tu tiens à fixer les dimensions à la compilation, sinon il faudra apprendre à gérer des tableaux de taille dynamique, taille qui ne sera décidée qu'au moment de l'exécution.

    ps : accessoirement, on utilise généralement le 1er indice pour les lignes, mais ça n'a rien d'obligatoire, bien entendu.

  9. #9
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    voila une autre approche :

    (testé sous delphi 2009, ne passera pas peut être en TP)

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    program textmatrix;
     
    uses
      SysUtils;
     
     
    // Matrix properties
    const
      MaxCol = 5;
      MaxRow = 5;
     
     
    // The Matrix
    type
      TMatrixCol  = array[0..MaxCol] of Char;  // no -1 ReadLn need +1 (AZT)
      TMatrixRows = array[0..MaxRow-1] of TMatrixCol;
     
     
    // Fill #0 into a Matrix (reset)
    procedure ResetMatrix(var aMatrix: TMatrixRows);
    var R, C: integer;
    begin
      for R := 0 to MaxRow-1 do
        for C := 0 to MaxCol-1 do
          aMatrix[R, C] := #0;
    end;
     
     
    // reading text file into a Matrix
    procedure ReadFile(aFileName: string; var aMatrix: TMatrixRows);
    var
      F : TextFile;
      L : integer;
    begin
      // assign file
      Assign(F, aFileName);
      // opening in read
      Reset(F);
     
        // init Line counter
        L := 0;
     
        // reading rows of file
        while (not EOF(F)) or (L = MaxRow) do
        begin
          ReadLn(F, aMatrix[L]);
     
          // increment Line counter
          inc(L);
        end;
      // close file
      Close(F);
    end;
     
     
    // show a Matrix as array
    procedure WriteMatrixArray(aMatrix: TMatrixRows);
    var R, C: integer;
    begin
      for R := 0 to MaxRow-1 do
      begin
        write('[');
        for C := 0 to MaxCol-1 do
        begin
          if C < (MaxCol-1) then
            write(aMatrix[R, C], ', ')
          else
            write(aMatrix[R, C]);
        end;
        writeln(']');
      end;
    end;
     
     
    // show a Matrix as text
    procedure WriteMatrix(aMatrix: TMatrixRows);
    var R: integer;
    begin
      for R := 0 to MaxRow-1 do
        writeln(aMatrix[R]);
    end;
     
     
    var
      Mtx: TMatrixRows;
    begin
      // reseting Matrix
      ResetMatrix(Mtx);
     
      // reading Text file (here: [program name].txt)
      ReadFile(changeFileExt(paramStr(0), '.txt'), Mtx);
     
      // show Matrix as array
      WriteMatrixArray(Mtx);
     
      Writeln;
     
      // show Matrix as Text
      WriteMatrix(Mtx);
     
     
      // wait
      readLn;
    end.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Lai,

    Décidément, tu n'arrives pas à te mettre dans la tête que le forum n'est pas là pour fournir des solutions clés en mains pour les exercices, ni pour les programmes personnels.

Discussions similaires

  1. Transformer un fichier texte
    Par Marco_SAP dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 08/07/2009, 17h13
  2. créer fichier text contenant matrice de covariance
    Par juju44 dans le forum SAS Base
    Réponses: 1
    Dernier message: 03/04/2009, 12h04
  3. Réponses: 2
    Dernier message: 16/05/2008, 16h25
  4. TransformationS de fichier texte
    Par carterslap dans le forum Solaris
    Réponses: 1
    Dernier message: 29/02/2008, 14h18
  5. [Débutante] Transformation de fichiers texte
    Par Krokro00 dans le forum MATLAB
    Réponses: 17
    Dernier message: 12/10/2007, 16h09

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