-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
12. Mai 2015
Jede Textdatei ist eine Binärdatei. Und wenn du eine "Binärdatei speicherst", dann kann das wiederum durchaus eine Textdatei sein (oder was immer du als Textdatei bezeichnest); denn andere Programme wissen ja nicht, wie du die Datei erzeugt hast.
Ein anschauliches Beispiel: Stell dir vor, du bist ein Bäcker. Eines Tages raubt jemand eine Bank aus und kauft am nächsten Tag bei dir mit dem...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
11. Mai 2015
Natürlich ist #255#254 indirekt ein Unicode-Zeichen, nämlich ein UTF-16 BOM. (Hättest du meinen Code gelesen, dann hättest du es gesehen). Wenn du die Datei in einem beliebigen Unicode-Text-Editor lädst, hält er das wegen des BOM für eine Unicode-Datei und stellt deswegen natürlich den Rest nicht mehr dar, weil - wie du richtig sagst - das kein Unicode-Zeichen ist.
Häng noch ein paar...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
11. Mai 2015
Vielen Dank für den Hinweis, ich werde mir das ansehen.
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
11. Mai 2015
Der wichtigste Bestandteil bei der Entwicklung ist immer der Praxistest (dieses Forum heißt ja "Delphi-PRAXIS"). Deswegen bitte ich euch, die Funktion (s. #31) an möglichst vielen Dateien zu testen und mir positive und negative Ergebnisse zu melden, um so auch aus dem Feedback der praktischen Anwendung heraus die Funktion zu verbessern. Was ja wiederum im Interesse der Gemeinschaft der...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
11. Mai 2015
Danke. Ja, eine Prüfung auf MagicBytes könnte ich noch einbauen.
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
11. Mai 2015
Gehörst du irgendeiner ideologischen oder religiösen Sekte an? Offensichtlich versuchst du zu provozieren oder suchst Streit, weil du vielleicht nichts Besseres zu tun hast. Ich werde von nun an auf deine Postings nicht mehr antworten.
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
11. Mai 2015
Zunächst einmal ganz liebe Grüße nach Karlsruhe. Ich habe in der Vergangenheit mehrere sehr nette Menschen aus Karlsruhe getroffen, demnach muss dort ein guter Menschenschlag leben. :)
Ich wundere mich aber über den Inhalt deines Postings. Ich habe diese Frage (ist es überhaupt eine Frage?) in diesem Faden bereits mehrmals sehr ausführlich beantwortet und werde das deshalb hier nicht mehr tun....
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
10. Mai 2015
So, jetzt habe ich auch die UTF-16-Prüfung eingebaut:
function IsTextFile(const AFile: string; const ABytesCount: Integer = 1000): Boolean;
// testet, ob die ersten ABytesCount Bytes einer Datei Indikatoren für eine Binär-Datei enthalten:
// wenn nicht, muss es wohl eine Textdatei sein?
// Siehe auch: http://qc.embarcadero.com/wc/qcmain.aspx?d=84071
const
...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
10. Mai 2015
Ich habe jetzt den Hinweis von @mjustin (Posting #8) berücksichtigt, dass UTF-32-enkodierte Dateien auch Doppel-NullBytes enthalten können und deshalb eine Prüfung auf UTF-32 BOM eingefügt (BE und LE), wenn ein Doppel-NullByte angetroffen wird, da ich optimistischerweise davon ausgehe, dass UTF-32-enkodierte Dateien einen BOM enthalten. Damit wird die Rest-Unsicherheit für den Ausschluss von...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
10. Mai 2015
Nochmals vielen Dank für all die sicherlich gut gemeinten Ratschläge zur Erkennbarkeit von Textdateien, aber trotzdem möchte ich nochmal auf den Titel dieses Themas und somit auf die Ausgangsfrage hinweisen: "Datei auf Indikatoren für Binärdatei testen?". Die Frage war also nicht "Datei auf Indikatoren für Textdatei testen?". Das Eine ist nicht das Gegenteil vom Anderen, wegen der prinzipiellen...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
10. Mai 2015
Danke für deine Antwort.
Wie gesagt, ich möchte nur prüfen, ob es keine Binärdatei ist.
Könntest du mir bitte erklären, was du mit "Push/Pop-Sequenzen mehrere NOPs" meinst?
#00 Habe ich ja schon ausgeschlossen (immer mit dem Kriterium der annähernden Wahrscheinlichkeit).
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Übrigens: Ich benötige die Funktion dafür, um zu entscheiden, ob der Inhalt einer Datei in eine PDF-Datei als Text ausgegeben werden kann oder nicht. Deshalb ist für diesen Zweck allein maßgeblich, dass die Datei KEINE BINÄRDATEI ist.
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
GENAU. Deshalb habe ich meine Funktion auch so angelegt, dass auf Indikatoren für Binärdateien geprüft wird (und nicht auf Indikatoren für Textdateien). Und das Verfahren an sich kann immer nur eine ANNÄHERUNG sein. Außerhalb dieser Funktion wird in meinem Programm natürlich noch anderes wie etwa Datei-Endungen usw. geprüft.
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Vielleicht sollte ich das, was ich in der Eingangsfrage gesagt habe, nochmals wiederholen, um Missverständnisse wie jenes von "perlsau" aufzuklären: Ich habe nicht gesagt, dass ich den Anspruch habe, ein perfektes Unterscheidungskriterium für Text- und Binärdateien zu schaffen. (Denn das kann es nicht geben). Ich habe ausdrücklich danach gefragt, welche weiteren Indikatoren für Binärdateien es...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Kinder, es ist doch genug Sand für alle zum Spielen da ...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Ich glaube, dass du einiges missverstehst ... vielleicht ist es die Perspektive?
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Mir ist gerade ein Gedanke gekommen, wie man eine Heuristik abseits von BOM & Co. implementieren könnte: Es müsste doch möglich sein, eine Art statistischen "Streuungs"-Faktor (oder grob gesagt "statistischer Fingerabdruck") der Bytes zu berechnen, der bei "Binärdateien" signifikant von "Textdateien" abweichen sollte. Was haltet ihr davon?
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Wie ich schon zu Anfang sagte: Ich bin mir der Problematik dieser Unterscheidung bewusst. Letztlich wird es wohl darauf hinauslaufen, für welchen speziellen Zweck man die Unterscheidung benötigt. Denn man könnte den Aufwand auf die Spitze treiben, indem man z.B. eine semantische Prüfung für alle existierenden Sprachen einbaut usw.
Könnt ihr aber die heuristische Prüfung etwas näher...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Kann man davon ausgehen, dass UTF-16- und UTF-32-Dateien statistisch signifikant so gut wie immer einen BOM enthalten?
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Ist viel zu aufwendig und unsicher. Meine bisherigen Tests haben gezeigt, dass die Prüfung auf verbotene ControlBytes und Doppel-NullBytes sehr zuverlässig ist. Bitte zeigt mir auch nur EINE Datei, wo diese Prüfung nicht funktioniert hat.
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Ich habe die Funktion jetzt erweitert:
1. Testen auf Doppel-NullBytes anstatt auf einfache NullBytes
2. Testen auf mehr als n verbotene ControlBytes
function IsTextFile(const AFile: string; const ABytesCount: Integer = 1000): Boolean;
// testet, ob die ersten ABytesCount Bytes einer Datei Indikatoren für eine Binär-Datei enthalten:
// wenn nicht, muss es wohl eine Textdatei sein?
//...
-
Forum: Programmieren allgemein
Delphi
by PeterPanino,
9. Mai 2015
Hallo!
Ich möchte testen, ob eine Datei eine "Binärdatei" oder eine "Textdatei" ist. (Ich bin mir der Problematik dieser Unterscheidung bewusst). Dazu teste ich, ob in den ersten n Bytes dieser Datei Indikatoren für eine Binärdatei enthalten sind:
EDIT 10.5.2015: Besser wäre diese Formulierung: Ich möchte testen, ob eine Datei keine "Binärdatei" ist (d.h. mit möglichst hoher...