PDA

Vollständige Version anzeigen : Schleife zeilenweise mit *txt ?


Yim
28.02.2008, 11:44
Hallo,

ich hab da ein Makro, das Variable von Eingaben auf der Userform braucht. Es werden dann Daten von einer *csv gelesen, mit den Variablen ausgewertet und in eine neue Mappe geschrieben.

Ich würde das ganze gerne als Schleife umschreiben, weil die Variablen bei den jeweiligen Datensätzen immer gleich angepasst werden müssen. Vor einigen Monaten hatte ich es schon mal versucht. Dazu habe ich die Variablen in Zeilen einer Tabelle geschrieben, es wurde dabei aber nur die erste Zeile mit Variablen abgearbeitet. Ich führe es darauf zurück, dass zu viele Arbeitsmappen in Spiel waren und die Schleife dank meiner Programmierung den Faden verloren hat –Fehlermeldungen kamen damals keine.

Jetzt stelle ich mir vor, dass ich entweder eine Textdatei erstelle, die das Makro dann Zeilenweise abarbeiten soll, oder einen Ordner mit einer Textdatei für die Variablen, pro Datensatz.

Leider hab ich bei derartigen zugriffen noch keine Erfahrung, da ich mich bisher auf Tabellen beschränken konnte. Ich weis nicht recht wie ich dem Makro sagen soll, das dass erste Wort der Zeile der Name sein soll, das zweite die var1, usw… und dass jede Zeile/Datei abgearbeitet weden soll.

Ich bräuchte mal ein oder zwei ganz simple Beispiele mit der richtigen Variablen Deklaration. Vielleicht sollte man eine Funktion für das Zeilenformat schreiben?


Nur um die Frage zu verdeutlichen:

Beispiele für nur eine Textdatei:
Name,var1,var2,var3
Name,var1,var2,var3
Name,var1,var2,var3

Sub ZeilenLesen()
For Each Zeile In “C:\test.txt”
MsgBox Name &” ”& var1 &” ”& var2 &” ”& var3
Next Zeile
End Sub

Beispiele für jeweils eine Textdatei:
Name,var1,var2,var3

Sub DateienLesen()
For Each txtDatei In “C:\test\”
MsgBox Name &” ”& var1 &” ”& var2 &” ”& var3
Next txtDatei
End Sub

IngGi
28.02.2008, 14:39
Hallo Yim,

das folgende Beispiel ist nicht besonders sinnvoll, sollte aber das Prinzip veranschaulichen:
<FONT Color=Black FACE="Courier New,FixedSys" Size=2>
<Blockquote>
<FONT COLOR=#0000FF>Sub</FONT>&nbsp;test()

<FONT COLOR=#0000FF>Dim</FONT>&nbsp;strZeile&nbsp;<FONT COLOR=#0000FF>As&nbsp;String</FONT>
<FONT COLOR=#0000FF>Dim</FONT>&nbsp;Daten
<FONT COLOR=#0000FF>Dim</FONT>&nbsp;intFF&nbsp;<FONT COLOR=#0000FF>As&nbsp;Integer</FONT>

intFF&nbsp;=&nbsp;FreeFile
<FONT COLOR=#0000FF>Open</FONT>&nbsp;"C:\test.txt"&nbsp;<FONT COLOR=#0000FF>For&nbsp;Input&nbsp;As</FONT>&nbsp;#intFF
<FONT COLOR=#0000FF>Do&nbsp;Until</FONT>&nbsp;EOF(intFF)
&nbsp;&nbsp;<FONT COLOR=#0000FF>Input</FONT>&nbsp;#intFF,&nbsp;strZeile
&nbsp;&nbsp;Daten&nbsp;=&nbsp;Split(strZeile,&nbsp;"&nbsp;")
&nbsp;&nbsp;MsgBox&nbsp;Daten(0)&nbsp;&amp;&nbsp;"&nbsp;"&nbsp;&amp;&nbsp;Daten(1)&nbsp;&amp;&nbsp;"&nbsp;"&nbsp;&amp;&nbsp;Daten(2)&nbsp;&amp;&nbsp;"&nbsp;"&nbsp;&amp;&nbsp;Daten(3)
<FONT COLOR=#0000FF>Loop</FONT>
<FONT COLOR=#0000FF>Close</FONT>&nbsp;#intFF

<FONT COLOR=#0000FF>End&nbsp;Sub</FONT>

<FONT Size=2>
<p>Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.14</a></b></FONT></p>
</Blockquote><FONT FACE="Arial,FixedSys"Size=3>Gruß Ingolf

Yim
28.02.2008, 21:16
Hallo IngGi,

vielen Dank, so einen Anfang hab ich gebraucht. Genau weis ich zwar nicht wie ich das jetzt mit den Arrays gebacken bekommen hab, aber so scheint es mit den Variablen zu klappen.

Sub test_zeilen_einlesen()

Dim strZeile As Variant
Dim daten(1 To 5) As Variant ' leider eine Zeileneingabe für For Each nötig?
Dim intcount As Integer
Dim arData As Variant
Dim intFF As Integer
intcount = 0
intFF = FreeFile

Open "C:\test.txt" For Input As #intFF

For Each strZeile In daten
Do Until EOF(intFF)

Line Input #intFF, strZeile
arData = Split(strZeile, " ")
MsgBox strZeile

MsgBox "0= " & arData(0) & Chr(13) & "1= " & arData(1) & Chr(13) & "2= " & arData(2) & Chr(13) & "3= " & arData(3)
intcount = intcount + 1
Loop

Next strZeile
Close #intFF

MsgBox intcount & " Zeielen in C:\test.txt gefunfen"
End Sub