guten abend!
einführung:
-------------------
also ich habe einen
xml parser, mit welchem ich mehrere files auslesen will.
die ausgelesenen informationen speichere ich dabei in ein grosses array (wollte es dynamisch machen und immer der grösse anpassen, das gibt aber speicherfehler ab einer grösse von 1002 einträgen) also... array[1..9999] of TDokument;
Delphi-Quellcode:
type TDocument = record
ID: cardinal;
Number: string;
Title: string;
usw..
end;
jedes mal wenn nun der parser einen content zwischen zwei
xml tag findet wird ein ereignis aufgerufen... ich habe zuvor das aktuelle
xml tag in der globalen variable CurrTag gespeichert.
nun frage ich nach tag ab (btw. gibts keine möglichkeit auch nach strings eine case abfrage zu machen? wie c++?) (content beinhaltet den eintrag zwischen den tags)
Delphi-Quellcode:
if CurrTag='ID' then
begin
CurrID:=strtoint(Content); {/ ID ist immer erster eintrag daher geht das so }
{ If CurrID>Length(NewDocDb) then SetLength(NewDocDb,CurrID+1); // geht nicht - speicher nehm ich an..? }
NewDocDb[CurrID].ID:=strtoint(Content);
end;
if CurrTag='Number' then
NewDocDb[CurrID].Number:=Content;
if CurrTag='Title' then
NewDocDb[CurrID].Title:=Content;
usw...
wie ihr seht ist das dann alles schön in meiner struktgur gespeichert... -> funktioniert alles bestens...
nun parse ich aber ein weiteres file, mit dem gleichen parser, den gleichen tags..
dieses will ich aber nicht in
NewDocDB speichern, sondern in
OldDocDB
frage:
-------------------------
wie kann ich das vereinfacht machen durch einen pointer?
also damit es etwa so aussieht:
Delphi-Quellcode:
if aktuelles file = altes file then
speicher_mich_hier = zeiger auf das array wo das alte gespeichert wird
if aktuelles file = neues file then
speicher mich hier = zeiger auf das array wo das neue gespeichert wird
if CurrTag='ID' then
begin
CurrID:=strtoint(Content);
speicher_mich_hier[CurrID].ID:=strtoint(Content);
end;
if CurrTag='Number' then
speicher_mich_hier[CurrID].Number:=Content;
if CurrTag='Title' then
speicher_mich_hier[CurrID].Title:=Content;
usw...
vielleicht noch zu sagen: die arrays sind global... müssen...
klar geht das ganze auch indem man einfach die ganze abfrage kopiert und so für eine simple abfrage riesenviel code braucht...
aber ich denk es muss doch möglich sein? also eine referenz auf ein anderes array zu machen
vielen dank für eure schnellen antworten!
beste grüsse,
ein etwas verzweifelter kendor
Ut sementem feceris, ita metes.
Nosce te ipsum!(Inschrift in Delphi, nach Cicero)