![]() |
AW: Datei mit Steuerzeichen in StringList laden?
Zitat:
|
AW: Datei mit Steuerzeichen in StringList laden?
Zitat:
"SneakyBagels, lade doch bitte eine Beispieldatei von DIR hoch, weil bei mir in diesem Ordner 39 Dateien zu finden sind, die zwischen 12 und 25.262 KB groß sind." |
AW: Datei mit Steuerzeichen in StringList laden?
Liste der Anhänge anzeigen (Anzahl: 1)
Vor allem sind das, zumindest bei mir, reine Binärdateien. Irgendwo scheint einmal Text drin zu sein, aber so etwas verwaltet man nicht als String.
|
AW: Datei mit Steuerzeichen in StringList laden?
Wahrscheinlich wäre es sinnvoller zu fragen, was Sneaky eigentlich genau erreichen möchte?
Es gibt möglicherweise eine Windowsfunktion für die Information, die er erfahren möchte. |
AW: Datei mit Steuerzeichen in StringList laden?
Zitat:
Zitat:
Es hat nun funktioniert.
Delphi-Quellcode:
Eins möchte ich betonen: Herr Jaenikes Units ist wirklich super!
var
aFile, sSubStr: String; AnsiStr: AnsiString; ByteArray: TArray<Byte>; begin sSubStr := 'DasHierMussGefundenWerden'; aFile := 'C:\Users\<name>\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations\27932e73jddafda77b.customDestinations-ms'; ByteArray := TFile.ReadAllBytes(aFile); try if Length(ByteArray) > 0 then begin SetString(AnsiStr, PAnsiChar(@ByteArray[0]), Length(ByteArray)); if Pos(sSubStr, AnsiUpperCase(AnsiStr)) - 1 > 0 then // tue etwas, wenn sSubStr in aFile gefunden wurde end; finally SetLength(ByteArray, 0); end; Aber da ich aktuell mein Projekt aufräume und ich versuche einen gewissen Standard einzuhalten, versuche ich Units, die ich nur ein-, höchstens zwei- oder dreimal verwende durch andere Möglichkeiten zu ersetzen. Beispiel. Was vorher so aussah...
Delphi-Quellcode:
Sieht nun so aus
var
sCurrLine, sRes: string; FileReaderEx: TFastFileReader; begin sRes := ''; if FileExists(aFile) then begin FileReaderEx := TFastFileReader.Create(aFile); try while FileReaderEx.Position < FileReaderEx.Size do begin FileReaderEx.ReadLn(sCurrLine); sRes := sRes + sLineBreak + sCurrLine; end; finally FileReaderEx.Free; end; end; {$WARNINGS OFF} Result := Trim(UTF8toString(sRes)); {$WARNINGS ON} end;
Delphi-Quellcode:
begin
if FileExists(aFile) then Result := TFile.ReadAllText(aFile, TEncoding.UTF8); Result := Trim(Result); end; |
AW: Datei mit Steuerzeichen in StringList laden?
Zitat:
Delphi-Quellcode:
uses
System.IOUtils, System.StrUtils; ... var aFile, sSubStr: String; ByteArray: TBytes; newPos: PAnsiChar; begin sSubStr := 'DasHierMussGefundenWerden'; aFile := 'C:\Users\<name>\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations\27932e73jddafda77b.customDestinations-ms'; ByteArray := TFile.ReadAllBytes(aFile); if Length(ByteArray) > 0 then begin newPos := SearchBuf(PAnsiChar(@ByteArray[0]), Length(ByteArray), 0, 0, AnsiString(sSubStr), [soDown]); if newPos <> nil then begin // tue etwas, wenn sSubStr in aFile gefunden wurde end; end; end; |
AW: Datei mit Steuerzeichen in StringList laden?
Ich nehme an
Zitat:
Und dann noch die Frage: gibt es irgendeinen Unterschied zwischen
Delphi-Quellcode:
und
ByteArray: TBytes;
Delphi-Quellcode:
?
ByteArray: TArray<Byte>;
Weil laut Deklaration in System sehe ich keinen. Ich kenne mich mit Pointern kein bisschen aus. Ist es auch möglich nun die Position von newPos herauszufinden? InToStr() funktioniert hier leider nicht. |
AW: Datei mit Steuerzeichen in StringList laden?
Zitat:
Zitat:
Delphi-Quellcode:
nicht immer dort einsetzen, wo ein
TArray<Byte>
Delphi-Quellcode:
erwartet wird. Deswegen nimmt man besser gleich
TBytes
Delphi-Quellcode:
.
TBytes
Zitat:
Delphi-Quellcode:
(es lebe die Pointer-Arithmetik!)
I := newPos - @ByteArray[0];
Je nachdem, was du genau machen willst, ist das aber vielleicht gar nicht nötig. |
AW: Datei mit Steuerzeichen in StringList laden?
Ich habe gerade mal messen lassen. Selbe Funktion mit Pos() statt SearchBuf() ist um 50% schneller. Wie kann das sein? Ich dachte Pointer sind das Ultimative Etwas?
|
AW: Datei mit Steuerzeichen in StringList laden?
Zitat:
Von daher wäre es vielleicht doch ganz hilfreich zu wissen, WAS genau du in der Datei suchst. Höchstwahrscheinlich kannst du das nämlich viel eleganter mit der Shell-API von Windows abfrühstücken. ![]() ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 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