![]() |
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Dein String wird aber wohl nicht richtig gesetzt. Vermutlich wird auf String[0] zugegriffen. Daher die AV beim Lesen des Strings. Das array[0..10000] besitzt ja aber den Null-Index, weshalb ein Zugriff darauf ja dann keine Probleme geben sollte.
|
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
|
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Zitat:
|
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Ich habe das jetzt so gemacht, wie ein anderer Beitrag aus der DSDT (
![]() Gibt es eine möglichkeit deinen Code so zu verändern, dass er nach einem Wort sucht und wie oft es schon vorkommen sollte? (Also z.B. wenn du "ABCDEABCDE" hast, dass er die Position des ersten Cs und des 2. Cs angibt?) |
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Du könntest die Ergebnisse alle in eine StringList schreiben, dann den entprechenden Text aus dem Buffer entfernen und weitersuchen ... wie genau das geht, weiß ich aber auch nicht.
|
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Okay... Ich habe es jetzt so gelöst (und meinen Bedürfnissen angepasst):
Delphi-Quellcode:
TIntArray ist ein Integerarray!
function FindInFile(const FileName : string; SearchWord : string) : TIntArray;
var fs : TFileStream; Buffer : array [1..10000] of Char; Size : Integer; idx : Integer; i : Integer; begin SetLength(Result, 0); idx := 1; fs := TFileStream.Create(FileName, fmopenreadwrite or fmsharedenynone); try Repeat Application.ProcessMessages; Size := (Fs.Size - Fs.Position); if Size > 10000 then Size := 10000; Fs.ReadBuffer(Buffer, Size); for i := 1 to Size do begin if (Buffer[i] = SearchWord[idx]) then Inc(idx) else idx := 1; if (idx = Length(SearchWord)) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := (fs.Position - Size) + i - idx + 1; idx := 1; end; end; until fs.Position >= fs.Size; finally fs.Free; end; end; Das größere Problem ist jetzt, dass ich auch noch den Wert benötige. Ich suche ja nach "<dep file="" und müsste nun an den Zwischenraum kommen (bis zum "/>)... Mal sehen, wie ich das mache! |
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Pos und Copy sollten da helfen.
Florian |
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Lol?
Kann es sein, dass er ein array of Char als String behandelt, wenn er einen String erwartet? |
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
Jepp. Ein String ist eigentlich auch nur ein array of Char. Halt nur normalerweise nicht nullterminiert.
|
Re: [TStringList] Problem mit einer Datei (bricht zu früh ab
So... Ich habe das jetzt noch weiter umgewandelt und dabei stoße ich auf ein Problem:
Delphi-Quellcode:
Und zwar funktioniert das Copy irgendwie net:
function GetSigns(const FileName : string) : TStrArray;
var fs : TFileStream; Buffer : array [1..10000] of Char; Size : Integer; // idx : Integer; i : Integer; BufferPos, StartPos : Integer; a : string; begin SetLength(Result, 0); // idx := 1; fs := TFileStream.Create(FileName, fmopenreadwrite or fmsharedenynone); try repeat Application.ProcessMessages; Size := (Fs.Size - Fs.Position); if Size > 10000 then Size := 10000; Fs.ReadBuffer(Buffer, Size); for i := 1 to Size do begin if Length(Result) = 0 then StartPos := 1; BufferPos := PosEx('<dep file="', Buffer, StartPos + 1); StartPos := BufferPos + 1; if (BufferPos > 0) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := Copy(Buffer, BufferPos + 11, BufferPos + PosEx('"/>', Buffer, BufferPos)); end; end; until fs.Position >= fs.Size; finally fs.Free; end; end;
Code:
Das erhalte ich für Result[0] bei der anfangs erwähnten datei!
---------------------------
Autolocer --------------------------- Any\Advertisement\SignRight.bik"/><dep file="Any\Advertisement\SignUp.bik"/><dep file="Any\Advertisement\SignWarning.bik"/><dep file="Any\Advertisement\SignWrongWay.bik"/><dep file="Any\Advertisement\TMSmallExit.bik"/><dep file="Any\Advertisement\Dynamic Ad1.dds"/><dep file="Any\Advertisement\Dynamic Ad2.dds"/><dep file="Any\Advertisement\Dynamic Ad3.dds"/><dep file="Any\Advertisement\pfeil_links.bik"/><dep file="Any\Advertisement\SignLeft.bik"/><dep file="Any\Advertisement\SignDown.bik"/><dep file="Any\Advertisement\PressForward.bik"/><dep file="Any\Advertisement\GamesserverAnim.bik"/><dep file="Any\Advertisement\Gamesserver.dds"/><dep file="Any\Advertisement\FullSpeed.bik"/></deps></header> --------------------------- OK --------------------------- (PS: TStrArray = Stringarray) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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