Zu blöd eine Datasection zu parsen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Zu blöd eine Datasection zu parsen

Beitrag 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Zu blöd eine Datasection zu parsen

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Zu blöd eine Datasection zu parsen

Beitrag 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 = ""

Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Zu blöd eine Datasection zu parsen

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Re: Zu blöd eine Datasection zu parsen

Beitrag 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: Zu blöd eine Datasection zu parsen

Beitrag 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
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Antworten