AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FileHasTextFormat?

Ein Thema von Bjoerk · begonnen am 29. Feb 2012 · letzter Beitrag vom 1. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

FileHasTextFormat?

  Alt 29. Feb 2012, 20:24
Delphi-Version: 2007
Hat jemand ne Idee für FileHasTextFormat?

  if FileHasTextFormat(FileName) then StringList.LoadFromFile(FileName);

Geändert von Bjoerk ( 1. Mär 2012 um 08:59 Uhr) Grund: Tippfehler bereinigt
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 20:31
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.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (29. Feb 2012 um 20:39 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 20:51
Aha.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 21:02
Was Luckie meinen könnte:
  • Was soll denn FileHasFextFormat machen?
  • Was ist ein FextFormat?
  • Wie können wir dir helfen (konkretes Problem)?
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 21:28
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 21:32
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
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 21:44
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.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#8

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 21:56
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
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 22:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: FileHasFextFormat?

  Alt 29. Feb 2012, 23:32
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:47 Uhr.
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