![]() |
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 ...
|
Re: fehler mit Pos() ?
Hmmm... So richtig schnall ich das Problem scheinbar nicht - was soll denn da eigentlich passieren?
Der Code liest jetzt so ein sfv-File ein, entfernt Leerzeilen und Kommentare und legt dann für jeden Dateieintrag eine leere Datei an. Mit deinem Code hier scheint das doch zu funktionieren, den Sinn verstehe ich zwar nicht, aber es tut... :shock: Falls Du einfach nur ein simples SFV-Tool suchst, das dir bequem anzeigt, welche Dateien fehlen oder korrupt sind, dann empfehle ich dir mal einen Blick auf FlashSFV zu werfen -> ![]() Gruß Wormid |
Re: fehler mit Pos() ?
Wäre es nicht sinnvoller als Result eine Stringlist zurück zu geben? Der String könnte doch ziemlich lang werden ...
|
Re: fehler mit Pos() ?
Es funktioniert eigentlich .. aber aus mir unerklärlichen Gründen legt er mir Oftmals eine '-missing' Datei ohne dateinamen an.
Und dieses problem würde ich gern beheben :> Du verstehst den Sinn nicht? Sagen dir zipscripte etwas? glFTPd und zipscript -c z.b.? Wenn ja siehst du oben ein stück code von so einem :-) Ansonsten kannst du mal ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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