Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
Kaali_
Tutorial Leser
Tutorial Leser

Anmeldedatum: 14.12.2007
Beiträge: 42

splitten
Verfasst am: 26.02.2008, 14:43

Vielleicht kann mir ja jemand helfen:

Also mal angenommen:

Ich habe einen Text in einer Textbox z.B.

test\_test2\_test3\_test4\_test5\_test6 ... usw.

nun möchte ich, dass er z.B. test3 sucht und ab dort test4 aufsplittet und in einer anderen Textbox darstellt und aber dabei das underline Zeichen entfernt... .

Gruß, Kaali
_________________
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 26.02.2008, 14:56

Wenn du auf kurzen code stehst:
Code:

Text2.Text = Replace(Mid$(Text1.Text, InStr(1, Text1.Text, "_test3\") + 7), "_", "")


Ansonsten zum besseren Verständnis:
Code:

Dim sBuffer as string

sBuffer = Mid$(Text1.Text, InStr(1, Text1.Text, "_test3\") + 7)
Text2.Text = Replace(sBuffer, "_", "")

_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Kaali_
Tutorial Leser
Tutorial Leser

Anmeldedatum: 14.12.2007
Beiträge: 42


Verfasst am: 26.02.2008, 15:01

Wow, danke Zig...

werde den Code mal ausprobieren.. danke

Gruß, Kaali

//kleiner Edit: wie mache ich es, dass mir aber nur z.B. test3 anzeigt und das was danach kommt auch noch löscht ?

Gruß, Kaali
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 26.02.2008, 15:22

Ähm, du weißt das in dem String test3 steht und willst dass noch ausschneiden lassen?
Wozu das denn?
Du weißt ja schon das es test3 heißt.
Kannst ja einfach so in textbox2 hineingeben.


Ich erklär dir aber trotzdem mal wie es funktioniert.
Mit dem Befehl Mid$ kannst du einen String aus einem anderen herauskopieren.
Dazu kann man bei Mid$ die Anfangsposition angeben und wieviele Zeichen er ab dieser Position einlesen soll.

Mit InStr kann man in einem string nach einem Zeichen oder Wort suchen lassen und bekommt die Postition dessen zurück.

Ich teile mal den Vorgang auf, damit man es besser versteht.
Code:

Dim pos1 as long
Dim pos2 as long
Dim sBuffer as string

pos1 = InStr(1, text1.Text, "_test3\")
pos2 = InStr( pos1, text1.Text, "\")
sbuffer = Mid$(text1.text, pos1, pos2-pos1)


Auf pos2 könnte man eigentlich verzichten, da du ja die exakte Länge des Wortes "test3" kennst.
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Kaali_
Tutorial Leser
Tutorial Leser

Anmeldedatum: 14.12.2007
Beiträge: 42


Verfasst am: 26.02.2008, 15:42

Hi,

ich meinte es etwas anders:

er solle z.B. Test3 suchen und aber das darauffolgende wort herausschneiden, das darauffolgende Wort wäre in diesem Falle Test4, Test4 variirt aber ständig Wink..

darum, wollte ich es nochmals herausschneiden Wink

Gruß, Kaali
 
c0re_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 28.11.2007
Beiträge: 425


Verfasst am: 26.02.2008, 16:01

Zuerst splittest du am "/". Dann hast du jeden, ich nehme mal an, Ordnernamen in einem Element des Arrays.

Code:
Dim s As String, sArray() As String, sElement as String
s = "test\_test2\_test3\_test4\_test5\_test6"
sArray = Split(s, "\")

Dann machst du eine Schleife, die alle Elemente des Arrays durchgeht.

Code:
For i = 0 To Ubound(sArray) ' bis zum letzten Element
If sArray(i) = "_test3" Then
sElement = Replace(sArray(i + 1), "_", "")
Exit For
End If
Next

Wenn das Element den Inhalt "_test3" hat, wird das nächste Element in der Variable gespeichert. Das "_" wird durch das Replace entfernt, aber das weißt du ja hoffentlich.
_________________


Zuletzt bearbeitet von c0re_ am 26.02.2008, 16:27, insgesamt einmal bearbeitet
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 26.02.2008, 16:14

Ach. Unnötig viel code und Ressourcenverbrauch

Code:

Dim pos1 As Integer
pos1 = InStr(1, Text1.Text, "_test3\") + 7
Text2.Text = Replace(Mid$(Text1.Text, pos1, (InStr(pos1 + 1, Text1.Text, "\")) - pos1), "_", "")

_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
c0re_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 28.11.2007
Beiträge: 425


Verfasst am: 26.02.2008, 16:17

Wieso mehr Resourcenverbrauch?
InStr ist doch bestimmt heftiger als so eine kleine Schleife. o0
_________________
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 26.02.2008, 17:02


Damit meine ich die ganzen Variablen die du benötigst.
Klar kann man es so auch machen. Ist halt Geschmackssache.

Und eine Schleife in der man bei jedem Durchlauf einen Text vergleicht ist nicht so schonend wie du meinst.

InStr selbst ist nicht langsam. Der Zugriff auf die Textboxen ist langsam.
Das würde ich bei eigenen Projekten durch Variablen ersetzen.
Aber hier hab ichs mal vereinfacht gehalten.

Btw. Die Funktion StrComp ist um einiges schneller als der Vergleich "If sArray(i) = "_test3".
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wichtig: Filebrowser z.B. für ein RAT 2116 13.01.2008, 11:14
Keine neuen Beiträge msgbox mit symbol _&_ z.B. yesno oder systemmodal 1077 26.09.2008, 23:16
Keine neuen Beiträge Abändern eines Ordnernamens (z.B. C:\Programme = Programme) 1194 23.04.2008, 15:33
Keine neuen Beiträge "Zurück-Funktion" mit Listview und z.B. DirView 733 17.04.2008, 13:30
Keine neuen Beiträge Fenster auslesen z.b von icq oder msn wer online kommt 1222 11.02.2008, 16:46
 



[ Time: 0.3485s ][ Queries: 115 (0.0361s) ][ GZIP on - Debug on ]