SubstringBefore: Funktioniert ueberhaupt nicht (?)

Antworten
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

SubstringBefore: Funktioniert ueberhaupt nicht (?)

Beitrag von embl-structures »

Hi,

die Funktion SubstringBefore scheint nicht zu funktionieren. Bei saemtlichen untenstehenden Statements erhaelt man fuer $mystring2 einen Leerstring:

Code: Alles auswählen

set $mystring = "ich (bin) doof"
stop $mystring
set $mystring2 = SubstringBefore($mystring, "d")
stop $mystring2

set $mystring = "ich (bin) doof"
stop $mystring
set $mystring2 = SubstringBefore($mystring, "h")
stop $mystring2

set $mystring = "ichbindoof"
stop $mystring
set $mystring2 = SubstringBefore("$mystring", "d")
stop $mystring2

set $mystring = "ich(bin)"
stop $mystring
set $mystring2 = SubstringBefore($mystring, "(")
stop $mystring2

set $mystring = "ich (bin)"
stop $mystring
set $mystring2 = SubstringBefore($mystring, "(")
stop $mystring2

set $mystring = "ichbin"
stop $mystring
set $mystring2 = SubstringBefore("ichbin", "h")
stop $mystring2
Winst-Version ist 4.8.8.1. Gibt es dafuer eine Erklaerung oder einen Fix?

Gruss

frank
p.grass
Beiträge: 44
Registriert: 04 Sep 2009, 14:31

Re: SubstringBefore: Funktioniert ueberhaupt nicht (?)

Beitrag von p.grass »

Hi, embl-structures.
Wenn es nicht geändert wurde in einer aktuellen Version dann werden Variablen nicht durch $XXXX beschrieben, sondern durch $XXXX$ ( man beachte das Dollar Zeichen nach der Variable ).

Gruß p.grass
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3319
Registriert: 04 Jun 2008, 14:27

Re: SubstringBefore: Funktioniert ueberhaupt nicht (?)

Beitrag von d.oertel »

Hi,

kein Bug.

Handbuch:
SubstringBefore (STRINGWERT1, STRINGWERT2)
liefert das Anfangsstück von STRINGWERT1, wenn STRINGWERT2 das Endstück
ist.
Z.B. hat
SubstringBefore ("C:\programme\staroffice\program\soffice.exe",
"\program\soffice.exe")
den Wert
"C:\programme\staroffice"
In den von Dir verwendeten Beispielen ist STRINGWERT2 nicht das Endstück.
Ich empfehle hier die Verwendung von splitstring und takestring.


Bei mir liefert der Code:

Code: Alles auswählen

	comment ""
	comment "-------------------------------------"
	comment "Testing: "
	comment "SubstringBefore"
	set $ConstTest$ = "C:\programme\staroffice"
	set $CompValue$ = SubstringBefore ("C:\programme\staroffice\program\soffice.exe","\program\soffice.exe")
	if ($ConstTest$ = $CompValue$)
		comment "passed"
	else
		set $TestResult$ = "not o.k."
		LogWarning "failed"
	endif
folgendes Log:

Code: Alles auswählen

[5] [1.7.2010 11:31:50]   comment: 
[5] [1.7.2010 11:31:50]   comment: -------------------------------------
[5] [1.7.2010 11:31:50]   comment: Testing: 
[5] [1.7.2010 11:31:50]   comment: SubstringBefore
[1] [1.7.2010 11:31:50]   
[1] [1.7.2010 11:31:50]   Set  $ConstTest$ = "C:\programme\staroffice"
[6] [1.7.2010 11:31:50]     The value of the variable is now: "C:\programme\staroffice"
[1] [1.7.2010 11:31:50]   
[1] [1.7.2010 11:31:50]   Set  $CompValue$ = SubstringBefore ("C:\programme\staroffice\program\soffice.exe","\program\soffice.exe")
[6] [1.7.2010 11:31:50]     The value of the variable is now: "C:\programme\staroffice"
[1] [1.7.2010 11:31:50]   
[1] [1.7.2010 11:31:50]   If
[5] [1.7.2010 11:31:50]     $ConstTest$ = $CompValue$   <<< result true
[5] [1.7.2010 11:31:50]     ($ConstTest$ = $CompValue$)   <<< result true
[1] [1.7.2010 11:31:50]   Then
[5] [1.7.2010 11:31:50]     comment: passed
[1] [1.7.2010 11:31:50]   
[1] [1.7.2010 11:31:50]   Else
[1] [1.7.2010 11:31:50]   EndIf
Ansonsten hat p.grass recht, dass es sinnvoll und dringend empfohlen ist Variablennamen mit $ vorne und hinten zu Kennzeichnen.

Weiterhin empfehlen wir unsere Supportverträge für den produktiv Betrieb:
http://uib.de/www/opsi/service_support/ ... index.html


gruss
d.oertel


gruss
d.oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: SubstringBefore: Funktioniert ueberhaupt nicht (?)

Beitrag von embl-structures »

p.grass hat geschrieben:Hi, embl-structures.
Wenn es nicht geändert wurde in einer aktuellen Version dann werden Variablen nicht durch $XXXX beschrieben, sondern durch $XXXX$ ( man beachte das Dollar Zeichen nach der Variable ).

Gruß p.grass
Das Handbuch sagt ueber die Beschreibung der Variablen:
Die Variablennamen müssen nicht mit "$" beginnen oder enden, diese Konvention erleichtert aber ihre Verwendung.
In Anlehnung an die Konvention anderer Programmiersprachen die ich kenne, benutze ich als eigene Konvention $VARIABLE fuer Stringvariablen und @LISTE fuer Stringlisten. Ich kann darin keinen Nachteil gegenueber $VARIABLE$ erkennen.

Gruss, frank
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: SubstringBefore: Funktioniert ueberhaupt nicht (?)

Beitrag von embl-structures »

d.oertel hat geschrieben:Hi,

kein Bug.

Handbuch:
SubstringBefore (STRINGWERT1, STRINGWERT2)
liefert das Anfangsstück von STRINGWERT1, wenn STRINGWERT2 das Endstück
ist.
Z.B. hat
SubstringBefore ("C:\programme\staroffice\program\soffice.exe",
"\program\soffice.exe")
den Wert
"C:\programme\staroffice"
In den von Dir verwendeten Beispielen ist STRINGWERT2 nicht das Endstück.
Ich empfehle hier die Verwendung von splitstring und takestring.
Absolut korrekt. Ich kann mir nicht erklaeren, wie ich die eigentlich klare Definition im Handbuch so missverstehen konnte. Sorry.

d.oertel hat geschrieben: Ansonsten hat p.grass recht, dass es sinnvoll und dringend empfohlen ist Variablennamen mit $ vorne und hinten zu Kennzeichnen.
Wieso ist dies dringend empfohlen? Ich kann darin keinen Nachteil erkennen und es widerspricht auch nicht der Definition im Handbuch. Im Gegenteil: Die allzuvielen Dollarzeichen machen die Skripte fuer mein Auge schlechter lesbar (und ich bin hier der der Einzige der diese Skripte schreibt).
d.oertel hat geschrieben: Weiterhin empfehlen wir unsere Supportverträge für den produktiv Betrieb:
http://uib.de/www/opsi/service_support/ ... index.html
Zur Kenntnis genommen :-). Ist aber in meinem aktuellen Umfeld aus verschiedenen Gruenden keine Option. Ich werde die Supportvertraege aber nochmals evaluieren, falls wir OPSI zum Standard-Wartungstool erheben sollten.

Danke fuer die Hilfe

frank
Benutzeravatar
r.roeder
uib-Team
Beiträge: 540
Registriert: 02 Jul 2008, 10:08

Re: SubstringBefore: Funktioniert ueberhaupt nicht (?)

Beitrag von r.roeder »

Hallo Frank,

nur zur Klärung:

Variablen des winst-Skripts können beliebige Zeichenfolgen sein (abgesehen von bereits verwendeten). Keine Regel verbietet z.B., eine Variable PRO zu nennen - nur würde die textuelle Variablenersetzung in sekundären Sektionen dann auch bei jedem Vorkommen von "C:\Programme" die Zeichenfolge "Pro" durch den Variableninhalt ersetzen (unabhängig von Groß- und Kleinschreibung). Auf diese Weise könnte man sich leicht das ganze Skript zerschießen.

Die Empfehlung, Variablennamen mit '$' beginnen und enden zu lassen, beruht einfach darauf, dass ein Dollarzeichen Anfang und Ende von Variablen optisch deutlich markiert, damit man nicht versehentlich "normalen" Text in die Variablensubstitution einbezieht.

Gruß,

R. Röder
opsi support - uib gmbh
For productive opsi installations we recommend maintainance + support contracts which are the base of opsi development.


Wondering who's using opsi? Have a look at the opsi map: http://opsi.org/opsi-map/.
Antworten