Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi fehler mit Pos() ? (https://www.delphipraxis.net/12359-fehler-mit-pos.html)

sharkx 26. Nov 2003 00:44


fehler mit Pos() ?
 
Hallo,

Ich lese eine Text Datei mit LoadFromFile in eine StringListe. Diese lasse ich dann durch eine Schleife laufen und füge alle zeilen die nicht mit ; oder ' ' (leerzeichen) beginnen in eine neue StringList.

Die Procedure:
Delphi-Quellcode:
function CreateStringList(SFVFile: string): string;
var
  OldList: TStrings;
  NewList: TStrings;
  i: integer;
begin
  NewList := TStringList.Create;
  OldList := TStringList.Create;

  OldList.LoadFromFile(SFVFile);

  for i := 0 to OldList.Count - 1 do
    begin
      if (Pos(';', OldList.Strings[i]) = 1) or (Pos(' ', OldList.Strings[i]) = 1) then
        Continue
      else
        NewList.Add(OldList.Strings[i]);
    end;
   
  OldList.Free;
  Result := NewList.CommaText;
end;

die SFV File, von der gelsen wird sieht etwa so aus:
Delphi-Quellcode:
; sfv raped by project-zs (mXr edition)

;

datei a bissel text
das ganze nochmal
und nochmal
Jedesmal wenn ich eine sfv file lade, die diese ; sfv rapped ... Commends hat, stimmem die Strings in der StringListe nicht mehr.
Wo steckt mein fehler?

Danke :-)

Wormid 26. Nov 2003 01:15

Re: fehler mit Pos() ?
 
Moinsen,

versuche das ganze mal so:

Delphi-Quellcode:
var SFVFile: TStringList;
    i: Integer;
begin
  SFVFile := TStringList.Create;
  SFVFile.LoadFromFile(SFVFileName);

  for i := SFVFile.Count - 1 downto 0 do
  begin
    SFVFile[i] := Trim(SFVFile[i]);
    if (Length(SFVFile[i]) = 0) or (SFVFile[i][1] = ';') then
      SFVFile.Delete(i);
  end;

  Result := SFVFile.CommaText;
  SFVFile.Free;
end;
Gruß

Wormid

Luckie 26. Nov 2003 02:13

Re: fehler mit Pos() ?
 
Zu aller erst würde ich die if-bedingung ändern:
Delphi-Quellcode:
if not ((Pos(';', OldList.Strings[i]) = 1) or (Pos(' ', OldList.Strings[i]) = 1)) then
  NewList.Add(...);
Damit sparst du dir dieses Rumgehopse in der Schleife mit dem Continue.

sharkx 26. Nov 2003 09:39

Re: fehler mit Pos() ?
 
@WormId: Das funktioniert nicht, da diese function in einer Schleife läuft die bis SFVFile.Count läuft. Wenn ich dann Strings abschneiden würde, stimmt der Count nicht mehr und ich bekomm eine Exception.

@Luckie: Stimmt, hast Recht, aber das Problem is damit nicht behoben.



Mit dem Inhalt der StringList erstelle ich jeweils für einen Eintrag eine neue Datei.

Delphi-Quellcode:
procedure CreateMissing(FileList: TStrings; Directory: String);
var
  i: integer;
begin
  for i := 0 to FileList.Count - 1 do
    begin
      dump := Copy(FileList.Strings[i], 1,Pos(' ', FileList.Strings[i]) - 1);
      FileClose(FileCreate(directory + dump + '-missing'));
    end;
end;
Wenn jedoch ; Kommentare in der alten StringList war, dann erstellt er mir 1 -missing file die nicht sein dürfte. Der Rest stimmt alles.

sharkx 26. Nov 2003 09:49

Re: fehler mit Pos() ?
 
Arg Stop!, Ich hab das Problem gefunden ..

sharkx 26. Nov 2003 13:01

Re: fehler mit Pos() ?
 
Problem doch nicht behoben...

Wenn jmd den fehler sieht, pls help :-)

Wormid 26. Nov 2003 13:19

Re: fehler mit Pos() ?
 
Zitat:

@WormId: Das funktioniert nicht, da diese function in einer Schleife läuft die bis SFVFile.Count läuft. Wenn ich dann Strings abschneiden würde, stimmt der Count nicht mehr und ich bekomm eine Exception.
Ich verstehe nicht so ganz, warum "meine" Variante nicht funktionieren soll...

Was läuft in einer Schleife ab, und auf welches Count beziehst Du dich jetzt? Eines in deinem Code irgendwo, oder in meinem Beispiel jetzt?

sharkx 26. Nov 2003 13:25

Re: fehler mit Pos() ?
 
Delphi-Quellcode:
CheckList := TStringList.Create;
  CheckList.CommaText := CreateStringList(ParamStr(1));

  dir := ExtractFilePath(ParamStr(1));

  // Create Missing Files
  CreateMissing(CheckList, dir);

  // Create Incomplete File
  CreateIncompleteFile(dir);

  for i := 0 to CheckList.Count - 1 do
    begin
    filen := Copy(CheckList.Strings[i], 1,Pos(' ', CheckList.Strings[i]) - 1);

    if FileExists(dir + filen) then
......
die Function CreateMissing steht weiter oben in diesem Tread.

die function CreateStringList sieht nun wie filgt aus:
Delphi-Quellcode:
function CreateStringList(SFVFile: string): string;
var
  OldList: TStrings;
  NewList: TStrings;
  i: integer;
begin
  NewList := TStringList.Create;
  OldList := TStringList.Create;

  OldList.LoadFromFile(SFVFile);

  for i := 0 to OldList.Count - 1 do
    if (Length(Trim(OldList.Strings[i])) > 0) and (OldList.Strings[i][1] <> ';') then
      NewList.Add(OldList.Strings[i]);

  OldList.Free;
  Result := NewList.CommaText;
end;
Trotzdem habe ich ab und an noch eine -missing datei die garnicht da sein dürfte. Somit stimmem auch alle weiteren Proceduren die auf den beiden functionen aufbauen überhaupt nicht mehr.

Wormid 26. Nov 2003 13:38

Re: fehler mit Pos() ?
 
Hast du mal ein SFVFile da? Denn mit meinem Testfile funktionuckelt das...

sharkx 26. Nov 2003 15:51

Re: fehler mit Pos() ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
sicher doch ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.
Seite 1 von 2  1 2      

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