Einzelnen Beitrag anzeigen

Kendor

Registriert seit: 2. Jan 2003
Ort: Thun
16 Beiträge
 
Delphi 7 Professional
 
#1

Zeiger/Pointer Frage (grosse Arrays) @cracks

  Alt 6. Apr 2005, 19:05
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='IDthen
        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='Numberthen
        NewDocDb[CurrID].Number:=Content;
     if CurrTag='Titlethen
        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='IDthen
        begin
          CurrID:=strtoint(Content);
          speicher_mich_hier[CurrID].ID:=strtoint(Content);
        end;
     if CurrTag='Numberthen
        speicher_mich_hier[CurrID].Number:=Content;
     if CurrTag='Titlethen
        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)
  Mit Zitat antworten Zitat