Position mehrerer Substrings ermitteln

cesupa

Erfahrenes Mitglied
Hallo,

ich wollt heut mal versuchen aus einer Textdatei einen Substring mit einem anderen zu ersetzen, dazu habe ich jetzt ersteinmal die textdatei eingelesen, aber wie genau kann ich jetzt nach einem bestimmten Substring suchen, den es mehrere male gibt?

Ich habs schon so versucht, jedoch ohne großen Erfolg:

Code:
l = Len(text)
lq = Len(suchstr)
k = 1

Do Until (k = 0)
k = InStrRev(text,suchstr, k + lq, 1)
MsgBox k
Loop

Jetzt gibt er mir als Position immer 0 aus.

Wie kann ich das nun am besten machen?

Gruß
cesupa
 
wenn du 0 zurückbekommst ist dein suchstring nicht vorhanden vielleicht mal mit ucase bzw. lcase suchen

gruss bb
 
Hi,

okay, habs jetzt mit Instr() gemacht und es funktioniert, jetzt hab ich aber das problem, dass wenn ich versuche den suchstr durch einen anderen String zu ersetzen, löscht er mir nicht den Suchstr aus dem text heraus, sondern überschreibt den Suchstr mit dem anderen String, ich möchte aber, dass der gescuhet String aus dem text gelöscht wird und ein anderer String eingefügt wird. Ich habs bis jetzt so hier gemacht:

Code:
l = Len(quell_u)
lq = Len("suchstr")
k = 1


Do
k = InStr(k + 1, quell_u, "suchstr")
If k = 0 Then

Else
Mid(quell_u, k, k + 2 * lq) = Text1.Text
End If
Loop Until (k = 0)

Danke für eure Hilfe.

Gruß
cesupa
 
Hi,

wie geneu verwende ich Replace()
Wenn ich versuche Replace() zu verwenden, sagt mir der Compiler, dass er ein "=" haben will.
Das Ersetzen habe ich jetzt aber schon mit Mid() geschafft, jeztzt hab ich nur noch das problem das icvh die leerzeichen wegkriegen möchte, mit Trim() hab ichs schon versucht der macht die leerzeichen noch immer nicht weg.

Code:
Sub gen(ByVal q As String, ByVal dest As String, ByVal name As String, ByVal suche As String)

Dim quell_u, dum, textub, newt, totalnew, suchstr As String
Dim k As Integer
Dim datei As Long
Dim l, lq, r, i, le As Integer


suchstr = suche
datei = FreeFile

Open q For Input As #datei

Do While (Not EOF(datei))
Line Input #datei, dum

If dum = "" Then
Else
quell_u = quell_u & dum & vbNewLine
End If

Loop

Close #datei

le = Len(name)
l = Len(quell_u)
lq = Len(suchstr)
k = 1

For i = 1 To lq
textub = textub & " "
Next i

Text3.Text = quell_u
'MsgBox lq




Do 'ab hier ersetzen
k = InStr(k + 1, quell_u, suchstr)
If k = 0 Then

Else
Mid(quell_u, k, k + lq) = textub
Mid(quell_u, k + (lq - le), lq) = name
Mid(quell_u, k + (lq - le), lq) = Trim(Mid(quell_u, k, lq))'Leerzeichen rausfiltern
MsgBox Mid(quell_u, k, lq)
End If
Loop Until (k = 0)

Text3.Text = Text3.Text & vbNewLine & vbNewLine & quell_u

Open dest For Output As #datei
Print #datei, quell_u
Close #datei



End Sub

wie kann ich jetzt die Leerzeichen rausfiltern?

Gruß
cesupa
 
Moin,

das Trim macht nur die Leerzeichen vor und hinter dem String weg,
wenn du die in der Mitte eines Strings weghaben möchtest, dann
mach es doch mit Replace, du suchst nach " " und ersetzt es durch "".
 
Replace immer einen neuen String den es zurück gibt. In dem neu erzeugten String, werden die entsprechenden Zeichen ersetzt der alte bleibt erhalten.

AlterString = Replace(AlterString," ","")
 
Zurück