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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    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.

  3. #3
    Membre averti
    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
    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 éclairé
    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
    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 chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    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 ?

  6. #6
    Membre éclairé
    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
    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 ?

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    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.

  8. #8
    Membre averti
    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
    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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    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.

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