Textdatei in D lesen

8

Gibt es irgendeine (mehr oder weniger) universelle Möglichkeit, eine Textdatei in D zu lesen?

Die Anforderung besteht darin, dass die Funktion die Codierung automatisch erkennt und mir die gesamten Daten der Datei in einem konsistenten Format gibt, z. B. in string oder in dstring . Es sollte Stücklisten automatisch erkennen und sie entsprechend interpretieren.

Ich habe std.file.readText() ausprobiert, aber verschiedene Codierungen werden nicht gut behandelt.

(Natürlich wird dies eine Fehlerrate ungleich null haben, und das ist für meine Anwendung akzeptabel.)

    
Mehrdad 17.01.2011, 21:14
quelle

2 Antworten

8

Ich glaube, dass die einzigen echten Optionen für Datei-I / O in Phobos an dieser Stelle (abgesehen vom Aufruf von C-Funktionen) std.file.readText und std.stdio.File sind. readText liest eine Datei als ein Array von Zeichen, wchars oder dchars (standardmäßig unveränderlich (char) [] - d. h. Zeichenfolge). Ich glaube, dass die Codierung UTF-8, UTF-16 und UTF-32 für Zeichen, wchars bzw. dchars sein muss, obwohl ich im Quellcode sicher gehen müsste. Alle Kodierungen, die mit diesen Kodierungen kompatibel sind (z. B. ASCII ist kompatibel mit UTF-8) sollten gut funktionieren.

Wenn Sie File verwenden, haben Sie mehrere Optionen für Funktionen zum Lesen der Datei mit - einschließlich readln und rawRead . Sie lesen die Datei jedoch im Wesentlichen mit einer UTF-8-, UTF-16- oder UTF-32-kompatiblen Kodierung, genau wie mit readText , oder Sie lesen sie als Binärdaten ein und manipulieren sie selbst.

Da die Zeichentypen in D char, wchar und dchar sind, die UTF-8-, UTF-16- bzw. UTF-32-Codeeinheiten sind, ist die Datei, außer Sie möchten die Daten im Binärformat lesen muss in einer Codierung kodiert werden, die mit einer dieser drei Arten von Unicode kompatibel ist. Wenn Sie eine Zeichenfolge in einer bestimmten Kodierung angeben, können Sie sie mithilfe der Funktionen in std.utf in eine andere Kodierung konvertieren. Mir ist jedoch keine Möglichkeit bekannt, eine Datei nach ihrem Codierungstyp abzufragen, außer dass readText verwendet wird, um die Datei in einer bestimmten Codierung zu lesen und zu prüfen, ob sie erfolgreich ist.

Also, es sei denn, Sie möchten eine Datei selbst bearbeiten und im Handumdrehen bestimmen, in welcher Kodierung sie sich befindet. Am besten ist es wahrscheinlich, readText mit jedem nachfolgenden String-Typ zu verwenden, wobei der erste erfolgreich ist. Da Textdateien normalerweise in UTF-8 oder einer UTF-8-kompatiblen Kodierung sind, würde ich erwarten, dass readText , das mit einer normalen Zeichenkette verwendet wird, fast immer gut funktioniert.

    
Jonathan M Davis 18.01.2011, 00:04
quelle
4

Zur Überprüfung der Stückliste:

%Vor%

Das Hinzufügen von mehr obskuren Stücklisten bleibt dem Leser als Übung überlassen.

    
BCS 19.01.2011 15:48
quelle

Tags und Links