runshell mit Parameterübergabe [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

runshell mit Parameterübergabe [erledigt]

Beitrag von Ewald »

Tag zusammen,
ich rufe aus meinen Programmen andere XBASE Programme auf und übergebe dabei verschiedene Parameter.
Beispiel:

Code: Alles auswählen

runshell(auftrag->teilnr,"lager.exe",.t.)
Im Programm lager.exe nehme ich als parameter die teilnr auf und arbeite damit weiter. Ist ein bewährtes Verfahren und ich
nutze es so seit Jahren.
Funktionierte so lange wunderbar, bis ich jetzt auf einen Kunden getroffen bin, der Leerzeichen in seinen Teilenummern hat.
Wenn auftrag->teilnr jetzt z.B. "0815 4711" ist, und ich übergebe auftrag->teilnr als parameter, kommt im Lager nur
der String bis zum ersten Leerzeichen an. Also 0815.
Um das mal ein wenig aufzubohren habe ich mal folgendes versucht

Code: Alles auswählen

runshell("0815  4711","lager.exe",.t.)
Geht aber auch nicht. Es kommt nur 0815 an.

Vom Dospromt aus sieht das wie folgt aus:
Wenn ich aufrufe:
lager 0815 4711 geht es nicht - es kommt nur 0815 an
lager "0815 4711" geht jedoch - der String kommt kpl. an.

Hat jemand einen Tip, wie ich den String inkl. Leerzeichen aus dem Programm mit runshell rüber bekommen kann ?

Gruß
Ewald
Zuletzt geändert von Ewald am So, 20. Jun 2010 19:39, insgesamt 1-mal geändert.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: runshell mit Parameterübergabe

Beitrag von AUGE_OHR »

Ewald hat geschrieben:Hat jemand einen Tip, wie ich den String inkl. Leerzeichen aus dem Programm mit runshell rüber bekommen kann ?
schon mal mit

Code: Alles auswählen

cString := "´ 0815  4711´"
cString := "[0815  4711]"
versucht ?
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe

Beitrag von Ewald »

Hi Jimmi
geht nicht

Code: Alles auswählen

"'0815 4711'"
ginge

Code: Alles auswählen

'"0815 4711'"
aber - ich muss ja auftrag->teilnr rüberbringen ...
Wie ich gegoogelt habe, gibt es das Problem in Delphi, Java, C++ ...
Mensch gegen Maschine - und die Maschine kann nicht gewinnen 8)
Irgendwie ist das zu packen. Der Sonntag ist ja noch lang.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: runshell mit Parameterübergabe

Beitrag von AUGE_OHR »

Ewald hat geschrieben:aber - ich muss ja auftrag->teilnr rüberbringen ...
Wie ich gegoogelt habe, gibt es das Problem in Delphi, Java, C++ ...
Mensch gegen Maschine - und die Maschine kann nicht gewinnen 8)
Irgendwie ist das zu packen. Der Sonntag ist ja noch lang.
ok ... wie wäre 2x STRTRAN() ?
statt des " " machst du ein "#" daraus und der Empfänger muss es dann wieder zum " " machen.
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe

Beitrag von Ewald »

Hi Jimmi,
ginge auch, aber das würde bedeuten, das ich mich vor der Maschine strecke - und vor allen Dingen würde mein nächster (noch unbekannter Kunde) sicherlich "#" in seiner Teilenummer verwenden ;-)

Aber ich habe das jetzt mit einem kleinen Zwischenschritt gelöst. Das funktioniert (warum auch immer).

Code: Alles auswählen

action {||xvar:='"'-auftrag->teilnr-'"',runshell(xvar,"lager.exe",.t.)}
Ich denke, jetzt ist ein Bierchen fällig.
Schönes Wochenende für den Rest

Ewald
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von UliTs »

Hallo Ewald,

bei der Parameterangabe in RunShell werden mehrere Parameter mit Leerzeichen voneinander getrennt. Deshalb steht nur der erste Teil Deines Strings im (ersten) Parameter drin. :?
Mit Hilfe von " kannst Du auch Leerzeichen innerhalb des (ersten) Parameters übergeben. :)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von Tom »

Hallo, Ewald.

Frage am Rande: Warum machst Du das überhaupt so?
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von Ewald »

Hi Tom,
was meinst du ???
Warum ich mit runshell arbeite ?
Ich habe einige kleine vollständig gekapselte Standardprogramme, die ich firmenübergreifend
einsetze und die sich von allem möglichen Stellen der Hauptanwendungen aus aufrufen lassen.
Z.B. ein Lagerprogramm.
Wenn das mit einem Parameter aufgerufen wird, kommen sofort entsprechende Anzeigen.
Wenn es ohne Parameter aufgerufen wird, erscheint ein Auswahlbild für eine Teilenummer.
Ausserdem können sich diese Programme mit entsprechenden Parametern selbst aufrufen.
Interessant bei Stücklisten, aus denen sich immer wieder Unterstücklisten mit dem gleichen
Programm bearbeiten lassen.
Das kann der Anwender von mir aus 100 x machen und selbst entscheiden, was er schließlich
und endlich wieder zumacht oder womit er weiterarbeiten will.
Gruß
Ewald
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von Rolf Ramacher »

Hi Ewald,

schau dir mal aus den Tools CharRem() an
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von Tom »

Hallo, Ewald.

Ich verstehe den Sinn dahinter schon. Allerdings kann man das auch über in DLLs gesammelte Funktionen und/oder Prozeduren erreichen, und man hätte dadurch folgende Vorteile:

- die Funktionen könnten nicht von außen mit den "richtigen" Parametern aufgerufen werden (Zugriffsrechte?)

- es gäbe ein gesammeltes "Applikation beenden". Wie machst Du das mit den sich selbst aufrufenden Teilprogrammen? Wie löst da ein Benutzer aus, dass alle Instanzen geschlossen werden sollen?

- mit Multithreading (das ist wirklich simpel) hätte man gekapselte Workareas, könnte also auch das Sichselbstaufrufen völlig problemlos ermöglichen, selbst bei zugeordneten Aliasen (z.B. Kundendatei hat immer den Alias "kunden")

- Einstellungen wären systemübergreifend

- mehrfach genutzte Funktionen müssten nur einmalig zur Verfügung gestellt werden (Was ist mit neuen Versionen? Es müssen bei Dir ja immer alle EXEn ausgetauscht werden!)
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von AUGE_OHR »

hi,

Anmerkung zu Xbase++ Parameter : wir haben mal festgestellt, abhängig vom OS(), das der Environment Space nicht "beliebig" viele Parameter bzw die maximale Länge wird begrenzt.

dies gilt auch für DragDrop wo ich versucht habe "viele" markierte Dateien zu "droppen".
für solche Zwecke sollte man sich übrigens mal PValue() ansehen was die Parameter übergabe vereinfachen kann.
gruss by OHR
Jimmy
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

Re: runshell mit Parameterübergabe [erledigt]

Beitrag von Juergen »

Hallo,

warum nicht über eine kleine lokale Datenbank, Textdatei
oder die Zwischenablage ?

Gruß
Jürgen
Antworten