VBA String zwischen zwei Zeichenketten auslesen
Hallo,
ich habe folgendes Problem:
Es soll nun immer nur ab dem 1. "<Typ>" bis zum 2. "<Typ>" ausgelesen werden.
Immer einschließlich des vorangegangen "<Typ>"
Also es soll mir dann folgendes nacheinander ausgegeben werden:
<Typ> Elektroseilwinde
im 2. Durchlauf der Schleife soll:
<Typ> Manuelle Seilwinde
ausgegeben werden.
Der Teilstring soll sozusagen beim ersten "<Typ>" beginnen und vor dem 2. "<Typ>" aufhören.
Kann mir jemand weiterhelfen?
ich habe folgendes Problem:
Dim strContent As String
Dim LineTag As String
Dim LineStart As Integer
Dim LineEnd As Integer
strContent = "<Typ> Elektroseilwinde <Typ> Manuelle Seilwinde"
LineStart = 0 '
LineEnd = 1
Do
LineStart = InStr(LineEnd, strContent, "<Typ>")
LineEnd = InStr(LineStart, strContent, "<Typ>")
LineTag = Mid(strContent, LineStart + 1, LineEnd - LineStart - 1)
Loop Until LineEnd = Len(strContent)
Es soll nun immer nur ab dem 1. "<Typ>" bis zum 2. "<Typ>" ausgelesen werden.
Immer einschließlich des vorangegangen "<Typ>"
Also es soll mir dann folgendes nacheinander ausgegeben werden:
<Typ> Elektroseilwinde
im 2. Durchlauf der Schleife soll:
<Typ> Manuelle Seilwinde
ausgegeben werden.
Der Teilstring soll sozusagen beim ersten "<Typ>" beginnen und vor dem 2. "<Typ>" aufhören.
Kann mir jemand weiterhelfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195815
Url: https://administrator.de/forum/vba-string-zwischen-zwei-zeichenketten-auslesen-195815.html
Ausgedruckt am: 14.05.2025 um 11:05 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
Bei mir funktioniert es so:
Wobei ich persönlich diese Variante schöner finde:
Bei mir funktioniert es so:
Dim strContent As String
Dim LineTag As String
Dim LineStart As Integer
Dim LineEnd As Integer
strContent = "<Typ> Elektroseilwinde <Typ> Manuelle Seilwinde"
LineStart = 0 '
LineEnd = 1
Do
LineStart = LineEnd
LineEnd = InStr(LineStart + 1, strContent, "<Typ>")
If LineEnd = 0 Then LineEnd = Len(strContent) + 1
LineTag = Mid(strContent, LineStart, LineEnd - LineStart)
Debug.Print LineTag
Loop Until LineEnd = Len(strContent) + 1
Wobei ich persönlich diese Variante schöner finde:
Dim strContent As String
Dim LineTag As String
Dim s As Variant
Const delimiter = "<Typ>"
strContent = "<Typ> Elektroseilwinde <Typ> Manuelle Seilwinde"
For Each s In Split(strContent, delimiter)
LineTag = delimiter & s
Debug.Print LineTag
Next s
Warum dann nicht gleich?
Allerdings fehlt dann der <Typ>, daher wenn dann so:
Nur das da dann eine Leerzeile zu viel ist und außerdem die evtl. Einzelverarbeitung auch nicht möglich ist.
Wscript.Echo Replace("<Typ> Elektroseilwinde <Typ> Manuelle Seilwinde" ,"<Typ>",vbcrlf)
Wscript.Echo Replace("<Typ> Elektroseilwinde <Typ> Manuelle Seilwinde" ,"<Typ>",vbcrlf & "<Typ>")
Nur das da dann eine Leerzeile zu viel ist und außerdem die evtl. Einzelverarbeitung auch nicht möglich ist.
Hallo miniversum,
bei den String-Verarbeitungen gibt es viele Wege nach Rom
Die Replace-Methode macht sicher letztenendlich dasselbe.
Wie man's dreht und wendet, der TO soll sich das für ihn/sie beste Szenario rauspicken. Es ist Weihnachtszeit
Hier mal noch einer, den ich meinen Jungs am Anfang immer mit auf den weg gebe (nur zum spielen!!!):
Gruss
Tsuki
bei den String-Verarbeitungen gibt es viele Wege nach Rom
Die Replace-Methode macht sicher letztenendlich dasselbe.
Wie man's dreht und wendet, der TO soll sich das für ihn/sie beste Szenario rauspicken. Es ist Weihnachtszeit
Hier mal noch einer, den ich meinen Jungs am Anfang immer mit auf den weg gebe (nur zum spielen!!!):
'example "how to make things complicated or easy" by using string functions
Dim MyText
Dim MyTextNew1
Dim MyTextNew2
Dim MyTextNew3
MyText = "1,2,3,4,5,6"
MyTextNew1 = ""
MyTextNew2 = ""
MyTextNew3 = ""
'***************************Methode 1****************************************
For i = 1 to len(MyText)
temp = mid(MyText,i,1)
IF temp = "," then
temp = "\"
Else
temp = temp
End IF
MyTextNew1 = MyTextNew1 & temp
next
WScript.Echo MyTextNew1 & " Methode 1"
'****************************************************************************
'***************************Methode 2****************************************
temp = Split(MyText , ",")
MyTextNew2 = Join(temp, "\")
WScript.Echo MyTextNew2 & " Methode 2"
'****************************************************************************
'***************************Methode 3****************************************
MyTextNew3 = Replace(MyText, "," , "\")
WScript.Echo MyTextNew3 & " Methode 3"
'****************************************************************************
Gruss
Tsuki
Hallo
Sorry hab jetzt erst wieder reingeschaut.
Ich denke ich würde das ganze eher so machen (ohne die ersten beiden Zeilen und das schreiben in eine Datei (wäre dann die letzte Zeile bei folgendem Code)):
Ich hoffe das hilft dir weiter
Sorry hab jetzt erst wieder reingeschaut.
Ich denke ich würde das ganze eher so machen (ohne die ersten beiden Zeilen und das schreiben in eine Datei (wäre dann die letzte Zeile bei folgendem Code)):
strContent = "<Typ><Test1><Test2><Test3><Test4><Test5>-------<Typ><Test6><Test7><Test8><Test9><Test10>"
strout = ""
strout = strout & "<LASERPLUSJOB>"
strout = strout & vbTab & "<JOBNAME>TestOrder</JOBNAME>" & vbNewLine
strout = strout & vbTab & "<TEMPLATE>C:\TemplateFiles\" & strTemplate & "</TEMPLATE>" & vbNewLine
For Each s In Split(strContent, "<Typ>")
ps = InStr(1, s, "<")
pe = InStrRev(s, ">")
If ps > 0 And pe > 0 Then
strout = strout & vbTab & "<TAGGROUP>" & vbNewLine
strout = strout & vbTab & vbTab & "<NROFTAGS>1</NROFTAGS>" & vbNewLine
strout = strout & vbTab & vbTab & "<TEXT>Typ</TEXT>" & vbNewLine
ts = Mid(s, ps, pe - ps + 1)
ts = Replace(ts, ">", "#")
ts = Replace(ts, "<", vbTab & vbTab & "<TEXT>")
ts = Replace(ts, "#", "</TEXT>" & vbNewLine)
strout = strout & ts
strout = strout & vbTab & "</TAGGROUP>" & vbNewLine
End If
Next s
strout = strout & "</LASERPLUSJOB>"
MsgBox strout
Ich hoffe das hilft dir weiter