Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeilen ohne gesuchten String aus Datei entfernen (https://www.delphipraxis.net/97682-zeilen-ohne-gesuchten-string-aus-datei-entfernen.html)

qb-tim 14. Aug 2007 13:58


Zeilen ohne gesuchten String aus Datei entfernen
 
Hi,

ich habe eine rießige Datei, rand-voll mit allen möglichen Informationen, von der ich nur Zeilen, in der ein bestimmter String enthalten ist, in eine neue Datei kopiere...

Bsp:
Originaldatei:
Delphi-Quellcode:
Name: Mustermann
Vorname: Max
Name: Irgendwer
Vorname: Inge
Name: Y
Vorname: X
...
Zu suchender String: (Groß- und Kleinschreibung soll beachtet werden!)
Delphi-Quellcode:
'Name:'
Ausgabedatei:
Delphi-Quellcode:
Name: Mustermann
Name: Irgendwer
Name: Y
...
Wie kann ich das anstellen?

Delphi-Quellcode:
procedure PurgeFile(MyFile: String; PurgeID: String); // MyFile = Originaldatei; PurgeID = Zu suchender String
var file1, file2: textfile;
    s: String;
being
  AssignFile(file1, MyFile);
  AssignFile(file2, 'Purged.txt');
  Reset(file1);
  Rewrite(file2);
  while not EoF(file1) do
  begin
    ReadLn(file1, s);
    if s ?????? then              // Prüfen ob "PurgeID" in "s" vorhanden ist
      WriteLn(file2, s);
  end;
  CloseFile(file1);
  CloseFile(file2);
end;

Klaus01 14. Aug 2007 14:01

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Delphi-Quellcode:
 if pos(PurgeID,s) > 0 then

[edit] lowerCase wieder entfernt, Begründung siehe unten: [/edit]
Grüße
Klaus

Reinhardtinho 14. Aug 2007 14:04

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Achtung: In der Delphi-Hilfe steht:

Zitat:

Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt.

qb-tim 14. Aug 2007 14:07

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Vielen Dank für die schnelle Antwort Klaus...

Für mich funzt's jetzt! :thumb:



Zitat:

Zitat von Reinhardtinho
Achtung: In der Delphi-Hilfe steht:

Zitat:

Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt.

Hmm... Das könnte eventuell ein Problem darstellen... Was nun?

SirThornberry 14. Aug 2007 14:09

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Entweder CompareText verwenden oder AnsilowerCase und AnsiUpperCase verwenden.
Wenn du die Zeile also komplett in großbuchstaben wandelst kannst du dann prüfen ob der Suchbegriff (welcher auch komplett in großbuchstaben gewandelt wird) drin enthalten ist.

Klaus01 14. Aug 2007 14:10

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Zitat:

Zitat von qb-tim
Vielen Dank für die schnelle Antwort Klaus...

Für mich funzt's jetzt! :thumb:



Zitat:

Zitat von Reinhardtinho
Achtung: In der Delphi-Hilfe steht:

Zitat:

Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt.

Hmm... Das könnte eventuell ein Problem darstellen... Was nun?

Habe es in meinen ersten beitrag verbessert.

Grüße
Klaus

Reinhardtinho 14. Aug 2007 14:18

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Wenn ich das richtig verstehe, ist da aber kein Unterschied.

Ob mit oder ohne Lowercase, die Treffer wären doch trotzdem gleich.

Wenn aus NAme und naME jeweils name wird, dann wird doch die Groß/Kleinschreibung in der Datei nicht berücksichtigt. Das gleiche macht doch Pos von sich aus dann schon ... (?)



MFG
Lorenz

marabu 14. Aug 2007 14:23

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Hallo,

wer Zugriff auf die Funktion AnsiContainsText() hat, der kann auch UTF8-Dateien verarbeiten:

Delphi-Quellcode:
begin
  // ...
  while not Eof do
  begin
    ReadLn(line);
    if AnsiContainsText(line, PurgeId) then
      WriteLn(line);
  end;
  // ...
end;
Aber eigentlich ist das eine Aufgabe, die man ohne Gesichtsverlust auf der Shell-Ebene erledigen kann:

Code:
grep 123 input.txt >output.txt
Grüße vom marabu

s-off 14. Aug 2007 14:29

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Zitat:

Zitat von Reinhardtinho
Wenn ich das richtig verstehe, ist da aber kein Unterschied.

Du verstehst es richtig, trotzdem ist es falsch :gruebel:

Ein kleines Beispiel zum mitmachen...

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Var
   lstData: TStringlist;
   iPos: Integer;
Begin
   lstData := TStringlist.Create;
   Try
      lstData.Add('Hallo');

      iPos := Pos('hallo', lstData.Text);

      If iPos > 0 Then
         ShowMessage(IntToStr(iPos))
      Else
         ShowMessage('Pech gehabt');
   Finally
      FreeAndNil(lstData);
   End;
End;
Und? Wie wird die Antwort wohl lauten?

Edit:
In der Hilfe des BDS4.0 ist dieser Fehler übrigens korrigiert worden:
Zitat:

Zitat von Delphi 2006-Hilfe
Die Groß/Kleinschreibung wird von Pos berücksichtigt.


Klaus01 14. Aug 2007 14:30

Re: Zeilen ohne gesuchten String aus Datei entfernen
 
Zitat:

Zitat von Reinhardtinho
Achtung: In der Delphi-Hilfe steht:

Zitat:

Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt.

@Reinhardt
.. hast nich ganz durcheinander gebracht ...

Nun in meiner Hilfe steht:
Zitat:

Zitat von DelphiHife
Pos searches for Substr within S and returns an integer
value that is the index of the first character of Substr within S.
Pos is case-sensitive. If Substr is not found, Pos returns zero.

Ansonsten, marabus Hinweis befolgen.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz