Stringverarbeitung

Antworten
eih
Beiträge: 39
Registriert: 09 Sep 2009, 14:21
Wohnort: Berlin

Stringverarbeitung

Beitrag von eih »

Hallo allerseits.
Ich stehe gerade auf dem Schlauch, was die Stringlistenverarbeitung angeht.
Ich erhalte folgende Stringliste:

Code: Alles auswählen

[7] [10.11.2010 10:49:07]           (string   0)    Drucker124 (Kopie 2)	REG_SZ	winspool,Ne02:
[7] [10.11.2010 10:49:07]           (string   1)    Drucker124 (Kopie 1)	REG_SZ	winspool,Ne03:
[7] [10.11.2010 10:49:07]           (string   2)    Drucker124	REG_SZ	winspool,Ne04:
[7] [10.11.2010 10:49:07]           (string   3)    Drucker105Kyocera	REG_SZ	winspool,Ne05:
aus dieser Liste lasse ich mir jetzt jedes Element geben:

Code: Alles auswählen

for %s% in list1 do sub_find_myprinter
z. B.

Code: Alles auswählen

   Drucker124 (Kopie 2)	REG_SZ	winspool,Ne02:
Der String %s% hat ein paar Leerzieichen am Anfang, die mit

Code: Alles auswählen

set $s1$ = Trim("%s%")
entfernt werden.

Nun das eigentliche Problem:
Zum Löshen der Drucker brauche ich die Zeichenkette des Druckernamens, also z. B. "Drucker124 (Kopie 2)" (Die gesuchten Zeichenketten enthalten alle am Beginn "Drucker", danach kann abber alles mögliche kommen, insbesondere " (Kopie x)".
Da die Zeichenkette Leerzeichen enthalten können, kann ich also nicht einfach an den Leerzeichen aufsplitten.
Welche Funktion ist geeignet, ich fand nur SubstringBefore (STRINGWERT1, STRINGWERT2), das aber nicht geht, da die vorletzten beiden Zeichen variabel sind (Ne00, Ne01, ...)

Weis jemand Rat?
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3327
Registriert: 04 Jun 2008, 14:27

Re: Stringverarbeitung

Beitrag von d.oertel »

Hi,

Code: Alles auswählen

set $line$ = takeFirstStringContaining($list1$, "Drucker")
set $list2$ =  splitStringOnWhiteSpace ($line$)
set $printername$ = takeFirstStringContaining($list2$, "Drucker")
gruss
d.oertel


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


eih
Beiträge: 39
Registriert: 09 Sep 2009, 14:21
Wohnort: Berlin

Re: Stringverarbeitung

Beitrag von eih »

Hallo Herr Oertel,
danke. Ich habe mich wahrscheinlich ungenau ausgedrückt.
Folgendes Ergebnis des oben angegebenen Codestückes:

Code: Alles auswählen

[5] [10.11.2010 15:27:05]   Set  $line$ = takeFirstStringContaining($list1$, "Drucker")
[6] [10.11.2010 15:27:05]       retrieving strings from $list1$ [switch to loglevel 7 for debugging]
[7] [10.11.2010 15:27:05]           (string   0)    Drucker124 (Kopie 2)	REG_SZ	winspool,Ne02:
[7] [10.11.2010 15:27:05]           (string   1)    Drucker124 (Kopie 1)	REG_SZ	winspool,Ne03:
[7] [10.11.2010 15:27:05]           (string   2)    Drucker124	REG_SZ	winspool,Ne04:
[7] [10.11.2010 15:27:05]           (string   3)    Drucker105Kyocera	REG_SZ	winspool,Ne05:
[7] [10.11.2010 15:27:05]           
[6] [10.11.2010 15:27:05]     The value of the variable "$line$" is now: "    Drucker124 (Kopie 2)	REG_SZ	winspool,Ne02:"
[5] [10.11.2010 15:27:05]   
[5] [10.11.2010 15:27:05]   Set  $list2$ =  splitStringOnWhiteSpace ($line$)
[6] [10.11.2010 15:27:05]       retrieving strings from splitStringOnWhiteSpace [switch to loglevel 7 for debugging]
[7] [10.11.2010 15:27:05]           (string   0)
[7] [10.11.2010 15:27:05]           (string   1)Drucker124
[7] [10.11.2010 15:27:05]           (string   2)(Kopie
[7] [10.11.2010 15:27:05]           (string   3)2)
[7] [10.11.2010 15:27:05]           (string   4)REG_SZ
[7] [10.11.2010 15:27:05]           (string   5)winspool,Ne02:
[7] [10.11.2010 15:27:05]           
[5] [10.11.2010 15:27:05]   
[5] [10.11.2010 15:27:05]   Set  $printername$ = takeFirstStringContaining($list2$, "Drucker")
[6] [10.11.2010 15:27:05]       retrieving strings from $list2$ [switch to loglevel 7 for debugging]
[7] [10.11.2010 15:27:05]           (string   0)
[7] [10.11.2010 15:27:05]           (string   1)Drucker124
[7] [10.11.2010 15:27:05]           (string   2)(Kopie
[7] [10.11.2010 15:27:05]           (string   3)2)
[7] [10.11.2010 15:27:05]           (string   4)REG_SZ
[7] [10.11.2010 15:27:05]           (string   5)winspool,Ne02:
[7] [10.11.2010 15:27:05]           
[6] [10.11.2010 15:27:05]     The value of the variable "$printername$" is now: "Drucker124"
Und das ist leider nicht das Gewünschte. Die Variable $printername$ soll "Drucker124 (Kopie 2)" hinterher enthalten.

Eine Idee wäre vielleicht, $list2$ wieder solange zusammenzusetzen, solange ein String ungleich "REG_SZ" ist. Weis ich aber leider auch nicht, welche Methode es macht. :oops: Und ich fürchte, dass dabei das Leerzeichen zwischen Kopie und 2 verlorengeht.
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3327
Registriert: 04 Jun 2008, 14:27

Re: Stringverarbeitung

Beitrag von d.oertel »

Hi,

vorschlag:
$line$ mit splitstring an 'REGSZ' splitten und mit takestring den Teilsting 0 holen.
Den wieder mit splitstring an 'Drucker' splitten und mit takestring den Teilsting 1 auf $line1$ holen.
dann müsste Passen:
set $printername$ = "Drucker"+$line2$

Supportvertrag gefällig ?

gruss
d.oertel


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


eih
Beiträge: 39
Registriert: 09 Sep 2009, 14:21
Wohnort: Berlin

Re: Stringverarbeitung

Beitrag von eih »

Danke, Herr Oertel.
Supportvertrag ist da leider ein schwieriges Thema. Würde ich persönlich ja gerne. Wir sind eine Schule in einem Bundesland, welches arm aber sexy ist. ;)
Antworten