Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FileHasTextFormat? (https://www.delphipraxis.net/166799-filehastextformat.html)

Bjoerk 29. Feb 2012 20:24

Delphi-Version: 2007

FileHasTextFormat?
 
Hat jemand ne Idee für FileHasTextFormat?

Delphi-Quellcode:
  if FileHasTextFormat(FileName) then StringList.LoadFromFile(FileName);

Luckie 29. Feb 2012 20:31

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.

Bjoerk 29. Feb 2012 20:51

AW: FileHasFextFormat?
 
Aha.

BUG 29. Feb 2012 21:02

AW: FileHasFextFormat?
 
Zitat:

Zitat von Bjoerk (Beitrag 1153717)
Aha.

Was Luckie meinen könnte:
  • Was soll denn FileHasFextFormat machen?
  • Was ist ein FextFormat?
  • Wie können wir dir helfen (konkretes Problem)?

Bjoerk 29. Feb 2012 21:28

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;

Luckie 29. Feb 2012 21:32

AW: FileHasFextFormat?
 
Nicht wirklich. Man kann nur versuchen gut zu raten:
http://blogs.msdn.com/b/oldnewthing/...7/2158334.aspx
http://blogs.msdn.com/b/oldnewthing/.../24/95235.aspx

BUG 29. Feb 2012 21:44

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.

NickelM 29. Feb 2012 21:56

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:
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;
Hab grad slebst getestet an einer Datei. Sie enthielt ein '=' und dabei gibt IsCharAlphaNumericA False zurück. Aber vielleicht ist das noch ein Ansatz.

EDIT:Verdammt waren 3 Leute schneller xD

Gruß
NickelM

Bjoerk 29. Feb 2012 22:30

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.

p80286 29. Feb 2012 23:32

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 05:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz