![]() |
Delphi-Version: 2007
FileHasTextFormat?
Hat jemand ne Idee für FileHasTextFormat?
Delphi-Quellcode:
if FileHasTextFormat(FileName) then StringList.LoadFromFile(FileName);
|
AW: FileHasFextFormat?
Ja also, wenn man eine Blume drauf stellt, könnte es ganz hübsch aussehen. Oder mit einer Soße und einem Steak könnte es ganz gut schmecken. Man könnte es natürlich auch rosa anstreichen. Ja, das wären dann so meine Ideen dazu.
|
AW: FileHasFextFormat?
Aha.
|
AW: FileHasFextFormat?
Zitat:
|
AW: FileHasFextFormat?
Sorry Buddies, hab' mich vertippt.
Ich meinte, ob es möglich ist, herauszufinden, ob eine Datei Textformat hat. Ungetestet:
Delphi-Quellcode:
function IsAsciiFormat(const FileName: string): boolean;
const Size = 2048; var I: integer; F: File; TotSize, IncSize, ReadSize: integer; C: array [0..Size] of Byte; begin Result:= false; AssignFile(F, FileName); try Reset(F, 1); try TotSize:= FileSize(F); IncSize:= 0; Result:= true; while Result and (IncSize < TotSize) do begin ReadSize:= Size; if IncSize + ReadSize > TotSize then ReadSize:= TotSize - IncSize; IncSize:= IncSize + ReadSize; BlockRead(F, C, ReadSize); for I:= 0 to ReadSize-1 do if (C[I] < 32) and (not (C[I] in [9, 10, 13, 26])) then begin Result:= false; Break; end; end; finally CloseFile(F); end; except Result:= false; end; end; |
AW: FileHasFextFormat?
Nicht wirklich. Man kann nur versuchen gut zu raten:
![]() ![]() |
AW: FileHasFextFormat?
Der einzige mir bekannte Ansatz wäre, zu gucken ob die Dateien richtig kodiert sind (Ascii, Ansi, UTF-8, ...) und keine Steuerzeichen enthalten.
Dein Ansatz würde für pures Ascii funktionieren, müsste aber noch alle Zeichen größer gleich #127 verbieten. Bei anderen Zeichensätzen sollte es schwerer werden. Mit dem Verbieten von kleinen Byte-Werten wirst du schon viele Binärdateien ausschließen, aber eben auch UTF-16 kodierte Textdateien. |
AW: FileHasFextFormat?
Also falls die Datei nicht im Winows-Editor als ANSI gespeichert ist, könnte man schauen ob vielleicht eine Codierung vorliegt (sind die ersten 2 Bytes, die die Codierung festlegen).
Ansonsten vieleicht die Datei in einem ANSI-String laden und dort jedes Zeichen durchgehen ob es ein "normales" Zeichen ist, das es auf der Tastatur gibt. Habe durchs googlen die Funktion IsCharAlphaA gefunden (A für ANSI-Zeichen). Vielleicht so?
Delphi-Quellcode:
Hab grad slebst getestet an einer Datei. Sie enthielt ein '=' und dabei gibt IsCharAlphaNumericA False zurück. Aber vielleicht ist das noch ein Ansatz.
function FileHasFextFormat(FileName : String) : Boolean;
var Text : AnsiString; Datei : TFileStream; I : Integer; begin Result := True; Datei := TFileStream.Create(FileName,fmOpenRead); //Datei öffnen try SetLength(Text,Datei.Size); Datei.Read(Text[1],Datei.Size); for I := 1 to Length(Text) do If (Text[I] <> ' ') and (Text[I] <> #$D) and (Text[I] <> #$A) then //#$D und #$A wegen Zeilenumbruch-Zeichen. begin if not IsCharAlphaNumericA(Text[I]) then Result := False; end; finally Datei.free; end; end; EDIT:Verdammt waren 3 Leute schneller xD Gruß NickelM |
AW: FileHasFextFormat?
IsCharAlphaNumericA macht glaub' ich nur 0..9 und a/A bis z/Z inklusive Umlaute und ß. Die Datei als Stream einzulesen ist aber auf alle Fälle mal besser als meine Blockreads.
|
AW: FileHasFextFormat?
FilehasTextFormat
kann nicht allgemeingültig funktionieren, da es keine Definition eines Textfiles gibt. Das liegt letztlich im Auge des Betrachters, denn z.B. ich halte ini, html, xml, CSV und auch PS und rtf für Text-Files. Und aus der Vergangenheit kenne ich Kodierungen von Textfiles, die mit ANSI nicht viel zu tun haben. (mal ganz zu schweigen von UTF8, UTF16 UNICODE oder reinen BASE64 Codierungen) Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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