Seite 1 von 1

Zu blöd eine Datasection zu parsen

Verfasst: 23.11.2009 00:15
von alen
Hallo Zusammen,

ich stell mich mit dem Parsen von Daten aus einer DataSection ein wenig dumm an.

Ich habe hier sowas:

Code: Alles auswählen

DataSection
  DBData:
    Data.S "Peter","Pan"
    Data.S "Alfred","E.Neumann"
    Data.S "Willibald","Müller"
    Data.S "Egon","Anfänger"
EndDataSection
Nun möchte ich diese Daten in einer Schleife auslesen aber kriege nix brauchbares auf die Reihe.
Habe es so versucht:

Code: Alles auswählen

Restore DBData
repeat
  read.s vorname
  read.s nachnahme 
until vorname.s <> ""
Wenn ich das ganze mit einer for .. next schleife mit festen Länge durchlaufe klappt es.
Aber ich kenne die Anzahl der Zeilen nicht im Voraus. Daher der andere Ansatz.

Bekomme aus der PB Hilfe aber keinen Hinweis und im Forum sind meine Suchversuche auch nicht erfolgreich. Ich will aber nicht ausschliessen das ich nach den falschen Begriffen gesucht habe.

Hat hier jemand mal einen Tipp oder einen Ansatz.
Bin dankbar für jegliche Hilfe.

Vielen Dank im Voraus.

Grüße
alen

Re: Zu blöd eine Datasection zu parsen

Verfasst: 23.11.2009 00:18
von Kaeru Gaman
dein until ist falsch, weil der vorname immer nicht leer ist.
und du brauchst eine ende-markierung, damit der Read-Vorgang nicht ins Leere greift.

Code: Alles auswählen

Define vorname.s
Define nachnahme.s

Restore DBData
Repeat
  Read.s vorname
  Read.s nachnahme
  Debug nachnahme + ", " + vorname
Until vorname = "#"

DataSection
  DBData:
    Data.S "Peter","Pan"
    Data.S "Alfred","E.Neumann"
    Data.S "Willibald","Müller"
    Data.S "Egon","Anfänger"
    Data.s "#", "#"
EndDataSection

Re: Zu blöd eine Datasection zu parsen

Verfasst: 23.11.2009 00:38
von ts-soft
Statt der Raute gehts natürlich auch mit einem leerem string:

Code: Alles auswählen

EnableExplicit

DataSection
  DBData:
  Data.s "Peter", "Pan"
  Data.s "Alfred", "E.Neumann"
  Data.s "Willibald", "Müller"
  Data.s "Egon", "Anfänger"
  Data.s "", ""
EndDataSection

Define.s vorname, nachnahme
Restore DBData
Repeat
  Read.s vorname
  Read.s nachnahme
Until vorname = ""


Re: Zu blöd eine Datasection zu parsen

Verfasst: 23.11.2009 01:52
von Kaeru Gaman
wobei natürlich anzumerken ist, dass dort dann trotzdem bei beiden #NULL markierungen für die beiden String-Enden in die DataSection geschrieben werden und nicht ganix...

Re: Zu blöd eine Datasection zu parsen

Verfasst: 23.11.2009 14:54
von alen
Hallo Zusammen,

auch wenn ich PHP und Python versaut bin, oder auch eben deswegen, muss ich PB erstmal immerwieder neu lernen. Vor allem nach langen Pausen.

Danke für Eure Hilfe
Es hat funktioniert.

Grüße
alen

Re: Zu blöd eine Datasection zu parsen

Verfasst: 23.11.2009 20:58
von Josef Sniatecki
Kaeru Gaman hat geschrieben:wobei natürlich anzumerken ist, dass dort dann trotzdem bei beiden #NULL markierungen für die beiden String-Enden in die DataSection geschrieben werden und nicht ganix...
Und deswegen nutze ich mein Zeigerverfahren :mrgreen::

Code: Alles auswählen

Global *Pointer.Character, *First.Character
Global Vorname.s, Nachname.s


*Pointer = ?Start
Repeat
  ; Startposition des ersten Zeichens merken:
  *First = *Pointer
  ; Alle Zeichen bis zur terminierenden Null überspringen:
  While *Pointer\c
    *Pointer + SizeOf(Character)
  Wend
  ; Zeichen von "First" bis "Pointer" in "Vorname" einlesen:
  Vorname = PeekS(*First, *Pointer - *Start)
  
  *Pointer + SizeOf(Character)
  
  ; Startposition des ersten Zeichens merken:
  *First = *Pointer
  ; Alle Zeichen bis zur terminierenden Null überspringen:
  While *Pointer\c
    *Pointer + SizeOf(Character)
  Wend
  ; Zeichen von "First" bis "Pointer" in "Nachname" einlesen:
  Nachname = PeekS(*First, *Pointer - *Start)
  
  *Pointer + SizeOf(Character)
  
  Debug Vorname + " " + Nachname
Until *Pointer = ?Finish

DataSection
  Start:
    Data.s "Josef"     , "Sniatecki"
    Data.s "Leif"      , "Paulus"
    Data.s "Maximilian", "Roth"
  Finish:
EndDataSection