![]() |
Fehlerteufel bei Delphi Treff
Hallo
bei den Kollegen vom Delphi Treff haben sich Fehler eingeschlichen. Result ist IMMER -1, hat einer die Idee wie es richtig lauten muss. matchPosition := 1; ist immer 1 da stimmt auch was nicht ?! Guten Rutsch Freunde des Pascal ![]() Datei nach einem bestimmten String durchsuchen Um in einer Datei nach einem bestimmten String zu suchen, kann die folgende Funktion benutzt werden:
Delphi-Quellcode:
ist viel so viel Speicher
buffer: array[1..1024 * 1024] of Char;
Da gibt ja sogar mein Rechner mit 8 GB ein Stackoverflow
Delphi-Quellcode:
function FindInFile(const AFileName: string; ASearchWord: string; AMatchCase: Boolean): Integer;
var fileStream: TFileStream; buffer: array[1..1024 * 1024] of Char; bufferSize: Integer; c: Char; matchPosition, i, lengthOfSearchWord: Integer; currentPosition, fileStreamSize: Integer; begin Result := -1; lengthOfSearchWord := Length(ASearchWord); if lengthOfSearchWord = 0 then Exit; if not AMatchCase then ASearchWord := AnsiUpperCase(ASearchWord); matchPosition := 1; fileStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); try fileStreamSize := fileStream.Size; currentPosition := 0; while currentPosition < fileStreamSize do begin bufferSize := Min(high(buffer), (fileStreamSize - currentPosition)); fileStream.ReadBuffer(buffer, bufferSize); currentPosition := fileStream.Position; i := 1; while i 1 then /// while i = 1 then begin i := i - matchPosition + 1; matchPosition := 1; end; Inc(i); end; end; finally fileStream.Free; end; end; |
AW: Fehlerteufel bei Delphi Treff
Da fehlt aber das "Herzstück"
Delphi-Quellcode:
.
pos(ASearchword)
Such doch hier mal nach boyer moore, wir hatten hier vor einiger Zeit eine angeregte Diskussion nach dem besten Suchalgo. Gruß K-h |
AW: Fehlerteufel bei Delphi Treff
Da ist wohl was beim Portieren auf die neue Forumssoftware schief gegangen. Ist ja auch ein end zu viel und while i ? 1 then ist syntaktisch falsch. Wie wär‘s dort mal nachzufragen?
|
AW: Fehlerteufel bei Delphi Treff
Dieser Codeschnipsel ist sowieso völliger Krampf, denn ein
Delphi-Quellcode:
ist je nach Delphi-Version 1 oder 2 Byte groß. Der Buffer ist somit entweder 1MB oder 2MB groß (1024*1024=1MB).
Char
Und die zu dursuchende Datei ist das jetzt eine Text-Datei? Dann ist auch das Encoding der Datei wichtig, sonst findet man einfach nichts. Und wenn die Datei einfach nur ein Haufen von Bytes ist wo aber einige Teile auch "Text" enthalten, dann kommt es auch dort auf die Kodierung an. In einem Filestream kann ich nur zuverlässig nach einer Bytefolge suchen. Folglich muss der gesuchte Text in eine Bytefolge umgewandelt werden (evtl. sogar in mehrere, wenn ich den Text auch in den unterschiedlichsten Kodierungen finden möchte) und diese Bytefolge sucht man dann in dem Stream bzw. Buffer. Der Buffer wird dann natürlich ein
Delphi-Quellcode:
array of Byte
|
AW: Fehlerteufel bei Delphi Treff
Wieder mal der Sir Rufo
Eine Aussage die von Qualität spricht. Zitat:
|
AW: Fehlerteufel bei Delphi Treff
Zitat:
|
AW: Fehlerteufel bei Delphi Treff
So einen Schwachsinn??
Gruß K-H PS @Sir Rufo Wenn der Schnipsel hinreichend alt ist, dann ist
Delphi-Quellcode:
genommen worden, weil viele Programmierer das Byte gemieden haben wie der Teufel das Weihwasser. (oder da ist C-Code übersetzt worden)
char
|
AW: Fehlerteufel bei Delphi Treff
Wäre es nicht sinnvoll diese Diskussion primär dort zu führen? Bzw. den DT auf den fehlerhaften Code hinzuweisen.
|
AW: Fehlerteufel bei Delphi Treff
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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