Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit txt Dateien (https://www.delphipraxis.net/14969-problem-mit-txt-dateien.html)

choose 19. Jan 2004 15:29

Re: Problem mit txt Dateien
 
Für die Arbeit mit Strings möchte ich gerne wieder auf [dp]reguläre Ausdrücke[/dp] verweisen, mit denen eine Prüfung auf gültige IPs (jede Komponente 0-255) relativ kurz gestaltet werden kann:
Delphi-Quellcode:
function IsValidIPAddress(const AString: string): Boolean;
const
  RE255 = '([1-9]?\d|1\d\d|2([0-4]\d|5[0-5]))';
begin
  Result:= RegExp('^(%s\.){3}%:0s$', [RE255]).Execute(AString);
end;
Um also die IPs gem Deiner Beschreibung in ein Memo zu laden, felro, könnte mit dem passenden Ausdruck in ReIPFromLogFile dieser Code verwendet werden:
Delphi-Quellcode:
with TStringList.Create do
try
  LoadFromFile(AFilename);
  with RegExp(ReIPFromLogFile) do
    if Execute(Text) then
    repeat
      Memo1.Lines.Add(Match[0])
    until not ExecuteNext;
finally
  Free;
end;
Wenn Du in Zukunft häufiger mit Strings arbeitest, könnten Lösungen dieser Art einiges an Arbeit ersparen auch wenn sie auf den ersten Blick etwas kryptisch anmuten mögen...

felro 20. Jan 2004 13:03

Re: Problem mit txt Dateien
 
Dass hört sich ja mal sehr gut an :D muss ich gleich mal porbieren. THX felro

felro 19. Feb 2004 19:35

Re: Problem mit txt Dateien
 
hmm hab jetzt nen paar Wochen immer ma wieder probiert aber so richtig weiter gekommen bin ich leider nicht! Kann mir jemand evtl nochma helfen?

Manzoni 19. Feb 2004 20:11

Re: Problem mit txt Dateien
 
Delphi-Quellcode:
procedure einlesen;
var f : textfile;
    s : string;
begin
  AssignFile(f,'C:\beispiel.txt');
  Reset(f);
  while not EOF(f) do
  begin
  Readln(f, s);
  Delete(s, Pos(' ',s),length(s));
  Memo1.Lines.Add(s);
  end;
  CloseFile(f);
end;

felro 19. Feb 2004 20:21

Re: Problem mit txt Dateien
 
Hmm ja dass einlesen hab ich ja schon :D

Mein Problem ist, dass ich den obrigen Quelltext nicht verstehe und es mir lieber wäre wenn es ein Befehl gibt, der nach 16 Zeichen alles abscneidet und dann noch alle leerzeichen und buchstaben entfernt. CU felro

Bit Juggler 19. Feb 2004 22:11

Re: Problem mit txt Dateien
 
Hi felo,
was genau verstehst Du denn nicht ?
Hier bist Du doch genau richtig zum fragen, oder ? ;)

Zu Deinem Wunsch:
Delphi-Quellcode:
  //In Edit1 stehen zb. 40 Zeichen und Du willst nur die ersten 16
  Edit2.Text:= Copy(Edit1.Text,1,16);
und weiter:
Delphi-Quellcode:
//alle Leerzeichen entfernen
function DelSpace(Data:string):string;
var
  i: integer;
begin
  for i:= 1 to length(Data) do
    delete(Data,pos(' ',Data),1);
  DelSpace:= Data;
end;
und zum Schluss:
...String auf Zahlen überprüfen


Gruß Bit

P.S.
Die vor mir geposteten Sourcen sind aber bei weitem besser als das was Du jetzt vorhast !

Thunderchild 20. Feb 2004 14:44

Re: Problem mit txt Dateien
 
Ich weis nicht, ob diese Ersetzen-Routine wirklich funzt.
Edit:
Denn wenn da mehrere Spaces hintereinander stehen, wird er jedes zweite übergehen, da alles nach dem Löschen um eins nach vorn rutscht, Dein Index aber auch um eins weiter geht. Das macht dann einen Suchschritt von zwei Zeichen.

Delphi-Quellcode:
function bla(s:string);
i:integer; c:char;
begin
  // s ist die aus der Datei eingelesene Zeile
  s:=copy(s,1,16);

// Eine Möglichkeit (benötigt Unit StrUtils):
  s:=AnsiReplaceStr(s,' ','');

// Zweite Möglichkeit:
  i:=pos(' ',s);
  while i>0 do begin
    delete(s,i,1);
    i:=pos(' ',s)
  end;

// Bzw auch für Ziffern:
  i:=1;
  while i<=length(s) do
    if s[i] in [' ','0'..'9'] then delete(s,i,1)
                              else inc(i);
  bla:=s
end;

felro 20. Feb 2004 15:32

Re: Problem mit txt Dateien
 
Ok danke an euch beide, dass klingt ja schonmal wesentlich einfacher. Danke felro

Tyrael Y. 20. Feb 2004 15:37

Re: Problem mit txt Dateien
 
..wie wäre es mit
Delphi-Quellcode:
function GetOnlyValidChars(aString:String):String;
  newString := '';
  for i := 0  to length(aString) do
  begin
     if not(aString[i] in [#0]) then //hier könntest du noch mehr zeichen ausschliessen
     begin
       newString := newString + aString[i];
     end;
  end;
  result := newString;
end;

Luckie 20. Feb 2004 15:54

Re: Problem mit txt Dateien
 
Leerzeichen entfernen? Schon mal an StringReplace gedacht? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr.
Seite 2 von 3     12 3      

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