AGB  ·  Datenschutz  ·  Impressum  







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

Textfile als solches erkennen

Ein Thema von martinf16 · begonnen am 31. Aug 2009 · letzter Beitrag vom 3. Sep 2009
Antwort Antwort
Seite 1 von 3  1 23      
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

Textfile als solches erkennen

  Alt 31. Aug 2009, 21:01
Hallo,

ich möchte unabhängig von der Endung der Datei erkennen, ob es sich um ein Textfile erkennt. Schließlich kann ein Textfile jede Menge Endungen haben (txt, htm, php...). Gibt es dafür eine bestimmte Funktion oder kann man die ersten Bytes auslesen und daran etwas prüfen?! Und wenn ja, wie macht man das?!

Vielen Dank schon mal!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#2

Re: Textfile als solches erkennen

  Alt 31. Aug 2009, 21:07
Es ist nicht eindeutig erkennbar.

Du kannst höchstens versuchen nach gewissen Zeichen zu suchen,
aber dafür mußt du wissen, welche Kodierungen du zulassen willst.

bei ASCII z.B. gibt es keine Zeichen über #127

UTF-8 hat oftmals eine entsprechende BOM und alle Zeichen über #127 entsprechen gewissen Mustern

unterhalb der #32 gibt es oftmals nur die Zeichen #13, #10 (Zeilenumbruch) und #8 (Tabulator)

aber dennoch können je nach Textformat alle möglichen Zeichen drin vorkommen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Textfile als solches erkennen

  Alt 31. Aug 2009, 21:08
Du wirst die Datei einfach mal öffnen müssen und durchsuchen

Wenn viele Alphanumerischen Zeichen und #13#10 vorkommen, isses wahrscheinlich Text, wenn viele nicht-Text Zeichen vorkommen ehe binär.

Um das zu realisieren könntest du son Array machen, das jedem ASCII-Zeichen einen Wert zuordnet: z.B. 0 für neutral, 1 für ein Textzeichen und -100 für Zeichen, die garantiert nicht in Text vorkommen

Achja, BOM's am Anfang sindauch ein Indikator
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Textfile als solches erkennen

  Alt 31. Aug 2009, 21:40
Was sind denn BOMs am Anfang?!

ASCII würde mir erst einmal reichen und die Prüfung muss auch nicht so genau sein, dass sie jedes Zeichen einzeln prüft. Es sollte nur ein ungefährer Richtwert sein. Also vielleicht eine Prüfung der ersten Zeichen? Aber wie kann die aussehen?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Textfile als solches erkennen

  Alt 31. Aug 2009, 21:50
http://de.wikipedia.org/wiki/Byte_Order_Mark

Wie gesagt, ordne jedem Zeichen einen Wert zu, der angibt ob es sich wahrscheinlich um Binär oder um Text handelt. Gehe dann duch die ersten 1000 oder so Zeichen und vergleiche danach den erhaltenen Wert mit einem Grenzwert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Textfile als solches erkennen

  Alt 31. Aug 2009, 21:52
Zur problematik und BOM:
Some files come up strange in Notepad
The Notepad file encoding problem, redux
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Textfile als solches erkennen

  Alt 31. Aug 2009, 22:11
Okay, wenn ich die Links jetzt richtig interpretiere heißt das, dass die normalen Textfiles, die ich prüfen möchte eigentlich gar nicht prüfbar sind, da sie kein BOM enthalten, stimmts?

Ich habe mir mal folgende Function gebastelt:

Delphi-Quellcode:
function CheckTextfile(Datei : string): boolean;
var
  F: File;
  DateiAnfang: Array [0..100] of Byte;
  I: Integer;
begin
  try
    AssignFile(F, Datei;
    Reset(F, 1);
    Blockread(F, DateiAnfang, SizeOf(DateiAnfang));
  finally
    CloseFile(F);
  end;

  for I := 0 to 100 do
    if DateiAnfang[I] //wie kann man hier weitermachen?!

end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Textfile als solches erkennen

  Alt 1. Sep 2009, 02:17
Zitat von martinf16:
Okay, wenn ich die Links jetzt richtig interpretiere heißt das, dass die normalen Textfiles, die ich prüfen möchte eigentlich gar nicht prüfbar sind, da sie kein BOM enthalten, stimmts?
Fast. In den Links geht es darum, dass Textdatei nicht gleich Textdatei ist, da sie unterschiedlich kodiert sein können. Das hat nur am Rande mit der BOM zu tun.


Zitat:
if DateiAnfang[I] //wie kann man hier weitermachen?!
Gar nicht. Lies dir noch mal die Links durch. Insbesondere das:
Zitat:
Here's the file "Hello" in various encodings:

48 65 6C 6C 6F

This is the traditional ANSI encoding.
48 00 65 00 6C 00 6C 00 6F 00

This is the Unicode (little-endian) encoding with no BOM.
FF FE 48 00 65 00 6C 00 6C 00 6F 00

This is the Unicode (little-endian) encoding with BOM. The BOM (FF FE) serves two purposes: First, it tags the file as a Unicode document, and second, the order in which the two bytes appear indicate that the file is little-endian.
00 48 00 65 00 6C 00 6C 00 6F

This is the Unicode (big-endian) encoding with no BOM. Notepad does not support this encoding.
FE FF 00 48 00 65 00 6C 00 6C 00 6F

This is the Unicode (big-endian) encoding with BOM. Notice that this BOM is in the opposite order from the little-endian BOM.
EF BB BF 48 65 6C 6C 6F

This is UTF-8 encoding. The first three bytes are the UTF-8 encoding of the BOM.
2B 2F 76 38 2D 48 65 6C 6C 6F

This is UTF-7 encoding. The first five bytes are the UTF-7 encoding of the BOM. Notepad doesn't support this encoding.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Textfile als solches erkennen

  Alt 1. Sep 2009, 03:26
Das sind auch die probleme unter Windows das viel unfug mit den Dateien getrieben wird.
Warum kann man die Extension nicht generell entfernen und nur noch die Datei anhand eines Header erkennen lassen.
Bei AVI und anderen Dateien gehts ja auch warum nicht bei Text ? (.txt).

Eine *.chm Datei kann und wird deshalb auch als ausführbare EXE (Virus, trojaner) verwendet.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#10

Re: Textfile als solches erkennen

  Alt 1. Sep 2009, 05:56
Zitat:
This is the traditional ANSI encoding.
48 00 65 00 6C 00 6C 00 6F 00
da stimmt aber irgendwas nicht

also 2 Byte-Zeichen und 1-Byte-Ansi
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:12 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