seit einiger zeit frage ich mich wie ich solche Dateien hier Pasen könnte:
Code: Alles auswählen
(supertux-tiles
(tilegroup
(name "Snow")
(tiles
7 8 9 202
13 14 15 204
10 11 12 206
16 17 18 205
30 31 114 113
21 22 19 203
20 23 207 208
115 116 0 0
117 118 0 0
122 209 123 0
124 210 125 0
1345 1346 1344 0
33 32 34 1741
35 37 39 1740
38 36 43 1739
40 41 42 1815
119 121 120 1816
1539 0 0 0
0 1826 1827 0
1829 1830 1831 1832
1833 1834 1835 1836
1837 1838 1843 1844
1839 1840 1845 1846
1841 1842 1847 1848
0 0 1849 1850
)
)
(tilegroup
(name "Snow (Paralax Background)")
(tiles 149 160 151 158
152 153 154 159
155 156 157 0
161 162 163 170
164 165 166 171
167 168 169 1343
0 0 0 1342 )
)
(tilegroup
ich habe angefangen einen Paser zu schreiben:
Code: Alles auswählen
function TPlConfigFile.ReadString(aDir, aKey: String): String;
var
str,str1,s2:String;
i,t,nt:Integer;
gefunden:Boolean;
begin
str:=''; str1:=''; t:=1;
str1:=GetToken(adir,'/',t);
nt:=NumToken(aDir,'/'); Gefunden:=False;
s2:='';
// writeln(nt);
for i:=0 to st.Count-1 do begin
// writeln(st[i],'/',s2+'('+str1);
if (not Gefunden) and (TrimLeft(st[i]) = '('+str1) then begin
if t+1 <=nt then begin
inc(t);
str1:=GetToken(adir,'/',t);
//writeln(str1);
// s2:=s2+' ';
end
else Gefunden:=True;
end;
if (gefunden) and (pos(akey,st[i]) >0) then begin
str:=st[i];
break;
end;
end;
result:=str;
end;
Nur ich frage mich jetzt name "Snow") finden sollte.
Ich dachte ich hänge noch ein Paramter dran, in dem der "Value" wert drin stehen muss...
so wird das ganze aufgerufen:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
plConfig:=TPlConfigFile.Create('/usr/share/supertux/images/tiles.strf');
Writeln('ReadString:',plConfig.ReadString('supertux-tiles/tilegroup','name'));
application.Terminate;
end;
edit: in der Doku steht drin von Supertux das S-Expressions verwendet wird, aber ich finde dazu nichts passendes in google:
http://supertux.lethargik.org/wiki/S-expr" onclick="window.open(this.href);return false;