Ich versuche D zu lernen und ich dachte, nach dem Hallo Welt Zeug könnte ich etwas ausprobieren, was ich in Java machen wollte, wo es ein großer Schmerz wegen der war So funktionierte die Regex-API: Eine kleine Template-Engine. Also begann ich mit einigen einfachen Code, um eine Datei, Zeichen für Zeichen lesen durch:Richtiger Weg, um eine Datei zu parsen und Ausgabe zu erstellen
import std.stdio, std.file, std.uni, std.array;
void main(string [] args) {
File f = File("src/res/test.dtl", "r");
bool escape = false;
char [] result;
Appender!(char[]) appender = appender(result);
foreach(c; f.rawRead(new char[f.size])) {
if(c == '\\') {
escape = true;
continue;
}
if(escape) {
escape = false;
// do something special
}
if(c == '@') {
// start of scope
}
appender.put(c);
}
writeln(appender.data());
}
Der Inhalt meiner Datei so etwas wie dies sein könnte:
<h1>@{hello}</h1>
Das Ziel ist, die ersetzen @ {Hallo} Teil mit einem Wert an die Engine übergeben.
Also habe ich eigentlich zwei Fragen: 1. Ist das eine gute Möglichkeit, Zeichen aus Datei in D zu verarbeiten? Ich habe das zusammengehackt, nachdem ich alle importierten Module durchforstet und herausgefunden hatte, wie es sich anhört. 2. Manchmal möchte ich auf mehr als ein Zeichen zugreifen (um die Suche nach Escape-Sequenzen zu verbessern, einen ganzen Bereich zu finden, usw.) Sollte ich das Array dafür zerlegen? Oder sind die Regex-Funktionen von D dieser Herausforderung gewachsen? , Ich fand nur matchFirst und matchAll Methoden, aber ich würde gerne übereinstimmen, ersetzen und zurück zu dieser Position.
Ich würde Ihnen empfehlen, readText zu verwenden, anstatt mit File und rawRead herumzuspielen. http://dlang.org/phobos/std_file.html#.readText In Bezug auf die zweite Frage würde ich empfehlen, dass Sie die Index + Wert Iteration Version von foreach verwenden. '' ' foreach (i, c; readText (" ... ")) { ' '' –
'matchFirst' kann verwendet werden, um eine Serie zu erhalten, da ein Objekt mit' pre', 'hit' zurückgegeben wird und 'post', die die Segmente der Eingabe sind, die vor dem Treffer kommen, die Übereinstimmung selbst und die Zeichenfolge nach dem Treffer. –