![]() |
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:
Jedesmal wenn ich eine sfv file lade, die diese ; sfv rapped ... Commends hat, stimmem die Strings in der StringListe nicht mehr.
; sfv raped by project-zs (mXr edition)
; datei a bissel text das ganze nochmal und nochmal Wo steckt mein fehler? Danke :-) |
Re: fehler mit Pos() ?
Moinsen,
versuche das ganze mal so:
Delphi-Quellcode:
Gruß
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; Wormid |
Re: fehler mit Pos() ?
Zu aller erst würde ich die if-bedingung ändern:
Delphi-Quellcode:
Damit sparst du dir dieses Rumgehopse in der Schleife mit dem Continue.
if not ((Pos(';', OldList.Strings[i]) = 1) or (Pos(' ', OldList.Strings[i]) = 1)) then
NewList.Add(...); |
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:
Wenn jedoch ; Kommentare in der alten StringList war, dann erstellt er mir 1 -missing file die nicht sein dürfte. Der Rest stimmt alles.
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; |
Re: fehler mit Pos() ?
Arg Stop!, Ich hab das Problem gefunden ..
|
Re: fehler mit Pos() ?
Problem doch nicht behoben...
Wenn jmd den fehler sieht, pls help :-) |
Re: fehler mit Pos() ?
Zitat:
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? |
Re: fehler mit Pos() ?
Delphi-Quellcode:
die Function CreateMissing steht weiter oben in diesem Tread.
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 CreateStringList sieht nun wie filgt aus:
Delphi-Quellcode:
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.
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; |
Re: fehler mit Pos() ?
Hast du mal ein SFVFile da? Denn mit meinem Testfile funktionuckelt das...
|
Re: fehler mit Pos() ?
Liste der Anhänge anzeigen (Anzahl: 1)
sicher doch ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr. |
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