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-Key: 260202

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
Solution bastla Jan 17, 2015 updated at 10:57:23 (UTC)
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
Mitglied: 114757
Solution 114757 Jan 17, 2015 updated at 10:57:22 (UTC)
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
Member: citroendsvier
citroendsvier Jan 17, 2015 at 10:05:09 (UTC)
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
Mitglied: 114757
114757 Jan 17, 2015 updated at 10:13:30 (UTC)
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
Member: bastla
bastla Jan 17, 2015 at 10:18:43 (UTC)
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
Member: citroendsvier
citroendsvier Jan 17, 2015 updated at 10:57:43 (UTC)
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
Member: bastla
Solution bastla Jan 17, 2015 updated at 10:57:16 (UTC)
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 ...
Member: citroendsvier
citroendsvier Jan 17, 2015 at 10:57:03 (UTC)
Goto Top
Vielen Dank! Jetzt klappts.

Ja, stimmt. Danke!