Parameterleiste wird nicht 1:1 durchgereicht

(DE) System, Installation, Konfiguration, Hardware, Treiber, Netzwerk, Virtualisierung, etc.
(EN) System, Installation, Configuration, Hardware, Drivers, Network, Virtualisation, etc.
Antworten
Benutzeravatar
wilfried
Beiträge: 667
Registriert: Mo 23. Dez 2013, 18:26
Wohnort: Barsinghausen
Kontaktdaten:

Parameterleiste wird nicht 1:1 durchgereicht

Beitrag 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.
LutzG
Beiträge: 92
Registriert: Mo 23. Dez 2013, 14:24

Beitrag 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
Benutzeravatar
wilfried
Beiträge: 667
Registriert: Mo 23. Dez 2013, 18:26
Wohnort: Barsinghausen
Kontaktdaten:

Beitrag 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.
Benutzeravatar
wilfried
Beiträge: 667
Registriert: Mo 23. Dez 2013, 18:26
Wohnort: Barsinghausen
Kontaktdaten:

Beitrag 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.
Benutzeravatar
aschn
Beiträge: 1363
Registriert: Mi 25. Dez 2013, 22:47

Beitrag 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.
Andreas Schnellbacher
Benutzeravatar
Frank Wochatz
Beiträge: 1112
Registriert: So 22. Dez 2013, 22:04
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Benutzeravatar
Frank Wochatz
Beiträge: 1112
Registriert: So 22. Dez 2013, 22:04
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Antworten