Daten mit einer Schleife aus xml datei auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Daten mit einer Schleife aus xml datei auslesen?

Beitrag von Cabble »

Hi
Ich bin bei meinem Programm mal wieder auf ein kleines Problem gestoßen.
Ich will meinen Arrays die Daten aus der xml zuordnen. Z.B. so das
s_unit(0) = Abonimation
s_unit(1) = Acolyte
...

Ich habe erstmal die Richtigkeit der Datenrückgabe mit dem Debuggergeprüft.

Hier die Debugger Ausgabe:

Code: Alles auswählen

0

Unit
Abomination
Minimal_Damage
33
Minimal_Damage_2
0
Maximal_Damage
39
Maximal_Damage_2
0
Hitpoints
1175
Attack_Type
Normal
Attack_Type_2
na
Cooldown
1.9
Cooldown_2
0
Armor_Type
Heavy
Armor
2
Regeneration
2

2

Unit
Acolyte
Minimal_Damage
9
Minimal_Damage_2
0
Maximal_Damage
10
Maximal_Damage_2
0
Hitpoints
220
Attack_Type
Normal
Attack_Type_2
na
Cooldown
2.5
Cooldown_2
0
Armor_Type
Medium
Armor
0
Regeneration
2

4

Unit
Archer
Minimal_Damage
16
Minimal_Damage_2
0
Maximal_Damage
18
Maximal_Damage_2
0
Hitpoints
245
Attack_Type
Pierce
Attack_Type_2
na
Cooldown
1.5
Cooldown_2
0
Armor_Type
Medium
Armor
0
Regeneration
0.5

[ * * * * * * * - - - C U T - - - * * * * * * * ]

168

Unit
Witch Doctor
Minimal_Damage
10
Minimal_Damage_2
0
Maximal_Damage
14
Maximal_Damage_2
0
Hitpoints
315
Attack_Type
Magic
Attack_Type_2
na
Cooldown
1.75
Cooldown_2
0
Armor_Type
Unarmored
Armor
0
Regeneration
0.25

Kann ich das mit schleifen lösen?

Hier der Codeabschnitt:

Code: Alles auswählen

Procedure xmldata()
  
  Shared s_unit()
  Shared s_mindam()
  Shared s_mindam2()
  Shared s_maxdam()
  Shared s_maxdam2()
  Shared s_hitpoints()
  Shared s_atttype()
  Shared s_atttype2()
  Shared s_cooldown()
  Shared s_cooldown2()
  Shared s_armtype()
  Shared s_armor()
  Shared s_regeneration()
  
    Select language
      Case "eng","english","englisch"
        xmlpath.s = GetCurrentDirectory() + "progdata\units_eng.xml"
      Case "ger","german","deu","deutsch"
        xmlpath.s = GetCurrentDirectory() + "progdata\units_ger.xml"
      Default
        xmlpath.s = GetCurrentDirectory() + "progdata\units_eng.xml"
    EndSelect
    LoadXML(#XMLFILE, xmlpath)
    *mainnode = MainXMLNode(#XMLFILE)
    *unitdata = ChildXMLNode(*mainnode)
    *subnode = ChildXMLNode(*mainnode)
    *unitdata = ChildXMLNode(*subnode)
    unitcount = (XMLChildCount(*mainnode) * 2) - 2
    datacount = (XMLChildCount(*subnode) * 2) - 1
    For i = 0 To unitcount
      Debug i
      Debug ""
      For u = 0 To datacount
        Debug GetXMLNodeName(*unitdata)
        Debug GetXMLNodeText(*unitdata)
        *unitdata = NextXMLNode(*unitdata)
        u = u + 1
      Next
      If i <> unitcount
      *subnode = NextXMLNode(*subnode)
      *unitdata = ChildXMLNode(*subnode)
      EndIf
      Debug ""
      i = i + 1
    Next
  
EndProcedure
Die Arrys sind bereits richtig definiert!
siehe hier:

Code: Alles auswählen

  Dim s_unit.s (unitsintable)
  Dim s_mindam.l (unitsintable)
  Dim s_mindam2.l (unitsintable)
  Dim s_maxdam.l (unitsintable)
  Dim s_maxdam2.l (unitsintable)
  Dim s_hitpoints.l (unitsintable)
  Dim s_atttype.s (unitsintable)
  Dim s_atttype2.s (unitsintable)
  Dim s_cooldown.f (unitsintable)
  Dim s_cooldown2.f (unitsintable)
  Dim s_armtype.s (unitsintable)
  Dim s_armor.f (unitsintable)
  Dim s_regeneration.f (unitsintable)
unitstable ist eine Variable die angibt, wie viele Einheiten-Datensätze vorhanden sind.

Sagt bescheid, falls ihr das xml file braucht.

mfg Cabble
Zuletzt geändert von Cabble am 29.01.2009 17:51, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

find ich schon etwas unpraktisch, tausen zeilen debugger zu posten...
hättest gleich das XML reinstellen können, oder besser keins von beidem.

@topic

> Kann ich das mit schleifen lösen?

solltest du. sieht extrem danach aus.

deine daten solltest du in ein einziges, dafür strukturiertes Array packen.

und dein atttype sollte vielleicht eher ein wert sein, der in bezug zu den strings steht.
also, z.b. könnte "Normal" eine 1 sein, und "na" eine 0, "pierce" eine 2 etc.
in der Unit steht der Wert, in einer anderen Tabelle der String, damit du das Anzeigen kannst.
das hat den vorteil, dass du den typ in einer abfrage sicher erkennen kannst,
wenn du einen ganzen String reinschreibst brauchst du nur nen kleinen
tippfehler in den datensätzen und dein proggy erkennt den atttype nicht mehr.

und dein präfix "s_" ist irreführend, das sieht aus als ob alle felder strings sind.

Code: Alles auswählen

Structure unitdata
  unittype.l
  unitname.s 
  mindam.l 
  mindam2.l 
  maxdam.l 
  maxdam2.l 
  hitpoints.l 
  atttype.l 
  atttype2.l
  cooldown.f 
  cooldown2.f 
  armtype.l
  armor.f
  regeneration.f
EndStructure

Dim Units.unitdata (unitsintable)
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Beitrag von Cabble »

wie meinst du das mit dem strukturiertem arrey?

s_ ist für mich ein hinweis dafür, das es sich bei der variable um daten aus der xml datei handelt.
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Titel des Threads: Daten mit einer Scleife aus xml datei auslesen?
Bitte mal Fehler korrigieren, findet sonst ja keiner. :)
Win11 x64 | PB 6.20
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> wie meinst du das mit dem strukturiertem arrey?

ganz genau so, wie ich das beispiel geschrieben hab....


btw: ich werd dieses unsäglich lange listing mal kürzen.
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Beitrag von Cabble »

das mit dem kürzen hatte ich auch grad vor. ich hab nen ftp server. ich lad da die xml datei hoch.
Little John

Beitrag von Little John »

Kaeru Gaman hat geschrieben:find ich schon etwas unpraktisch, tausen zeilen debugger zu posten...
Genauer gesagt über 2460 Zeilen ...

Tja, Pech gehabt! Das sind zu wenige. Wegen bestehender ultraperforierter-metasynchroner Verpflichtungen darf ich leider nur auf Fragen antworten, die von mindestens 5000 Zeilen interstellarem Datenmüll begleitet werden. :mrgreen:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Little John hat geschrieben:Tja, Pech gehabt! Das sind zu wenige. Wegen bestehender ultraperforierter-metasynchroner Verpflichtungen darf ich leider nur auf Fragen antworten, die von mindestens 5000 Zeilen interstellarem Datenmüll begleitet werden. :mrgreen:
ROFEL ... you made my day!
Benutzeravatar
Cabble
Beiträge: 32
Registriert: 24.01.2009 13:48
Wohnort: Mecklenburg-Vorpommer O.o
Kontaktdaten:

Beitrag von Cabble »

hoppla ^^
so viel is das? xD
naja... hier is die xml: units_eng.xml
Zuletzt geändert von Cabble am 29.01.2009 18:27, insgesamt 3-mal geändert.
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

@Neuer Titel: Dankeschön, die Suchfunktion wirds freuen :wink:
Win11 x64 | PB 6.20
Antworten