citroendsvier
Goto Top

VBS String nach letztem Leerzeichen teilen

Hallo zusammen,

ich habe in VBS eine Variable, die in etwa folgenden Inhalt enthält:
Intel (TM) Core (TM) i5-3570K  @ 3.4 GHz 2098209,1

Jetzt möchte ich das ganze aufteilen in zwei Teile, einmal das Core i5 Zeug (ab Anfang), und einmal die Zahl am Ende. Da vorne aber auch ein anderes CPU Modell stehen könnte, ist die Zahl der Leerzeichen nicht festgelegt. Ich müsste also beim letzten Leerzeichen teilen.
Wie kann ich das anstellen?

Ach ja, die Länge der Zahl am Ende ist leider auch nicht fest...

Mit freundlichen Grüßen, V40

Content-ID: 260202

Url: https://administrator.de/contentid/260202

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

bastla
Lösung bastla 17.01.2015 aktualisiert um 11:57:23 Uhr
Goto Top
Hallo citroendsvier!

Sollte sich etwa so lösen lassen:
S = "Intel (TM) Core (TM) i5-3570K  @ 3.4 GHz 2098209,1"  
P = InStrRev(S, " ")  
T1 = Left(S, P - 1)
T2 = Mid(S, P + 1)
Grüße
bastla
114757
Lösung 114757 17.01.2015 aktualisiert um 11:57:22 Uhr
Goto Top
str = "Intel (TM) Core (TM) i5-3570K  @ 3.4 GHz 2098209,1"  
strCPU = Left(str, InStrRev(str, " ",-1,vbTextCompare)-1)  
strNumber = Mid(str,InStrRev(str, " ",-1,vbTextCompare)+1)  
Gruß jodel32
citroendsvier
citroendsvier 17.01.2015 um 11:05:09 Uhr
Goto Top
Hallo Bastla,
danke für deine Antwort!

Ich kriege bei deiner Lösung zwar den CPU Namen korrekt, die Variable mit der Zahl ist aber etwas... hmm. In meiner Zahl steht "TM) Core (TM) ...." usw. bis Ende der Zahl. Liegt's vielleicht an mir?

@114757: Deine Variante teste ich gleich, dir auch danke!

MfG, V40
114757
114757 17.01.2015 aktualisiert um 11:13:30 Uhr
Goto Top
Und mit Regex gehts auch so
str = "Intel (TM) Core (TM) i5-3570K  @ 3.4 GHz 2098209,1"  
Set regex = CreateObject("Vbscript.regexp")  
regex.pattern = "(.*) (.*)$"  
set matches = regex.Execute(str)
If matches.count > 0 Then
     strCPU = matches(0).Submatches(0)
     strCPU = matches(0).Submatches(1)
End if
bastla
bastla 17.01.2015 um 11:18:43 Uhr
Goto Top
Hallo citroendsvier!
Ich kriege bei deiner Lösung zwar den CPU Namen korrekt, die Variable mit der Zahl ist aber etwas... hmm.
Das Problem ist schwer nachvollziehbar - in der Variablen P steht die Zeichenposition des letzten Leerzeichens, und diese wird bei der Zerlegung für beide Bestandteile verwendet.

Poste doch mal den von Dir vewendeten Code ...

Grüße
bastla
citroendsvier
citroendsvier 17.01.2015 aktualisiert um 11:57:43 Uhr
Goto Top
Das mach ich jetzt... ich blick selber nicht mehr durch face-smile

Set File = FSO.OpenTextFile("Data.txt", ForReading, false)  
Dim OtherCPU(9)
i = 0
while not File.AtEndOfStream and i < 10
	OtherCPU(i) = File.ReadLine
	i = i + 1
Wend
i = i - 1
Dim Laenge(15), SplittenCPU(10), SplittenPoints(10), P(20), S(20)
for a = 0 To i
	Laenge(a) = len(OtherCPU(a))
	
	OtherCPU(a) = Mid(OtherCPU(a), 42) ' "Benutzer...mit dem" wegmachen  
	Laenge(a) = len(OtherCPU(a))
	OtherCPU(a) = Left(OtherCPU(a), Laenge(a)-16)
	
	P(a) = InStrRev(OtherCPU(A), " ")  
	S(a) = InStr(OtherCPU(a), " ")  
	SplittenCPU(a) = Left(OtherCPU(a), P(a) - 1)
	'SplittenPoints(a) = Right(OtherCPU(a), P(a) + 1)  
	
	
	MsgBox OtherCPU(a) & vbCr & SplittenCPU(a) & "." & vbCr & SplittenPoints(a) & "." & vbCr & P(A) & vbCr & S(A)  
Next
bastla
Lösung bastla 17.01.2015 aktualisiert um 11:57:16 Uhr
Goto Top
Hallo citroendsvier!

Wenn Du dich entschließen kannst, anstelle von Right das (auch vom Kollegen jodel32 in seinem ersten Ansatz) vorgeschlagene Mid zu verwenden, sollte das auch bei Dir funktionieren ...

Grüße
bastla

P.S.: Zumindest für P und S wären einfache Variablen ausreichend ...
citroendsvier
citroendsvier 17.01.2015 um 11:57:03 Uhr
Goto Top
Vielen Dank! Jetzt klappts.

Ja, stimmt. Danke!