phoboz
Goto Top

VBA String zerlegen

Hallo,

folgender String

string = "<Path>C:/Music/Abba/Abba Gold/money.mp3</Path>"

möchte ich so zerlegt haben das er wie folget in der Variablen steht

string = "*money.mp3*"

die Sternchen benötige ich als Jokerzeichen. Und müssen auch vorhanden sein.
Habe mehrere solche Strings *.mp3, die immer so *SongName.mp3* in String stehen sollen:

<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>
<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>

Vllt weiß auch einer eine Lösung wenn der SongName.mp3 an irgendeiner Stelle im String steht, Bsp.:

<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>
<Path>C:/Music/Abba/Mama Mia.mp3/Abba Gold</Path>


Bitte um Hilfe.


Grüße

Phoboz

Content-ID: 202179

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

Ausgedruckt am: 24.11.2024 um 23:11 Uhr

LordXearo
LordXearo 22.02.2013 um 08:49:59 Uhr
Goto Top
Hi,

du könntest z.B. nach dem . (Punkt) im String suchen und dann alle Zeichen davor und danach speichern bis zum "/" .

Gruß

Xearo
Phoboz
Phoboz 22.02.2013 aktualisiert um 09:37:47 Uhr
Goto Top
Hallo,

da es Strings gibt wo nach .mp3 ein "<"kommt muss man das rechts gehen ein bisschen anders gestalten. Z.B. gehe ab "." 4 nach rechts
bin soweit brauch allerdings Hilfe.

Sub SrString()

'Strings  

String1 = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  
String2 = "<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>"  
String3 = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  
Suche = "."  

Position = InStr(8, String1, Suche) 'sucht mir die Position wo der Punkt ist.  
Teil1 = Mid(String1, Position, 4) '= ".mp3"  
Teil2 = "?" 'gehe von Postion solange nach links bis "/"  
Lösung = Teil1 & Teil2

MsgBox Lösung 'Soll mir "Waterloo.mp3" ausgeben  


Lösung = "*" & Lösung & "*" 'Sternchen vor und hinter den String  
'benötigtes Ergbnis "*Waterloo.mp3*"  

End Sub
colinardo
colinardo 22.02.2013 aktualisiert um 09:50:56 Uhr
Goto Top
Hi Phoboz,
nach dem Muster deiner Stringdaten kannst du mit folgendem RegularExpression-Objekt dein MP3 an jeder Stelle zwischen den "<path>"-Tags platzieren:
Das Ergebnis steht dann in ResultString.
Dim myRegExp, myMatches, ResultString,rawData
rawData = "<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>"  
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Pattern = "<Path>.*/(.*.mp3).*</Path>"  
Set myMatches = myRegExp.Execute(rawData)
If myMatches.Count >= 1 Then
	ResultString = "*" & myMatches(0).SubMatches(0) & "*"  
Else
	ResultString = ""  
End If

Grüße Uwe
Phoboz
Phoboz 22.02.2013 aktualisiert um 09:57:39 Uhr
Goto Top
Hallo Uwe,

Danke

Allerdings soll ich das in VBA machen. Wenn ich deinen Code nehme krieg ich Errors face-sad
"Fehler beim Kompilieren. Benutzerdefinierter Typ nicht definiert" Zeile 3.

kann mir einer vllt die Lösung für Teil2 sagen (siehe meinen Code oben)


Grüße

Phoboz
colinardo
colinardo 22.02.2013 aktualisiert um 10:02:45 Uhr
Goto Top
Das ist VBA bzw. Visual Basic Script und funktioniert! Du musst in VBA noch die Verweis auf das "Microsoft VBScript Regular Expressions" Objekt hinzufügen (Menü "Extras/Verweise") wenn du das in Microsoft Office verwendest. Dann läuft es...
Phoboz
Phoboz 22.02.2013 um 10:05:58 Uhr
Goto Top
Hallo Uwe,

Verweise ist bei mir ausgegraut (Office 2007)?

Da ich die Aufgabe von einem Lehrer erhalten habe und wir noch nicht soweit mit VBA sind... weiß ich nicht, ob er mir die Lösung abkauft face-sad

Ich bin dir dankbar, dass du den Code geschrieben hast, allerdings würde ich das iwie so machen wie ich es oben in dem Code habe... geht das iwie kannst du dir das einmal angucken ?


Grüße

Phoboz
colinardo
colinardo 22.02.2013 aktualisiert um 10:49:15 Uhr
Goto Top
OK da will wohl einer wieder schummeln face-wink
Nach der altertümlichen Weise geht das so:
SearchString = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  
Suche = "."  

' Suche den Punkt und gehe 3 Zeichen nach rechts -> jetzt haben wir das Position für das Ende des Dateinamens  
PositionEnd = InStr(1, SearchString, Suche)+3
'Suche vom Ende des Dateinamens rückwärts nach dem ersten "/" und gehe 1 Zeichen nach rechts -> Das ist die StartPosition des Dateinamens  
PositionStart = InStrRev(SearchString,"/",PositionEnd)+1  
'Nun wird der ganze Dateiname extrahiert. Die Länge ermitteln wir indem wir die Endposition von der Startposition abziehen  
filename = Mid(SearchString,PositionStart,PositionEnd-PositionStart)

Loesung = "*" & filename & "*"  

wscript.Echo Loesung

Nur darf bei dieser Methode dein Dateiname oder der Pfad keine weiteren Punkte haben.

8-) Uwe
Phoboz
Phoboz 22.02.2013 aktualisiert um 10:49:15 Uhr
Goto Top
Hallo,

DANKE!!!


Grüße

Phoboz
LordXearo
LordXearo 22.02.2013 um 10:50:32 Uhr
Goto Top
War zu langsam. Mit VBA zu programmieren ist für mich ein krampf.....
Keine schöne Lösung, aber trotzdem:

Sub SrString()
Dim string1 As String
Dim teilstring1 As Variant
Dim z As Integer
z = 1
string1 = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  
String2 = "<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>"  
String3 = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  

Position = InStr(8, string1, Suche) 'sucht mir die Position wo der Punkt ist.  

teilstring1 = Split(string1, ".")  
Teil2 = Left(teilstring1(1), "3")  
Do
If (InStr(Right(teilstring1(0), z), "/") > 0) Then  
    Exit Do
End If
z = z + 1
Loop
Teil1 = Right(teilstring1(0), z - 1)
Teil1 = Teil1 & "."  

Lösung = Teil1 & Teil2

MsgBox Lösung 'Soll mir "Waterloo.mp3" ausgeben  
Lösung = "*" & Lösung & "*" 'Sternchen vor und hinter den String  
'benötigtes Ergbnis "*Waterloo.mp3*"  
End Sub
colinardo
colinardo 22.02.2013 um 10:52:54 Uhr
Goto Top
Bitte Beitrag noch als gelöst markieren, merci !
Phoboz
Phoboz 22.02.2013 um 11:12:22 Uhr
Goto Top
Hallo,

funktioniert super!

aber hab was bemerkt.

Ich lese den String aus einer Datei. den String den ich bekomme sieht so aus:

"<Path>C:/Music/Abba/Abba Gold/money.mp3</Path>"

vor dem String ist ein Viereckiges Kästchen....in der Datei ist dieser Bereich leer krieg deswegen nur müll zurück...

krieg aus dem String das viereckige Kästchen (leerer Raum) iwie weg?

hab schon Ltrim versucht
colinardo
colinardo 22.02.2013 aktualisiert um 11:22:42 Uhr
Goto Top
Wenn es nur zwei eckige Klammern sind:
Right(DeinString,Len(DeinString)-2)
oder
Mid(DeinString,3,Len(DeinString))

Zieh dir das hier bitte mal rein :http://www.w3schools.com/vbscript/vbscript_ref_functions.asp
Denke das der Thread gelöst ist. Das ist hier kein VBA-Kurs.

Grüße Uwe
miniversum
miniversum 22.02.2013 aktualisiert um 11:20:04 Uhr
Goto Top
Hallo

Warum nicht einfach so?:
Sub LiedSuche()
    Dim endpos As Long
    Dim startpos As Long
    Dim Lösung As String
    
    String1 = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  
    String2 = "<Path>C:/Music/Abba/Abba Gold/Waterloo.mp3</Path>"  
    String3 = "<Path>C:/Music/money.mp3/Abba/Abba Gold/</Path>"  

    endpos = InStrRev(LCase(String1), ".mp3")  
    If endpos > 0 Then
        startpos = InStrRev(LCase(String1), "/", endpos)  
        lösung = "*" & Mid(String1, startpos + 1, endpos - startpos + 3) & "*"  
    Else
        MsgBox """.mp3"" not found"  
    End If
    MsgBox lösung
End Sub
Phoboz
Phoboz 22.02.2013 um 11:23:51 Uhr
Goto Top
Hallo,

jetzt habe ich es.

Ich danke Euch allen!


*Resolved*
bastla
bastla 22.02.2013 aktualisiert um 13:08:39 Uhr
Goto Top
@ colinardo
Du musst in VBA noch die Verweis auf das "Microsoft VBScript Regular Expressions" Objekt hinzufügen (Menü "Extras/Verweise")
Den Verweis brauchst Du nicht, wenn "myRegExp" einfach per
Set myRegExp = CreateObject("VBScript.RegExp")
erzeugt wird ...

Grüße
bastla