# txt zeilenweise einlesen?



## Fichmopp (22. März 2002)

Hoi Leude,

ich weiß nich obs irgendwo einfache tuts für diese Aufgabe gibt, aber dieser Weg ist mir einfach lieber.. 

Also
Ich will eine txt zeilenweise auslesen und beispielsweise in verschiedene Textboxen einlesen...
Wie geht das??

thx


----------



## Johannes Postler (22. März 2002)

so müsste es eigentlich funzen:

Private Sub command1_click()
Open Pfad for input as #1
do
line input #1, variable
'variable verwerten
Loop while not EOF(#1)
End sub

habe es jetzt nicht ausprobiert, sondern nur so aus dem kopf geschrieben

cu tirolausserfern


----------



## Fichmopp (22. März 2002)

*prob*

Hoi,

thx aber es wird nur eine Zeile ausgelesen..

Kann ich mit einem Befehl auf eine bestimmte Zeile zugriefen

mfg mopp


----------



## Johannes Postler (22. März 2002)

eigentlich sollte es nicht nur eine zeile auslesen ( deswegen die do - loop schleife). Du könntest natürlich nach jeder zeile überprüfen, welchen inhalt die variable hat.

cu tirolausserfern


----------



## Daniel Toplak (22. März 2002)

Versuch das doch mal mit einem FSO (File System Object). Da hat man mehr Möglichkeiten. Ich hab da mal ein kleines Beispiel zusammengestellt, alles was du brauchst sind 4 Textfelder und eine .txt Datei in deinem Projektordner mit dem Namen test.txt die mit 4 Zeilen Text gefüllt ist.

Hier der Code:

Option Explicit
Const ForReading = 1  ' Konstanten für Dateizugriff
Const ForWriting = 2
Const ForAppending = 3

Private Sub Form_Load()
    Dim fso  ' FileSystemObject
    Dim textfile ' Dateiobjekt
    Dim test() As String 'Stringarray für die einzelnen Zeilen
    Dim i As Integer ' Indexvariable
    i = 0

    'Das FSO wird gesetzt
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Das Dateiobjekt wird auf die Datei gesetzt
    Set textfile = fspenTextFile(App.Path & "\test.txt", ForReading)

    'Schleife bis EOF(End Of File)
    Do While textfile.AtEndOfStream <> True
        ReDim Preserve test(i) 'Dynamisches vergrössern des Arrays
        test(i) = textfile.ReadLine ' eine Zeile lesen
        i = i + 1 'Index erhöhen
    Loop

    textfile.Close 'Datei wieder schließen

    Text1.Text = test(0) 'Daten in Textfelder schreiben
    Text2.Text = test(1)
    Text3.Text = test(2)
    Text4.Text = test(3)



End Sub


----------



## Floker (25. März 2002)

Quatsch!
es wird nur eine zeile ausgelesen weil du die eigenschaft "multiline" deiner textbox auf false stehen hast, 
 also multiline =  true

so funzzszt*g*


----------



## xtrem (14. April 2002)

Servus ...

also es gibt noch die Möglichkeit :

Voraussetzung ist eine ListObjekt

Open Pfad for Input as #1
Do While Not EOF(1)
Line Input #1, variable 
   List1.additem variable
Loop 
End sub

gruß xtrem
;-]


----------



## wutz1111 (10. Mai 2002)

also des mit dem zeilenweise auslesen funktioniert soweit
nun würde ich gerne einzelne ausschnitte aus einer zeile an variablen übergeben, zb:

ich heiße paul und bin 35 jahre alt
ich heiße wutz und bin 11 jahre alt
...

also die zeilen sind immer identisch aufgebaut (name und alter haben immer die gleiche länge) und der name und das alter sollen nun an variablen übergebn werden...

ich hoffe das mir jemand helfen kann...schonmal thx im vorraus

mfg


----------



## Celvin (10. Mai 2002)

Ok, ich gehe davon aus,dass du:

Dim Zeile as String

hast...dann machst du:

Dim Stuecke() As String
Stuecke = Split(Zeile,Chr$(32))

um die Zeile in Einzelstücke zu teilen. Hierbei wird Chr$(32) (Leerzeichen) als Punkt zum Trennen angegeben...

Auf die einzelnen Elemente kannst du z.B. so zugreifen:

Dim nC As Integer
for nc=0 to ubound(Stuecke)
Debug.Print Stuecke(nC)
next nC

Achja, dabei ist es übrigens egal, wie lang die Teilstücke sind und ob die Längen gleich sind, getrennt wird an Hand des Strings, den du als 2. Parameter der Split() Funktion übergibst...

VB6 übrigens *g*


----------



## wutz1111 (11. Mai 2002)

BIG THX celvin
anfänglich hab ichs überhaupt nicht gecheckt (tu ich jetzt wohl immer noch nicht ) aber nachdem ich nen bissel rumgespielt hab wusste ich wenigstens für was die variablen stehen...
und was soll ich sagen, es funztt einwandfrei...;-) 

mfg


----------



## R3PT1L (16. Mai 2005)

@ DANIEL



> Versuch das doch mal mit einem FSO (File System Object). Da hat man mehr Möglichkeiten. Ich hab da mal ein kleines Beispiel zusammengestellt, alles was du brauchst sind 4 Textfelder und eine .txt Datei in deinem Projektordner mit dem Namen test.txt die mit 4 Zeilen Text gefüllt ist.



und wie muss ich den code umgestalten, wenn ich die zeilenanzahl in der text-datei variabel gestalten will, weil ich z.b. immer wieder neue einträge hinzufüge?

und wie krieg ich das ganze in eine combo-box?

dankeschöön


----------



## DrSoong (16. Mai 2005)

Die einfachste Methode?

```
Dim FFile As Integer, vDatei As String, vInhalt As String, vZeilen() As String
 
 vDatei = "C:\Text.txt"
 FFile = FreeFile
 vInhalt = Space(FileLen(vDatei))
 Open vDatei For Binary As FFile
  Get FFile, , vInhalt
 Close FFile
 vZeilen = Split(vInhalt, vbNewLine)
```
Jetzt hast du den Inhalt der Textdatei im Array *vZeilen()* (die erste Zeile hat dne index 0) und kannst die Zeilen direkt ansprechen. Die Zeilenanzahl kannst du mit

```
Anzahl = UBound(vZeilen) + 1
```
ermitteln. Jetzt kannst du das ganze mit einer Schleife in eine ComboBox bringen:

```
For cnt = 0 To UBound(vZeilen)
 Combo1.Add vZeilen(cnt)
 'Wenn du nur einen Teil brauchst, kannst du die Zeilen wie in den vorigen Posts beschrieben nochmal splitten und nur den Teil reinschreiben
Next cnt
```


Der Doc!


----------



## R3PT1L (16. Mai 2005)

> Combo1.Add vZeilen(cnt)



ich hab nun mal den code so kopiert wie du ihn geschrieben hast.

wenn ich das dann teste, markiert er mit den bereich ".add" und mault, dass methode oder mitgliedsdaten nicht gefunden wurden...


----------



## Shakie (16. Mai 2005)

Hast du denn auch eine ComboBox namens "Combo1" auf deiner Form? Oder hast du vielleicht bei der ComboBox einen Index eingestellt?


----------



## R3PT1L (16. Mai 2005)

hab das eben nochmal gecheckt....
combobox heisst Combo1 und kein index

EDIT:
kann es sein, dass es heissen muss 

Combo1.AddItem

EDIT 2:
ja, es muss heissen *Combo1.AddItem*


----------



## R3PT1L (16. Mai 2005)

hätte da nochmal nen nachschlag....

wie muss ich den code ändern, wenn ich mehrere comboboxen (mit index) habe, die aber alle auf die gleiche text-datei zugreifen sollen?


----------



## DrSoong (16. Mai 2005)

Erst mal sorry, hab den Code aus dem Kopf geschrieben, da ich kein VB zum testen hatte hab ich den Additem-Fehler nicht bemerkt. Wird aber nicht mehr vorkommen.

Wenn du den Inhalt der Textdatei in mehrere, indizierte Boxen bringen willst, brauchst du nur in der Schleife eine zweite Schleife einfügen:

```
For cnt = 0 To UBound(vZeilen)
 For boxen = 0 to 5 'bei z.B. 5 Comboboxen
  Combo1(boxen).AddItem vZeilen(cnt)
 Next boxen
Next cnt
```
Es gäbe noch die Möglichkeit, das ganze über eine Controls-Auflistung in die Boxen einzufügen, das wäre aber nur dann sinnvoll, wenn du keine Indizes hast (also in deinem Fall nicht wirklich notwendig).


Der Doc!


----------

