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

 Delphi Discussion :

Append - rajouter un texte à la fin d'un myfile.txt


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Append - rajouter un texte à la fin d'un myfile.txt
    Bonjour,
    Comment faire pour rajouter un texte depuis memo1 vers un fichier texte myfile.txt ?
    J'ai essayé
    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
     
    var
       myFile : TextFile;
       text   : string;
     
     begin
        AssignFile(myFile, 'Test.txt');
       ReWrite(myFile);
     
        Append(myFile);
     
         WriteLn(myFile, memo1.lines);
     
         CloseFile(myFile);
    end;
    Mais ça ne fonctionne pas !

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Soyez précis : "ne fonctionne pas" n'est pas une vraie description du problème !
    Une seule question (et piste): que fais l'instruction rewrite ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Rewrite crée un fichier vide avant de l'ouvrir. Append ouvre un fichier existant et place le pointeur en fin de fichier. Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if FileExists()
    then Append()
    else Rewrite();

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,
    il est aussi conseillé de faire un flush après écriture comme le dit l'aide de D7 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        AssignFile(f, OpenDialog1.FileName);
        Append(f);
        Writeln(f, 'J''ajoute quelque chose à la fin du fichier.');
        { Insérer ici un code nécessitant un Flush avant de fermer le fichier }
        Flush(f);  { Pour que le texte soit réellement écrit dans le fichier }
        CloseFile(f);
    A+
    Charly

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Merci beaucoup, maintenant ça fonctionne !
    Maintenant, je souhaite tester si mon fichier texte est vide ou pas. J'ai le code 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
    17
    18
    19
     
    function IsFileEmpty(var FileName : string) : bool;
     var
       f : file;
     begin
       AssignFile(f, FileName);
       Reset(f, 1);
       if FileSize(f) = 0 then
         IsFileEmpty := true else
         IsFileEmpty := false;
       Close(f);
     end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
         if IsFileEmpty ('MyFile.txt')then
         showmessage ('Empty')
         else     showmessage ('Not empty');
    end;
    Mais j'obtiens une erreur : "Constant object cannot be passed as var parameter"

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut
    Bonjour,
    Dans ce code d'obtiens "Incompatibles types : String and Integer" :

    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
     
    function TextfileSize(const name: string): LongInt;
    var
      SRec: TSearchRec;
    begin
      if FindFirst(name, faAnyfile, SRec) = 0 then
      begin
        Result := SRec.Size;
        Sysutils.FindClose(SRec);
      end
      else
        Result := 0;
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    if textfilesize ('Mytextfile.txt'= 0  then
    showmessage('Empty')
    else
    showmessage('Not Empty');
    end;

  7. #7
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    bonjour à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    if textfilesize ('Mytextfile.txt') = 0  then  //rajout de parenthèse
    showmessage('Empty')
    else
    showmessage('Not Empty');
    end;

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Points : 72
    Points
    72
    Par défaut Merci !!
    Merci beaucoup Basile, je n'avais pas vu cela !!
    Maintenant, j'ai un autre problème : je dois rajouter du texte entre chaque lettre d'un memo. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if memo1.text<> '' then
    begin
    memo2.text := memo1.[CHAQUE CARACTERE=CHAQUE CARACTERE + 'a'];

  9. #9
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    bonjour à tous,

    il y a plein de possibilités, j'en montre une, sans doute pas la plus rapide...

    Il suffirait de balayer tous les caractères de chaque ligne et de rajouter 'a' à chaque fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var i : integer;
        s : string;
    begin
      s:='';
      for i:=1 to length(Memo1.Text)-1 do
        s:=s+Memo1.Text[i]+'a';
      Memo2.Text:=s;
    mais ce code ne marche pas quand il y a plusieurs lignes.
    Pour ça, il faudrait répéter ce traitement pour toutes les lignes en utilisant Memo1.Lines.Count pour avoir le nombre de ligne ou jouer avec les caractères chariot.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Attention le principe du forum est : une question par sujet de départ
    Pourquoi ? parce qu'ainsi un autre membre qui ne recherche par exemple :"je souhaite tester si mon fichier texte est vide ou pas." ne trouvera pas la réponse pourtant indiquée dans cette discussion
    Etant modérateur flemmard aujourd'hui, je laisse passer (pas d'avertissement), ne découpe pas la discussion en plusieurs autres etc... Peut être qu'un autre moins "cossard' fera le boulot
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut

    un peu tardivement ...

    Citation Envoyé par kikica Voir le message
    Mais j'obtiens une erreur : "Constant object cannot be passed as var parameter"
    Tu as dû passé une constante du genre 'toto.txt' à ta fonction IsFileEmpty qui exige un paramètre var i.e. une variable.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. [Toutes versions] Comment rajouter du texte à la fin d'une cellule
    Par idva5492 dans le forum Excel
    Réponses: 3
    Dernier message: 16/06/2015, 17h43
  2. Rajout de texte à la fin d'une cellule
    Par idva5492 dans le forum Excel
    Réponses: 4
    Dernier message: 15/06/2015, 14h14
  3. [VB6] Rajouter du texte dans un fichier
    Par unacsed dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 04/09/2006, 12h30
  4. rajouter du texte sur une image
    Par dietrich dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 31/03/2006, 17h20
  5. Réponses: 5
    Dernier message: 26/12/2004, 00h17

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