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 le contenu d'un fichier texte


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut Remplacer le contenu d'un fichier texte
    Bonjour à tous

    J'aimerais bien créer un petit code qui peut remplacer tous les ",:!;?" par "." dans le contenu d'un fichier texte qui contient plusieurs lignes.

    Par exemple, la ligne suivante :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    azerty;;;,,!azert;!,?

    deviendrait
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    azerty......azert....

    Je travaille en mode Delphi basique.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Voici une façon de faire :

    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
    program Exemple;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils, Classes;
     
    function MaFonction(const s: string): string;
    var
      i: integer;
    begin
      result := s;
      for i := 1 to Length(result) do
        if result[i] in [',', ';', '?', '!'] then
          result[i] := '.';
    end;
     
    var
      liste: TStringList;
      i: integer;
     
    begin
      liste := TStringList.Create;
     
      liste.LoadFromFile('fichier.txt');
     
      for i := 0 to liste.Count - 1 do
        liste.Strings[i] := MaFonction(liste.Strings[i]);
     
      liste.SaveToFile('fichier.txt');
     
      liste.Free;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Merci je v la tester

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    jai essayer avec ce code
    mais il manque quelque chose
    la quelle ?
    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
    program supprimer_carater_specific;
     
    {$APPTYPE CONSOLE}
    uses
      SysUtils;
     
    VAR s:string;
         F1,F2:TEXTFILE;
        x,i:integer;
        t:string=':;,?';
     
    begin
      { TODO -oUser -cConsole Main : Insert code here }
    ASSIGNFILE(F1,'C:\file1.TXT');            //fichier source
    ASSIGNFILE(F2,'C:\file2.TXT');            //fichier de résultat finale
    RESET(F1);
    rewrite(F2);
    i:=1;
    WHILE NOT EOF(F1)  DO
      begin
          READLN(F1,s);
     while  pos(t[i],s) <> 0    do
      WRITE(F2,s[i]);
             i:=i+1;   end;
     
    CLOSEFILE(F1);
    CLOSEFILE(F2);
    end.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    La lecture séquentiel des fichiers date de DOS.

    TEXTFILE, ASSIGNFILE, RESET, REWRITE, READLN, WRITE, CLOSEFILE

    Roland Chastain te donne un code qui fonctionne avec du Delphi + moderne.

    Et qui est plus efficace avec loadfromfile et savetofile

    À moins d'utiliser windows 3.1 et Delphi 1, sur une machine trentenaire, pourquoi ne pas t'en servir?

    Voici le code encore plus compacte si tu désires

    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
    program Exemple;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils, Classes;
     
    var
      liste: TStringList;
      i: integer;
      s:string;
    begin
      liste := TStringList.Create;
      liste.LoadFromFile('C:\file1.TXT');
      s:=liste.text;
      for i := 1 to Length(s) do
        if s[i] in [',', ';', '?', '!'] then s[i] := '.';
      liste.text:=s;
      liste.SaveToFile('C:\file2.TXT');
      liste.Free;
    end.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par sgmsg Voir le message
    La lecture séquentiel des fichiers date de DOS.
    Mais toujours utile, si l'on doit charger des fichiers plusieurs Go !

    Il y a plus performant que la TStringList dans ce cas : TStringStream
    La TStringList analyse le fichier pour découper à chaque ligne pour gérer ses Strings[]
    ensuite la propriété Text qui reconcatene toutes les lignes
    C'est un tas d'opération inutile
    Pire, l'affectation de la propriété Text recommence la découpe pour alimenter Strings[] ...

    Autant ne rien analyser et gérer le texte brut !

    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
    program Exemple;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils, Classes;
     
    var
      ss: TStringStream;
      i: integer;
      s:string;
    begin
      ss:= TStringStream.Create('');
      ss.LoadFromFile('C:\file1.TXT');
      s:=ss.DataString;
      ss.Free;
     
      for i := 1 to Length(s) do
        if s[i] in [',', ';', '?', '!'] then s[i] := '.';
     
      ss:= TStringStream.Create(s);  
      ss.SaveToFile('C:\file2.TXT');
      ss.Free;
    end.

    Si ABBAN270 se forme, il est utile de connaitre ce type d'algo que l'on peut rencontrer dans d'autres types de données comme un DataSet que l'on parcours ligne par ligne !

    ABBAN270, ta boucle while pos est fausse, analyse la réponse de Roland Chastain
    Tu as totalement oublié de remplacer par le '.' ton code aurait plus tendance à ne pas recopier les caractères ...
    pense que tu peux charger une ligne dans un string, travailler sur cette string puis écrire d'un coup la ligne entière (et non caractère par caractère)



    Je te laisse chercher et nous proposer un nouveau code

    Tu devrais aussi mieux écrire ton code surtout au niveau indentation
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. affichage du contenu d'un fichier texte
    Par axel-erator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/08/2005, 16h06
  2. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  3. Effacer le contenu d'un fichier texte...
    Par loupdeau dans le forum MFC
    Réponses: 2
    Dernier message: 09/05/2005, 15h28
  4. Réponses: 5
    Dernier message: 25/01/2005, 14h26
  5. Réponses: 1
    Dernier message: 12/02/2003, 09h36

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