tomvba
Goto Top

Textdateien in verschiedene Arrays schreiben

Liebe VBA Experten!

Ich möchte für jeden Eintrag in einer Listbox (Pfad einer Textdatei) ein seperates Array erstellen um später mit einzelnen Werten aus diesen Arrays eine Tabelle füllen.
um dies in einer Schleife abzuarbeiten können, würde ich gerne das anzusprechende Array durch MyArrayX = "MyArray" & h (wobei h die Schleifennummer ist) definieren.

Am Ende bekomme ich bei
MsgBox MyArrayX(0, 0) -> die richtige Zeile aus der richtigen Textdatei zb. " 1WERKSTUECK WERKSTUECK 2508.00 181.00RE ST 0 0 0 0 0 0 0 0 "
aber wenn ich das Array direkt ansprechen will :
MsgBox MyArray0(0,0) -> die Meldung "Typen unverträglich"

ist mein Ansatz überhaupt möglich bzw. was mache ich falsch ?

Danke schon mal im Voraus.

Tom


Option Explicit
Dim MyArray0() As String
Dim MyArray1() As String...

Sub Array_fuellen()

Dim Temptabelle As Variant
Dim Tempstring As String
Dim Freie_Datei As Integer, Spalten As Integer, Zeilen As Integer
Dim h As Integer 'Zähler Listenindex
Dim i As Integer 'Zähler array einlesen
Dim MyArrayX As Variant 'Variable wird mit zu bearbeitenden Array befüllt (MyArray0.....)


Freie_Datei = FreeFile
Zeilen = 0

For h = 0 To ListBox2.ListCount - 1 '1 Schleife für jedes Werkstück
'Array name aus Fixwert (MyArray) und Schleifennummer bilden
MyArrayX = "MyArray" & h
'
Listbox2 einzelne Datei öffnen und Array nach Zeilen dimensionieren
Open ListBox2.List(h) For Input As #Freie_Datei
Input #Freie_Datei, Tempstring
Temptabelle = Split(Tempstring, ";")
Spalten = UBound(Temptabelle, 1)
ReDim MyArrayX(Spalten, Zeilen)
Close Freie_Datei
'**Listbox2 einzelne Datei öffnen und einlesen
Zeilen = 0
Open ListBox2.List(h) For Input As #Freie_Datei
While Not EOF(Freie_Datei)
ReDim Preserve MyArrayX(Spalten, Zeilen)
Input #Freie_Datei, Tempstring
Temptabelle = Split(Tempstring, ";")
For i = 0 To Spalten
MyArrayX(i, Zeilen) = Temptabelle(i)
Next i
Zeilen = Zeilen + 1
Wend
Close Freie_Datei
MsgBox MyArrayX(0, 0) 'Beginnt bei 0 !!!
MsgBox MyArray0(0,0)


Next h
End Sub

Content-Key: 108193

Url: https://administrator.de/contentid/108193

Printed on: April 24, 2024 at 23:04 o'clock

Member: bastla
bastla Feb 05, 2009 at 21:47:26 (UTC)
Goto Top
Hallo TomVBA!

Entweder baust Du das Ganze als dreidimensionales Array auf (Dateinummer,Zeile,Spalte), oder Du splittest erst bei Bedarf - dann genügt ein eindimensionales Array, welches in jedem Element die gesamte Textdatei als weiteres eindimensionales Array - Elemente sind die einzelnen Zeilen - enthält) - wobei ich allerdings zur Performance nichts sagen kann, daher ggf ausprobieren ...

Die Variante 2 sähe etwa so aus:
Sub Array_fuellen()
Set fso = CreateObject("Scripting.FileSystemObject")  
Dim Daten
MaxIndexDateien = ListBox2.ListCount - 1
ReDim Daten(MaxIndexDateien)
For h = 0 To MaxIndexDateien
    Daten(h) = Split(fso.OpenTextFile(ListBox2.List(h)).ReadAll, vbCrLf)
Next
MsgBox Split(Daten(1)(8), ";")(3)  
End Sub
In der MsgBox wird (da nullbasierend) der Inhalt von Spalte 4 der Zeile 9 der Datei 2 ausgegeben.

Grüße
bastla
Member: TomVBA
TomVBA Feb 06, 2009 at 11:56:22 (UTC)
Goto Top
Er sandte sein Wort und machte sie gesund und errettete sie, dass sie nicht darben. (Psalm 107, 20)


Vielen Dank face-smile