# Bestimmte Zeile in Textbox Wiedergeben



## FooFighter31 (5. Januar 2011)

Hallo!

Ich habe vor Jahren schon mit VB gearbeitet, aber nun da ich etwas machen möchte, hab ich ein Problem.
Ich habe eine Multiline-textbox. Dort wird per copy-paste immer die gleiche anzahl an zeilen eingegeben.
Ich möchte jetzt immer die 3 werte aus der 4. Zeile in 3 verschiedene labels ausgeben.
die werte sind zahlen von 0 bis n

sieht zB so aus

zeile
zeile
zeile
wert1 wert2 wert3
zeile
zeile
...

Mein Problem:
Ich schaffe es nicht die 3 werte aus der Zeile herauszufischen.. 
kann mir dabei bitte jemand helfen?

Grüße,
Foo


----------



## DrSoong (5. Januar 2011)

Da bietet sich mal schnell Split an:

```
Dim sZeilen() As String, sWerte() As String
sZeilen = Split(Textbox1.Text, vbNewLine)
sWerte = Split(sZeilen(3), " ") 'Wenn die Werte mit Space getrennt sind, sonst da entsprechende Trennzeichen einsetzen
'Jetzt hast du im Array sWerte (von 0-2) deine Werte, die du ausgeben kannst
```


Der Doc!


----------



## FooFighter31 (5. Januar 2011)

ok... ich raffs nicht ^^
ich habe jetzt folgendes:

Private Sub Text1_Change()

Dim Wert1
Wert1 = Array(0)

Dim sZeilen() As String, sWerte() As String
sZeilen = Split(Text1.Text, vbNewLine)
sWerte = Split(sZeilen(3), " ")

Label1.Caption = Wert1(0)


End Sub

Label1 gibt mir aber den Wert "0" aus. Wert1 sollte aber "4723" sein.

Oder soll ich da mit varWert1 arbeiten?

übrigens sind die Werte 1 - 3 so aufgebaut:
Wert1[leerzeichen][leerzeichen][tabulator]Wert2[leerzeichen][leerzeichen][tabulator]Wert3


tut mir leid, wegen den blöden fragen - ich hoffe, ihr habt geduld mit mir -.-

Grüße,
Foo


----------



## DrSoong (5. Januar 2011)

Dein *Wert1(0)* ist da irgendwie fehl am Platz, mal davon abgesehen, dass du im zweiten Split ja auch deine Trennzeichen anpassen musst:

```
Private Sub Text1_Change()

Dim sZeilen() As String, sWerte() As String

sZeilen = Split(Text1.Text, vbNewLine)
sWerte = Split(sZeilen(3), "  " & vbTab) 'ich hoffe, vbTab ist auch unter VB6 der Tabulator, sonst einfach in der Hilfe nachsehen

Label1.Caption = sWerte(0) '0 für den ersten Wert

End Sub
```


Der Doc!


----------



## FooFighter31 (5. Januar 2011)

danke, jetzt klappts!
das &vbTab funktioniert auch, hab ich aber oben noch nicht eingetragen, da ich's nur mal mit dem ersten wert versuchen wollte. 

Hab irgendwie verpeilt, dass ich da keine extra Dim mehr angeben muss.. 

Vielen Dank für die Hilfe!
Hat mir unheimlich weitergeholfen!


----------



## FooFighter31 (5. Januar 2011)

so... ich hab alles richtig, was ich noch so gebraucht hab. jetzt möchte ich aber noch eine zeile auslesen. und zwar die zeile 25 (inkl. 0).
Aber diese eine Zeile hat einen anderen Aufbau:
Wort[Tab]Wert25

Private Sub Text1_Change()

Dim sZeilen() As String, sWerte() As String

sZeilen = Split(Text1.Text, vbNewLine)
sWerte = Split(sZeilen(25), "  " & vbTab)

Wert1.Text = sWerte(0)
Wert2.Text = sWerte(1)
Wert3.Text = sWerte(2)
Wert25.Text = sWerte(25)

End Sub

jetzt sagt er mir aber "index außerhalb des gültigen bereichs" und markiert mir 
"Wert2.Text = sWerte(1)"

und wieder versteh ich das nicht.. -.-
mit "sWerte = Split(sZeilen(25)" werden ja 26 Zeilen ausgelsen, oder!?
und mit "WertX.Text = sWerte(x)" wird die so-und-so-vielte Zeile wiedergegeben, oder!?

bitte, noch mal um hilfe (auch wenn ich mir schon etwas blöd vorkomme...) :/


----------



## DrSoong (5. Januar 2011)

Gehen wir das ganze mal schrittweise durch:

```
sZeilen = Split(Text1.Text, vbNewLine)
```
Hier wird der gesamte Text in Zeilen geteilt und zeilenweise in ein Array geschrieben


```
sWerte = Split(sZeilen(25), " " & vbTab)
```
Hier wird eine Zeile (in diesem Fall die Zeile 26, durch den 0-Index hat sie die Nummer 25) getrennt, dabei sind die Zeichen, an denen getrennt wird wichtig. Du musst dir ansehen, wie die einzelnen Werte in der Zeile getrennt sind.

In deinem Fall wird es so sein, dass in der Zeile 26 die einzelnen Werte irgendwie anders getrennt sind, daher gibt es den Eintrag *sWerte(0)*, in dem befindet sich aber nun deine ganze Zeile. Der Aufruf von *sWerte(1)* erzeugt daher die Fehlermeldung, aufgrund deiner Trennzeichen hat _Split_ nur ein Array mit der Dimension 0 erzeugen können.

Zeig doch mal, die wie Zeile 26 (also 25 inkl. 0) aussieht.


Der Doc!


----------



## FooFighter31 (5. Januar 2011)

Hier ist die Zeile:
Geo	10 	Mat	20

also "Geo[Tabulator]10[Leerzeichen][Tabulator]20"


----------



## DrSoong (6. Januar 2011)

In dem Fall ist also nur ein Tabulator für diese Zeile dein Trennzeichen, die überflüssigen Leerzeichen am Anfang und Ende kriegst du mit Trim() weg.

```
Private Sub Text1_Change()

Dim sZeilen() As String, sWerte() As String

sZeilen = Split(Text1.Text, vbNewLine)
sWerte = Split(sZeilen(25), vbTab)

Wert1.Text = sWerte(0)
Wert2.Text = Trim(sWerte(1))
Wert3.Text = sWerte(2) 'du hast deiner Beschreibung nach in dieser Zeile nur 3 Werte

End Sub
```


Der Doc!


----------

