お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Simple XML-like token reader"

この発言に対し以下のコメントが寄せられています
#00949 ぜえた さん RE:Simple XML-like token reader

 こんにちは、ぜえた です。 <header> <from>ぜえた</from> <to>ALL</to> </header> のようなXMLに似たタグを使ったテキストをトークン(タグと内容)に分解 するクラスです。空白は除きません。タグの解釈などは各自で行なってくださ い(^^; type TToken = (tkEndOfText, tkStartTag, tkEndTag, tkContent); TTokenReader = class private FText: string; FToken: TToken; FValue: string; FCur: PChar; procedure SetText(const Value: string); public procedure Next; property Token: TToken read FToken; property Text: string read FText write SetText; property Value: string read FValue; end; procedure TTokenReader.SetText(const Value: string); begin FText := Value; FCur := PChar(FText); end; procedure TTokenReader.Next; var p: PChar; l: Integer; begin p := FCur; case p^ of #0: begin FToken := tkEndOfText; end; '<': begin Inc(p); if p^ = '/' then begin FToken := tkEndTag; Inc(p); end else begin FToken := tkStartTag; end; while not (p^ in [#0, '>']) do Inc(p); if p^ = '>' then begin Inc(p); l := p - FCur; SetLength(FValue, l); if l > 0 then begin Move(FCur^, Pointer(FValue)^, l) end; end; end; else FToken := tkContent; while not (p^ in [#0, '<']) do Inc(p); l := p - FCur; SetLength(FValue, l); if l > 0 then begin Move(FCur^, Pointer(FValue)^, l) end; end; FCur := p; end; -------------------------------------------------------------------- type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Memo2: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } TokenReader: TTokenReader; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin TokenReader := TTokenReader.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin TokenReader.Free; end; procedure TForm1.Button1Click(Sender: TObject); const s: array[tkStartTag..tkContent] of string = ('StartTag: ', 'EndTag: ', 'Context: '); begin TokenReader.Text := Memo1.Lines.Text; TokenReader.Next; while TokenReader.Token <> tkEndOfText do begin Memo2.Lines.Add(s[TokenReader.Token] + TokenReader.Value); TokenReader.Next; end; end; ぜえた (QZC05100) Original document by ぜえた 氏 ID:(QZC05100)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum