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 :

Remplacer une ligne dans fichier txt !


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut Remplacer une ligne dans fichier txt !
    Bonjour à toutes et à tous,

    Avec mon code, si mon TCheckbox est coché, je dois écrire une ligne dans mon fichier et si pas, je dois remplacer cette ligne par une autre !

    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
     
    try
     
      If FServer.Ckid.checked then begin
     
      AssignFile(f, chappli + 'Cincapip.html');
     
      Rewrite(f);
     
      WriteLn(f, '<!DOCTYPE html>');
      WriteLn(f, '<html><!-- ' + DateTimeToStr(Now) + ' -->');
      WriteLn(f, '<head>');
      WriteLn(f, '<title>Votre IP</title>');
      WriteLn(f, '</head>');
      WriteLn(f, '<body><!-- ' + FServer.IPServer.text + ' -->');
      WriteLn(F, '<!-- Votre IP -->Votre IP modifiée le : ' +datetostr(date) + ' à '+ timetostr(time));
      WriteLn(f, '<br><br>');
      WriteLn(f, '<a href="http://'+FServer.IPServer.text+ ':'+FServer.EDid.text+'">'+ FServer.IPServer.text +'') ;
      WriteLn(f, '</a>');
      WriteLn(f, '</body>');
      WriteLn(f, '</html>');
     
      end
      else begin
     
      AssignFile(f, chappli + 'Cincapip.html');
     
      Reset(F);
      Rewrite(f);
     
      WriteLn(f, '<!DOCTYPE html>');
      WriteLn(f, '<html><!-- ' + DateTimeToStr(Now) + ' -->');
      WriteLn(f, '<head>');
      WriteLn(f, '<title>Votre IP</title>');
      WriteLn(f, '</head>');
      WriteLn(f, '<body><!-- ' + FServer.IPServer.text + ' -->');
      WriteLn(F, '<!-- Votre IP -->Votre IP modifiée le : ' +datetostr(date) + ' à '+ timetostr(time));
      WriteLn(f, '<br><br>');
      WriteLn(f, '<a href="http://'+FServer.IPServer.text+'">'+ FServer.IPServer.text +'') ;
      WriteLn(f, '</a>');
      WriteLn(f, '</body>');
      WriteLn(f, '</html>');
     
      end
    finally
     
    CloseFile(f);
     
    end;
    end;
    Et la ligne ne se remplace pas si le fichier a déjà été créé, par contre si il n'a pas été créé et que le TchekBox est coché, la 1ère partie s'écrit ou la 2ième.

    Si quelqu'un voit l'erreur, merci d'avance,

    @+,

    Cincap

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    Salut,
    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
    AssignFile(f, chappli + 'Cincapip.html');
    try
      Rewrite(f);
      WriteLn(f, '<!DOCTYPE html>');
      WriteLn(f, '<html><!-- ' + DateTimeToStr(Now) + ' -->');
      WriteLn(f, '<head>');
      WriteLn(f, '<title>Votre IP</title>');
      WriteLn(f, '</head>');
      WriteLn(f, '<body><!-- ' + FServer.IPServer.text + ' -->');
      WriteLn(F, '<!-- Votre IP -->Votre IP modifiée le : ' +datetostr(date) + ' à '+ timetostr(time));
      WriteLn(f, '<br><br>');
      if FServer.Ckid.checked then
        WriteLn(f, '<a href="http://'+FServer.IPServer.text+ ':'+FServer.EDid.text+'">'+ FServer.IPServer.text +'')
      else
        WriteLn(f, '<a href="http://'+FServer.IPServer.text+'">'+ FServer.IPServer.text +'') ;
      WriteLn(f, '</a>');
      WriteLn(f, '</body>');
      WriteLn(f, '</html>');
    finally
      CloseFile(f);
    end;
    @+

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    @ nuxtay, merci pour ta suggestion mais j'avais déjà essayé sans succès, en fait dès que l'application est ouverte je dois observer le changement Tchekbox coché ou non.

    Je teste encore,

    @+,

    Cincap

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    @ tourlourou, même chose, je pense qu'il faut éffacer le fichier *.html et le réécrire suivant la demande.

    Il me semblait avoir vu qu'il était possible de remplacer une ligne lors du rewrite mais !!!!!!!!!!!!!

    @+,

    Cincap

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Je ne suis pas sûr que le Reset suivi d'un Rewrite dans le else soit pris en compte si le fichier existait :
    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
    try
      AssignFile(f, chappli + 'Cincapip.html');
      Rewrite(f);
     
      WriteLn(f, '<!DOCTYPE html>');
      WriteLn(f, '<html><!-- ' + DateTimeToStr(Now) + ' -->');
      WriteLn(f, '<head>');
      WriteLn(f, '<title>Votre IP</title>');
      WriteLn(f, '</head>');
      WriteLn(f, '<body><!-- ' + FServer.IPServer.text + ' -->');
      WriteLn(F, '<!-- Votre IP -->Votre IP modifiée le : ' +datetostr(date) + ' à '+ timetostr(time));
      WriteLn(f, '<br><br>');
     
      If FServer.Ckid.checked then
        WriteLn(f, '<a href="http://'+FServer.IPServer.text+ ':'+FServer.EDid.text+'">'+ FServer.IPServer.text +'') 
      else 
        WriteLn(f, '<a href="http://'+FServer.IPServer.text+'">'+ FServer.IPServer.text +'') ;
     
      WriteLn(f, '</a>');
      WriteLn(f, '</body>');
      WriteLn(f, '</html>');
     
    finally
     
      CloseFile(f);
     
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    On peut écrire la même chose d'une manière différente

    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
     
    var
      lst : TStringList;
      sFileName : String;
    begin
    lst := TStringList.Create;
    try
      sFileName := chappli + 'Cincapip.html'
     
      lst.Add('<!DOCTYPE html>');
      lst.Add('<html><!-- ' + DateTimeToStr(Now) + ' -->');
      lst.Add('<head>');
      lst.Add('<title>Votre IP</title>');
      lst.Add('</head>');
      lst.Add('<body><!-- ' + FServer.IPServer.text + ' -->');
      lst.Add('<!-- Votre IP -->Votre IP modifiée le : ' +datetostr(date) + ' à '+ timetostr(time));
      WriteLn(f, '<br><br>');
     
      If FServer.Ckid.checked then
        lst.Add('<a href="http://'+FServer.IPServer.text+ ':'+FServer.EDid.text+'">'+ FServer.IPServer.text +'') 
      else 
        lst.Add('<a href="http://'+FServer.IPServer.text+'">'+ FServer.IPServer.text +'') ;
     
      lst.Add('</a>');
      lst.Add('</body>');
      lst.Add('</html>');
     
     If FileExists(sFileName) then
      DeleteFile(sFileName );
     lst.SaveToFile(sFileName);
    finally
     lst.Free;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    @ Rayek, merci pour ta suggestion après test, j'ai une erreur 103, je dois certainement aussi modifier la procedure de lecture ?

    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
     
    Procedure ReadTxt;
    var
    texte, str :string;
    F : Textfile;
    Begin
     
     try
     
     AssignFile(F, chappli +'cincapip.html'); {Assigne le nom du fichier}
     
      {ouvre le fichier pour lecture}
     
     Readln(F,str);
     
     FServer.Mip.Lines.LoadFromFile(chappli +'cincapip.html');
     
     // Puis dernière découpe pour récupérer 883.201.180.27
     If FServer.Ckid.checked then begin
     
     
     STmpId := Copy(FServer.Mip.text, Pos('<a href="http://', FServer.Mip.text+':'+FServer.EDid.text) + 16, Pos('>', FServer.Mip.text) -1);
     FServer.Mip.text := STmpId
     
     end
     else begin
     
     STmp := Copy(FServer.Mip.text, Pos('<a href="http://', FServer.Mip.text) + 16, Pos('>', FServer.Mip.text) -1);
     FServer.IPServer2.text := STmp;//Copy(Stmp, Pos('</a>',STmp)+1, Length(STmp));
     end;
     
     FServer.IPServer2.Hint := 'Ancien IP : ' + STmp ;//Copy(Stmp, Pos('</a>',STmp)+1, Length(STmp));
     
     FServer.IPServer.Hint := 'Ancien IP : ' + STmp ;
     
     finally
     Closefile(F); {Ferme le fichier}
    End;
    end;
    @+,

    cincap

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    Ben je viens de faire l'essai pour être sûr et mon / le code de toulourou fonctionne, la ligne est bien remplacée...et il n'y a pas besoin de supprimer le fichier.
    Juste une question tu actualises ta page html dans le navigateur après la modification ? Oui je sais la question est c** mais bon
    Ok...Mais dans la lecture le AssignFile sert à rien vu que tu utilises LoadFromFile ensuite.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    @ nuxtay, je viens de re tester la solution de tourlourou et de Rayek et pas de modification dès que le fichier "cincap.html" a été créé !

    Avant donc de l'ouvrir dans IE :

    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
     
    Procedure ReadTxt;
    var
    texte, str :string;
    F : Textfile;
    Begin
     
     try
     //AssignFile(F, chappli +'cincapip.html'); {Assigne le nom du fichier}
     
      {ouvre le fichier pour lecture}
     FServer.Mip.Lines.LoadFromFile(chappli +'cincapip.html');
     
     Readln(F,str);
     
     // Puis dernière découpe pour récupérer 83.201.180.27
     If FServer.Ckid.checked then begin
     
     
     STmpId := Copy(FServer.Mip.text, Pos('<a href="http://', FServer.Mip.text+':'+FServer.EDid.text) + 16, Pos('>', FServer.Mip.text) -1);
     FServer.Mip.text := STmpId
     
     end
     else begin
     
     STmp := Copy(FServer.Mip.text, Pos('<a href="http://', FServer.Mip.text) + 16, Pos('>', FServer.Mip.text) -1);
     FServer.IPServer2.text := STmp;//Copy(Stmp, Pos('</a>',STmp)+1, Length(STmp));
     end;
     
     FServer.IPServer2.Hint := 'Ancien IP : ' + STmp ;//Copy(Stmp, Pos('</a>',STmp)+1, Length(STmp));
     
     FServer.IPServer.Hint := 'Ancien IP : ' + STmp ;
     
     finally
     Closefile(F); {Ferme le fichier}
    End;
    end;
    //Fin
     
    //Procédure écriture du fichier text sur DD.
    Procedure WriteTxt;
    var
      lst : TStringList;
      sFileName : String;
      F : Textfile;
    begin
    //lst := TStringList.Create;
     
    //tourlourou 
    try
      AssignFile(f, chappli + 'cincapip.html');
      Rewrite(f);
     
      WriteLn(f, '<!DOCTYPE html>');
      WriteLn(f, '<html><!-- ' + DateTimeToStr(Now) + ' -->');
      WriteLn(f, '<head>');
      WriteLn(f, '<title>Votre IP</title>');
      WriteLn(f, '</head>');
      WriteLn(f, '<body><!-- ' + FServer.IPServer.text + ' -->');
      WriteLn(F, '<!-- Votre IP -->Votre IP modifiée le : ' +datetostr(date) + ' à '+ timetostr(time));
      WriteLn(f, '<br><br>');
     
      If FServer.Ckid.checked then
        WriteLn(f, '<a href="http://'+FServer.IPServer.text+ ':'+FServer.EDid.text+'">'+ FServer.IPServer.text +'')
      else 
        WriteLn(f, '<a href="http://'+FServer.IPServer.text+'">'+ FServer.IPServer.text +'') ;
     
      WriteLn(f, '</a>');
      WriteLn(f, '</body>');
      WriteLn(f, '</html>');
     
    finally
     
      CloseFile(f);
     
    end;
    end;
    //Fin
    @+,

    Cincap

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Au final :
    1) tu dois réécrire le fichier dans tous les cas ,
    2) ça ne marche que si le fichier n'existe pas.

    Solution simple : DeleteFile avant de l'écrire et ça devrait passer dans tous les cas !

    Quant à expliquer pourquoi le code de nuxtay fonctionne chez lui et pas chez toi...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer une ligne dans un fichier texte !
    Par toulouz1 dans le forum VBScript
    Réponses: 23
    Dernier message: 19/07/2017, 10h26
  2. Commande pour remplacer une ligne dans un fichier.txt
    Par ludobspp dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 07/11/2013, 08h19
  3. modifier une ligne dans fichier txt
    Par mvc_dev dans le forum C#
    Réponses: 6
    Dernier message: 14/05/2012, 13h23
  4. Remplacer une ligne dans un fichier ?
    Par FenX. dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/05/2008, 10h45
  5. Remplacer une ligne dans une fichier
    Par norior dans le forum Langage
    Réponses: 1
    Dernier message: 18/01/2006, 12h25

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