Es gibt mehrere Möglichkeiten: Eine davon
Mehrere Values:
FORMPOS=264=128,...
Sowas schreiben:
Code:
RnCsvWrSep(csvref, "FORMPOS")
RnCsvWrVal(csvref, "264")
RnCsvWrVal(csvref, "128")
Sowas Lesen
Code:
RnCsvRdSep(csvref, Key)
if Key = "FORMPOS" then
    RnCsvRdVal(csvref, X_VAL)     ("264")
    RnCsvRdVal(csvref, Y_VAL)      ("128")
Da mach ich es aber immer so, daß die Routine ihre Values selber liest oder schreibt, d.h. ich drück' ihn einfach den CSVREF Handle in die Hand

Code:
RnCsvRdSep(csvref, Key)
if Key = "FORMPOS" then
     sub_routine (CsvRef as Integer)
Elseif Key = "SAUBACKE" then
     sub2_routine (CsvRef as Integer)

public    sub_routine (CsvRef as Integer)

    RnCsvRdVal(csvref, X_VAL)     ("264")
    RnCsvRdVal(csvref, Y_VAL)      ("128")

public    sub2_routine (CsvRef as Integer)

    RnCsvRdVal(csvref, SAU_VAL)     ("???")
Da kann sich die Routine selber drum kümmern, da sie ja am besten weiss, was sie braucht.

Da das "RdVal" niemals über das konkrete Element hinauskommt, kann da nix passieren, Also wenn nur ein Value da ist, kann die Sub auch zwanzigmal RdVal sagen, ohne was durcheinander zu bringen.


Andere Variante, auch gern genommen:
In einem solchen String stehen nur Keys und werte für EINE Funktion
Die Funktion als Key ohne value vorne.

"FORMPOS,X=100,Y=20,TOPX=233,TOPY=200"

Dann würde die Hauptroutine nur einen RdKey machen und dann die Funktionen mit dem CsvRef aufrufen, dann soll die selber lesen, was sie braucht.


Dritte Variante, etwas aufwendiger:
Irgendein Value ist selbst ein Key-Value string (Das geht beliebig rekursiv). Das erklär' ich noch, wie das geht