- Einleitung
- In den Dateien Classes.pas und Classes.hpp findet man eine undokumentierte Klasse namens TParser vor. Diese kann benutzt werden, um Text zu parsen. Hierbei dienen Leerzeichen, Tabs, Doublequotes oder Leerzeilen als Trennzeichen zwischen den einzelnen Tokens. Ein Token kann z.B. ein String oder eine Zahl (int, float, hex) sein.
- Verwendung
- Die Klasse TParser benötigt einen TFileStream, einen TStringStream oder einen TMemoryStream.
- Beispiel
/* char Token (read-only) gibt den Token-Typ zurück (toEOF, toSymbol, toString, toInteger, toFloat, toWString) int SourceLine (read-only) gibt die Zeilennummer die das Token enthält zurück int SourcePos() gibt die Position des Tokens im Stream zurück char NextToken() gibt den Typ des nächsten Tokens zurück Extended TokenFloat() gibt ein Token zurück und konvertiert ihn zu Extended int TokenInt() gibt ein Token zurück und konvertiert ihn zu int AnsiString TokenString() gibt ein Token zurück und konvertiert ihn zu AnsiString WideString TokenWideString() gibt ein Token zurück und konvertiert ihn zu WideString */ // Eingabe: Textdatei // Ausgabe: Memofeld (Memo1) void __fastcall TForm1::Button1Click(TObject *Sender) { if (OpenDialog1->Execute()) { TFileStream *F = new TFileStream(OpenDialog1->FileName, fmOpenRead); TParser *Parser = new TParser(F); while (Parser->Token != toEOF) { //Token holen AnsiString sTokenString = Parser->TokenString(); //Streamposition holen int iPosition = Parser->SourcePos(); //Zeilennummer holen int iZeile = Parser->SourceLine; //TokenTyp bestimmen char cTokenType = Parser->Token; AnsiString sAusgabe = sTokenString+" ist ein "; switch(cTokenType) { case toSymbol : sAusgabe = sAusgabe + "Symbol"; break; case toInteger: sAusgabe = sAusgabe + "Integer"; break; case toFloat : sAusgabe = sAusgabe + "Float"; break; case toString : sAusgabe = sAusgabe + "String"; break; default : sAusgabe = sAusgabe + "Zeichen"; } Memo1->Lines->Add(sAusgabe + " gefunden in Zeile: "+IntToStr(iZeile)+", Position: "+IntToStr(iPosition)); Parser->NextToken(); } if (Parser) { delete Parser; Parser = NULL; } if (F) { delete F; F = NULL; } } }