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 :

Modification d'un fichier texte


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Modification d'un fichier texte
    Bonjour,

    Récemment je me suis intéressé à la manipulation de fichiers textes avec le pascal, mais je rencontre des difficultés.

    J'aimerais aller piocher des informations dans un fichier texte, et en remplacer.
    Pour simplifier le problème, le fichier texte (en réalité un dat) sera le suivant :
    Et l'objectif sera de faire un programme qui parcours le fichier texte en remplaçant les 1 par des 2. On devrait donc obtenir à la fin :

    J'écris donc le programme suivant :

    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 lecteurtxt(F);
     
    VAR F : text; S : string;
     
    BEGIN
    	assign(F, 'texte.dat');
    	filemode:=2;
    	rewrite(F);
     
    	WHILE NOT eof(F) DO BEGIN
    		readln(F,S);
    		IF S='1' THEN writeln(F,'2');
    	END;
     
    	close(F);
    END.
    Résultat : le programme ne fait que vider le fichier texte (j'ai l'impression qu'il plante en cours de route).


    En fait, mon but final serait d'avoir une fonction "lireLigne(F:text ; n:integer): string;" qui renvoie la chaine de caractères de la ligne n du fichier F, et une procédure "remplacerLigne(F:text ; n:integer ; S:string);" qui supprime la ligne n du fichier F pour mettre à la place la chaine de caractères S.


    Merci d'avance...

  2. #2
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Je t'ai fait un petit programme explicatif à partir du tien pour que tu vois bien les étapes (tu peux ensuite virer les "writeln" et les "readln" qui ne sont là que comme "points d'arrêt".

    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
    program lecteurtxt;
     
    type
     tab = array[1..10] of string;
     
    VAR F : text; S : string;  i:integer; MonTableau : tab;
     
    BEGIN
     
     
     
        i:=0;
    	assign(F,'texte.dat');
    	filemode:=2;
    	reset(F);
     
    	WHILE NOT eof(F) DO 
             BEGIN
                    inc(i);
    		readln(F,S);
                    MonTableau[i]:=s;
                    writeln('Montableau ',i,' est : ', s);
                    if MonTableau[i]='1' THEN  MonTableau[i]:='2';
                    writeln('maintenant Montableau ',i,' est : ', Montableau[i]);
                    readln;
             END;
     
             readln;
            writeln('fermeture fichier');
            writeln('assignation fichier');
            readln;
            assign(F,'texte.dat');
             filemode:=2;
             writeln('réouverture en écriture');
             readln;
    	rewrite(F);
            readln;
            writeln('nouvelle boucle');
     
                    for i:=1 to 10 do
                    BEGIN
                    writeln(F, MonTableau[i]);
                    writeln(' s vaut : ', Montableau[i]);
                    readln;
                     END;
     
          close(F);
     
     
    END.
    Ce programme suppose que tu as 10 valeurs dans ton fichier. A priori on ne sait pas combien de valeurs on a, il faut donc incrémenter une variable quand on lit le fichier. Cette variable devient l'index maximum du tableau.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Erm, ce programme lit en effet ce qu'il y a dans le texte, mais en ouvrant le fichier après le passage du programme, rien n'a changé
    J'ai l'impression qu'il plante lors de la réécriture...

    Merci pour la réponse, je vois comment piocher des informations dans le texte maintenant.
    Par contre pour en écrire, le problème n'est toujours pas résolu...

  4. #4
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Un conseil, si tu ne souhaite pas obligatoirement que ton utilisateur puisse ouvrir ton fichier avec le bloc-not, tu peux utiliser les fichiers typés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IntegerFIle : File of Integer;
    par exemple. ça simplifie vachement la vie.

  5. #5
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Citation Envoyé par Monsieur Griboux Voir le message
    Erm, ce programme lit en effet ce qu'il y a dans le texte, mais en ouvrant le fichier après le passage du programme, rien n'a changé
    J'ai l'impression qu'il plante lors de la réécriture...
    .

    Bonsoir,

    Voici le contenu du fichier test.dat avant l'utilisation du programme que j'ai donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    1
    1
    1
    0
    0
    1
    1
    0

    Et voici le contenu de même fichier après l'utilisation de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    2
    2
    2
    0
    0
    2
    2
    0
    Les "1" ont bien été remplacés par des "2" comme tu l'as demandé.

    Explique-moi ce qui ne va pas car je ne comprends pas.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  6. #6
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Citation Envoyé par titeeee Voir le message
    Un conseil, si tu ne souhaite pas obligatoirement que ton utilisateur puisse ouvrir ton fichier avec le bloc-not, tu peux utiliser les fichiers typés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IntegerFIle : File of Integer;
    par exemple. ça simplifie vachement la vie.
    Excuse-moi, je ne veux pas paraître soupe au lait mais quel est le rapport entre ton message et la question posée par Mr Griboux ?
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  7. #7
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    Citation Envoyé par richard Voir le message
    Excuse-moi, je ne veux pas paraître soupe au lait mais quel est le rapport entre ton message et la question posée par Mr Griboux ?
    Je lui dis juste que les fichiers typée sont plus simple à utiliser que les fichiers textes. Comme il dit que ce sont des .DAT, c'est pour stocker des données. Il n'a peut être pas envie que tout le monde puisse ouvrir ce fichier avec son éditeur de texte préféré. Peut-être qu'il utilise les fichiers textes en dépit car il ne connaît pas les fichiers typés (comme moi au début). Bref peut être que ça l'aidera, peut être pas, mais étant donnée qu'un message ne coûte rien, ça vaut le coup d'essayer non ?

  8. #8
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Ah, OK.

    J'avais pensé que tu lui suggérais qu'en changeant le type de ses variables il allait résoudre son problème (que je ne comprends toujours pas d'ailleurs puisque le programme que je lui ai fourni fonctionne parfaitement sur mon PC).
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  9. #9
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    c'est parce qu'il fonctionnait, que je n'ai pas eu besoins de l'aider à le résoudre

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par richard Voir le message
    voici le contenu de même fichier après l'utilisation de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    2
    2
    2
    0
    0
    2
    2
    0
    Les "1" ont bien été remplacés par des "2" comme tu l'as demandé.

    Explique-moi ce qui ne va pas car je ne comprends pas.
    C'est étrange, chez moi le même programme ne modifie pas le fichier texte.
    J'ai l'impression qu'il plante après avoir dit "réouverture en écriture" : il affiche des caractères bizarres une fraction de secondes, et se ferme

  11. #11
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    J'utilise FreePascal et windows XP mais je en vois pas en quoi cela peut jouer. En revanche il y a peut-être un problème de chemin. Il faut essayer de mettre le programme et le fichier dans le même répertoire (en cas d'utilisation de Turbo Pascal je crois me souvenir qu'il ne faut pas de nom de répertoire supérieur à 8 lettres, limitation héritée de DOS ou de signes autres que des lettres et des chiffres mais c'est à vérifier).

    Mon programme fonctionne forcément donc il y a un autre problème peut-être un pb de chemin relatif ou quelque chose de ce type.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    voici une solution avec les fichiers textes:
    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
    PROGRAM lecteurtxt(F);
    uses wincrt;
    VAR f,f2: text; S : string; n:integer;
    procedure saisie(var f:text;var n:integer);
    var i:integer ;
    begin
    rewrite(f);
        repeat
        writeln('donner le nombre de caractéres a ajouter');readln(n);
        until n > 2 ;
        for i:= 1 to n do
        begin
         writeln('donner un caractére (0,1)');readln(s);
         writeln(f,s);
        end;
    close(f);
    end;
    procedure remplacer(var f,f2:text);
    begin
    rewrite(f2);
    reset(f);
            while not(eof(f)) do     
             begin
              readln(f,s);
              if s='1' then writeln(f2,'2')
                       else writeln(f2,'0');
              end;
    close(f);
    close(f2);
    end;
    procedure affichage(var f2:text);
    begin
    reset(f2);
    reset(f);
    write('le fichier initial : ');
               while not(eof(f)) do
                begin
                readln(f,s);
                write(s,' ');
                end;
    writeln;
    write('le fichier modifier : ');
     
              while not(eof(f2)) do
                begin
                readln(f2,s);
                write(s,' ');
                end;
    close(f2);
    close(f);
     
    end;
     
    BEGIN
    	assign(F,'c:\texte.txt');
            assign(F2,'c:\texte2.temp');
    	filemode:=2;
            saisie(f,n);
            remplacer(f,f2);
            clrscr;
            affichage(f2);
     
    END.
    concernant ton code tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROGRAM lecteurtxt(F);
    uses wincrt;
    type F_ent=file of integer;
    VAR F : f_ent; S : string;
     
    BEGIN
    	assign(F, 'texte.dat');
    ...
    END.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci.

    Mon compilateur m'indique qu'il ne connait pas "clrscr;" mais je vais faire sans, je suppose que c'est juste pour nettoyer l'écran.

Discussions similaires

  1. [AIDE] modification d'un fichier texte
    Par babap1 dans le forum C++
    Réponses: 6
    Dernier message: 16/01/2008, 11h49
  2. Réponses: 50
    Dernier message: 19/10/2007, 23h38
  3. modification d'un fichier texte
    Par didy59 dans le forum C
    Réponses: 2
    Dernier message: 25/11/2006, 11h38
  4. Modification d'un fichier texte
    Par velo83 dans le forum C
    Réponses: 14
    Dernier message: 21/05/2006, 07h28
  5. Réponses: 4
    Dernier message: 21/04/2006, 21h55

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