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

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    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 régulier
    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
    Points : 102
    Points
    102
    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
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 855
    Points : 11 288
    Points
    11 288
    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 !

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    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

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    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

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    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 expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    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 régulier
    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
    Points : 102
    Points
    102
    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 expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    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 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 855
    Points : 11 288
    Points
    11 288
    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 !

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonsoir à toutes et à tous,

    Merci à tous, mon erreur était que lors de la recherche de l'Ip, j'avais créé une règle entre l'ip d'avant et le nouveau, comme l'ip n'avait pas changé, forcément le fichier *.html ne se modifiait pas même si le TcheckBox était coché.

    Le topic est donc résolu, merci à tous.

    @+,

    Cincap

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    Malgré que c'est ok dans le résumé du topic, j'ai tout de même une question à ce sujet.

    Par facilité, j'avais testé le rajout du port à côté de l'ip après extraction de l'ip dans un TMemo, sur le module lecture, ce qui aurait donné par exemple:

    Edlien.text := 84.745.08.41

    EdID.text := 8080

    Edlien.text := MIP + EdID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If CKBid.checked then Edlien.text := 'http://'+MIP.Lines[3]+':' + EDid.text else Edlien.text := 'http://'+MIP.Lines[3] ;
    J'obtiens un espace juste après 84.745.08.41 :8080 à la pace de
    84.745.08.41:8080

    Comme je n'ai pas testé avec une caméra qui doit avoir le port à côté de l'Ip contrairement à une Webcam, y a t'il une explication ?

    L'espace ne sera peut être pas génant !

    @+,

    Cincap

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 855
    Points : 11 288
    Points
    11 288
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    S := 'http://'+Trim(MIP.Lines[3]); // Trim devrait supprimer l'espace 
    If CKBid.checked 
    then Edlien.text := S + ':' + EDid.text 
    else Edlien.text := S ;
    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 !

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tourlourou, chapeau bas, excellente réponse cela fonctionne, cela simplifie le code car dès que le fichier avec l'ip est envoyé, on peut facilement depuis le module lecture remettre le n° de port après et sauver dans un fichier *.ini.

    Maintenant, je n'ai pas testé si c'était une importance avec l'espace ou pas, j'attends les caméras Wifi en Hd pour l'extérieur pour le savoir, car avec une Webcam à 10€, le résultat est déjà correct et il suffit de connaitre l'Ip du modem sans rajouter le port car la redirection se fait dans l'onglet Lan.

    Grand merci à toi et aux autres conseils des membres.

    @+,

    Cincap

+ 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