Suppression ligne dans un textfile

coframi Messages postés 5 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 25 novembre 2004 - 23 juil. 2004 à 11:43
yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008 - 24 juil. 2004 à 03:38
Existe il une autre méthode pour supprimer une ligne dans un fichier texte que celle ci:
- recopie des lignes voulues dans un fichier temporaire.
- renomage du fichier temporaire.
Je ne voudrais pas utiliser cette methode car mon fichier origine est volumineux.

5 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
23 juil. 2004 à 13:05
En passant par une TStringList, peut-être ?

Ca donnerait quelque chose comme ça :

procedure TForm1.Button1Click(Sender: TObject);
var Fichier: TextFile;
    Ligne: String;
    LigneASupprimer: String;
    StrList: TStringList;
    i: Integer;
begin
  LigneASupprimer := 'La ligne à supprimer';
  AssignFile(Fichier, 'TonFichier.txt');
  {$I-}
  Reset(Fichier);
  {$I+}
  if (IOResult = 0) then
  begin
    StrList := TStringList.Create;
    try
      repeat
        ReadLn(Fichier, Ligne);
        if Ligne <> LigneASupprimer then
          StrList.Add(Ligne);
      until EOF(Fichier);
      CloseFile(Fichier);
      Rewrite(Fichier);
      for i := 0 to StrList.Count -1 do
        WriteLn(Fichier, StrList[i]);
      CloseFile(Fichier);
    finally
      StrList.Free;
    end;
  end;
end;


Bonne prog' :-p
0
coframi Messages postés 5 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 25 novembre 2004
23 juil. 2004 à 14:21
Merci pour ta réponse

Le problème avec cette solution c'est que je vais prendre beaucoup de mémoire.
0
yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
23 juil. 2004 à 18:03
function supprimeLigne(nomFichier,ligne:String):Boolean;
var
L:TStringList;
x:Integer;

begin
result:=false;
if not fileexists(nomFichier)then exit;

result:=true;
L:=TStringList.Create;

try
try
L.LoadFromFile(nomFichier);

x:=L.IndexOf(ligne);

if x<>-1 then
begin
L.Delete(x);
L.SaveToFile(nomFichier);
end else result:=false;

except result:=false;
end;

finally
begin
L.Clear;
L.Free;
end;
end;

end;

yve
Salut japee !
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
23 juil. 2004 à 22:04
Salut, yve, y'avait un bail qu'on t'avait pas vu par ici.

Content d'avoir de tes nouvelles... ;)

T'es vraiment trop fort !

Moi, j'avais "pondu" ce truc :

function FileDeleteLine(Fich, DelLigne: String): Boolean;
var F: TextFile;
    Ligne: String;
    StrList: TStringList;
    i: Integer;
begin
  Result := False;
  AssignFile(F, Fich);
  {$I-}
  Reset(F);
  {$I+}
  if (IOResult = 0) then
  begin
    StrList := TStringList.Create;
    try
      repeat
        ReadLn(F, Ligne);
        if Ligne <> DelLigne then
          StrList.Add(Ligne)
        else
          Result := True;
      until EOF(F);
      CloseFile(F);
      if Result = True then
      begin
        Rewrite(F);
        for i := 0 to StrList.Count -1 do
          WriteLn(F, StrList[i]);
        CloseFile(F);
      end;
    finally
      StrList.Free;
    end;
  end;
end;


Je le mets tout de suite à la poubelle... %-6

Et je m'empresse d'adopter ta technique qui est forcément plus rapide !

Quel bonheur d'apprendre... Merci !

P-S: passe un peu plus souvent sur le forum, en ce moment c'est les vacances, et ça manque un peu de "pointures" pour répondre à certaines questions un peu, euh... eh bien "pointues" :approve)

A +
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
24 juil. 2004 à 03:38
ouais bon pas trop de fleur quand même ,à la cheville de delphiprog!!! :big)

Il y aurait aussi les TStream, TFileStream qui pourrait être utilisé...

AssignFile(F, Fich);
{$I-}
Reset(F);
{$I+}
if (IOResult = 0) then
while not eof(F)do
begin
....
end;

ne doit pas être nécessairement disposé puisque c'est le seul moyen connu par moi pour lire les fichiers autre que texte...
car si l'on insère ce code avant la boucle while
{type TTextLineBreakStyle = (tlbsLF, tlbsCRLF);}
SetLineBreakStyle(F,tlbsLF);

on pourra lire le code d'une dll ou d'un exe ce qui ne pourrait être fait avec les stream ou un load from file TList.
même si impossible à comprendre c'est toujours mieux que le simple MZ!

Il y a du bon dans tout code tout dépend de la nécessité :-p
yve
0
Rejoignez-nous