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 :

Inversion d'un fichier texte


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Inversion d'un fichier texte
    Voici comment inversé tout un fichier text avec Turbo Pascal...
    Tout les commentaire seront appréciés
    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
    program inverttx;
    uses wincrt;
    var t,t2:text; 
        ch:string;
    procedure invertch(var ch:string);
    var i,l:integer;c:char;
    begin
         l:=length(ch);
         for i:=1 to l div 2 do
         begin
         c:=ch[i];
         ch[i]:=ch[l-i+1];
         ch[l-i+1]:=c;
         end;
    end;
     
    function nbrline(var t:text):integer;
    begin
    if not(eof(t)) then
       begin
       readln(t);
       nbrline:=1+nbrline(t);
       end
    else nbrline:=0;
    end;
     
    procedure seektxt(var t:text;p:integer);
    var i:integer;
    begin
    reset(t);
    for i:=1 to p do
        readln(t);
    end;
     
    procedure writet2txt(var t,t2:text;n:integer);
    var x1:string;
    begin
    seektxt(t,n);
       readln(t,x1);
       invertch(x1);
       if n=0 then write  (t2,x1)
              else writeln(t2,x1);
    end;
     
    procedure inverttxt(var t,t2:text;n:integer);
    begin
    if n>=0 then
       begin
            writet2txt(t,t2,n);
            inverttxt(t,t2,n-1);
       end;
     
    end;
     
    begin
         assign(t,'c:\text.txt');
         reset(t);
         assign(t2,'c:\text2.txt');
         rewrite(t2);
         inverttxt(t,t2,nbrline(t)-1);
         close(t2);
         close(t);
         erase(t);
         rename(t2,'c:\text.txt');
    end.

  2. #2
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    j'ai pas tester ton code mais juste je voudrais savoir une ou deux choses qui me donnerais envie de le faire
    -C'est dans quel but tu le fais
    -quand tu parles d'inverser tout un fichier c'est:
    voila un texte
    je fais parti des membres
    de ce merveilleux forum
    est ce que ton code fait que ça devient?
    serbmem sed itrap siaf ej
    murof xuellievrem ec ed
    ou ça devient ça?
    murof xuellievrem ec ed
    serbmem sed itrap siaf ej
    Et comme c'est un truc assez utile je ne vois pas de commentaire apparente dans ton code
    (tout ce que je dis n'est en aucun cas pour te decourager de ce que tu a fais)

    Sinon bravo et bon courage
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gio,

    Ce n'est pas trop mal.

    Il faut soigner l'indentation, par 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
    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
    program inverttx;
     
    uses wincrt;
     
    var 
      t, t2 : Text; 
      ch : string;
     
    procedure invertch(var ch : string);
    var 
      i, l : Integer;
      c : Char;
    begin
      l := Length(ch);
      for i := 1 to l div 2 do
      begin
        c := ch[i];
        ch[i] := ch[l - i + 1];
        ch[l - i + 1] := c;
      end;
    end;
     
    function nbrline(var t : Text): Integer;
    begin
    {  if not (Eof(t)) then
      begin
        Readln(t);
        nbrline := 1 + nbrline(t);
      end
      else 
        nbrline := 0; }
     
      { On admet que t est positionné au début.
        Si ce n'est pas le cas, ajouter Reset(t) }
      nbrline := 0;
      while not(Eof(t)) do
      begin
        ReadLn(t);
        Inc(nbrline);
      end;
    end;
     
    procedure seektxt(var t : Text; p : Integer);
    var 
      i : Integer;
    begin
      Reset(t);
      for i := 1 to p do
        Readln(t);
    end;
     
    procedure writet2txt(var t, t2 : Text; n : Integer);
    var 
      x1 : string;
    begin
      seektxt(t, n);
      Readln(t, x1);
      invertch(x1);
      if n = 0 then 
        Write  (t2, x1)
      else 
        Writeln(t2, x1);
    end;
     
    procedure inverttxt(var t, t2 : Text; n : Integer);
    begin
      if n >= 0 then
      begin
        writet2txt(t, t2, n);
        inverttxt(t, t2, n - 1);
      end;
    end;
     
    begin
      Assign(t, 'c:\text.txt');
      Reset(t);
      Assign(t2, 'c:\text2.txt');
      Rewrite(t2);
      inverttxt(t, t2, nbrline(t) - 1);
      Close(t2);
      Close(t);
      Erase(t);
      Rename(t2, 'c:\text.txt');
    end.
    Au passage j'ai corrigé la fonction nbrline pour la simplifier.

    C'est d'ailleurs le reproche que je ferais au total : c'est un peu compliqué, on peut faire plus simple.

    Côté mis en forme, il faudrait utiliser quelques majuscules dans les noms des procédures/fonctions, pour faciliter la lecture.

    Par exemple, nbrLine se lit plus aisément que nbrline, on voit tout de suite que le nom se décompose en plusieurs mots.

    Dans le cas de noms provenant de la concaténation de plusieurs mots, une règle souvent utilisée est de mettre la 1ère lettre de chaque mot en majuscule (souvent sauf pour la 1ère lettre du nom, mais c'est un choix un peu moins répandu).
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour
    @krachik
    Mon programme transforme ce texte
    je fais parti des membres
    de ce merveilleux forum
    en
    murof xuellievrem ec ed
    serbmem sed itrap siaf ej
    @droggo
    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
    function nbrline(var t : Text): Integer;
    begin
    {  if not (Eof(t)) then
      begin
        Readln(t);
        nbrline := 1 + nbrline(t);
      end
      else 
        nbrline := 0; }
     
      { On admet que t est positionné au début.
        Si ce n'est pas le cas, ajouter Reset(t) }
      nbrline := 0;
      while not(Eof(t)) do
      begin
        ReadLn(t);
        Inc(nbrline);
      end;
    end;
    Merci beaucoup pour les conseils

Discussions similaires

  1. Inverser le contenu d'un fichier texte
    Par donzelli2518 dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 16/05/2011, 18h31
  2. Réponses: 1
    Dernier message: 05/08/2010, 21h37
  3. Réponses: 1
    Dernier message: 18/04/2007, 18h13
  4. fichier texte dos vers linux et inversement
    Par mencaglia dans le forum C++
    Réponses: 4
    Dernier message: 23/09/2006, 11h59
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

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