Seite 1 von 1

Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Mo 6. Jul 2015, 15:42
von wilfried
Hallo,

ich habe hier mal wieder eine Knobelaufgabe

Der Aufruferprozess:

Code: Alles auswählen

  1140 *-*         'START /MIN CHART §'ST_WPKNR.1'§N' D_NR;
       >L>           "START /MIN CHART §"
       >V>           "  BLDP      "
       >O>           "START /MIN CHART §  BLDP      "
       >L>           "§N"
       >O>           "START /MIN CHART §  BLDP      §N"
       >V>           "2702231990"
       >O>           "START /MIN CHART §  BLDP      §N 2702231990"
       >>>           "START /MIN CHART §  BLDP      §N 2702231990"
Der aufgerufene Prozess:

Code: Alles auswählen

Topic:§ BLDP §N 2702231990
   439 *-*         Parse Var topic '§' WPKNR '§' HIDE D_NR .;
       >V>           "§ BLDP §N 2702231990"
       >>>           " BLDP "
       >>>           "N"
       >>>           "2702231990"
       >.>           ""
Das Problem:
Beim Aufruf befinden sich zwischen dem ersten '§' und 'BLDP' zwei Leerzeichen.
Im aufgerufenen Prozess kommt aber nur noch ein führendes Leerzeichen an.

Kennt jemand dieses Phänomen und vielleicht auch noch einen einfachen Trick?
Ich schrecke noch vor dem Umbau der Parameterübergabe über Queue oder Datei zurück.

Re: Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Mo 6. Jul 2015, 16:33
von LutzG
Hallo Wilfried,

ich meine mich dunkel aus meiner VM-Zeit zu erinnern, daß beim parsen vereinfacht wird.

Vielleicht geht es ja mit verketten bzw. einer Variablen?

Gruß
Lutz

Re: Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Mo 6. Jul 2015, 17:35
von wilfried
Hallo Lutz,

das man beim Parsen aufpassen muss wenn Leerzeichen wichtig sind, ist mir klar.
Es handelt sich um ein Vispro/REXX-Projekt.
Unter Vispro wird die Parameterleiste in der Variable Topic bereitgestellt.
Der Display dieser Variable vor dem Parsen zeigt das zu diesem Zeitpunkt schon Leerzeichen fehlen.
Für mich ist der Übeltäter cmd.exe oder der Start-Befehl.
Ich werde mal versuchen die wichtigen Leerzeichen durch einen Platzhalter zu ersetzen und erst im aufgerufenen Prozess nach dem Parsen wieder zu entfernen.

Re: Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Mo 6. Jul 2015, 18:14
von wilfried
wilfried » Mo 6. Jul 2015, 17:35 hat geschrieben:Ich werde mal versuchen die wichtigen Leerzeichen durch einen Platzhalter zu ersetzen und erst im aufgerufenen Prozess nach dem Parsen wieder zu entfernen.
Genauso funktioniert es.
Vor dem Aufruf alle wichtigen Leerzeichen mit

Code: Alles auswählen

WPKNR=translate(WPKNR,'#',' ')
umgeschossen und im gerufenen Programm mit

Code: Alles auswählen

WPKNR=translate(WPKNR,' ','#')
wieder hergestellt.

Re: Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Mo 6. Jul 2015, 19:13
von aschn
CMD zerlegt die Parameter schon von alleine in Parameter, ob man will oder nicht. Das bedeutet dann, dass nach jedem Leerzeichen ein neuer Parameter beginnt. Mehrere Leerzeichen werden dabei als eines gewertet.

Um dieses zu verhindern, kann man eigentlich nur die Parameterliste mit "..." maskieren, wobei diese Anführuungszeichen selbst dann auch abgetrennt werden. Die andere Möglichkeit ist die von Dir gewählte, wobei mal das eine und mal das eine weniger schlimm ist. Eine saubere Lösung gibt es mit CMD nicht.

Re: Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Di 7. Jul 2015, 07:45
von Frank Wochatz
Hallo Wilfried,

es gibt da in Rexx noch andere Probleme, zB. können keine URLs korrekt als Parameter übergeben werden.

Da macht es Sinn, statt Parameter auf andere Möglichkeiten der Datenübergabe zu setzen. Stichtwort Interpozesskommunikation.

Eine Möglichkeit wären temporäre Dateien mit den Daten (Holzhammermethode, einfach aber funktional). Oder zB. Queues oder Pipes (eleganter, keine HD Operationen)


Grüße
Frank

Re: Parameterleiste wird nicht 1:1 durchgereicht

Verfasst: Di 7. Jul 2015, 07:59
von Frank Wochatz
PS: Eine weitere Lösung und ein Beispiel zu Übergabe "unmöglicher" Parameter findest Du in Rexx Tipps & Tricks unter "Workaround for the // limitation". Dort wird das mit einer Umgebungsvariablen gemacht, in die die Daten geschrieben werden.