Rießig große textdatei auslesen.

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Rießig große textdatei auslesen. von: chris b
Geschrieben am: 17.03.2005 08:45:54

Hallo VBAler,
ist es denn möglich das ich aus einer textdatei wete auslesen kann , die mehr als 30000 sind also ich habe z.b eine mit 350 000 Werten.
wenn ich mit diesem Code die Werte einlesen will bekomme ich immer einen laufzeitfehler 6 (überlauf) fehler.
Ich möchte aber gerne diese 350000 werte in eine Vriable einlesen und dann aus allen werten die voran ein bestimmtes datum haben einen Mittelwert bilden.
die Zeilen in der Textdatei sehen wie folgt aus.

466.432001.06.2004/00:03:400
usw.....


Vielen Dank für euer bemühungen und Tipps.
grüße Christian

Bild


Betrifft: AW: Rießig große textdatei auslesen. von: Ramses
Geschrieben am: 17.03.2005 08:56:03

Hallo

SOOO einfach ist das auch nicht:-)

1. Problem
Das einlesen in EINE Variable macht keinen Sinn, da hast du nur einen horrend langen String

2. Problem
Wie willst du deine relevanten Werte finden ?

3. Problem
Die eingelesenen Werte sind nach wie vor TEXT, und keine Zahlen mit denen du rechnen kannst

4. Problem
Um einen Mittelwert bilden zu können, musst du die jeweils relevanten Daten aufteilen um sie zur Berechnung zur Verfügung zu haben.

Lösung/Workaround

Ein Mehrdimensionales Array erstellen das X-Datensätze aufnehmen kann und N-Parameter enthält.

Das einlesen von externen Dateien kannst du hier mal nachlesen

http://www.office.gmxhome.de/_excel_vba_externe_daten.htm

Ein Beispiel für ein mehrdimensionales Array wäre folgendes makro


Sub Dreidimensionales_Array()
Dim i As Integer, n As Integer, m As Integer
Dim arrKosten(4, 1, 1) As Variant
arrKosten(0, 0, 0) = "Mercedes"
arrKosten(1, 0, 0) = "Volkswagen"
arrKosten(2, 0, 0) = "Opel"
arrKosten(3, 0, 0) = "Ford"
arrKosten(4, 0, 0) = "Alfa"
arrKosten(0, 1, 0) = 48500
arrKosten(1, 1, 0) = 32500
arrKosten(2, 1, 0) = 33750
arrKosten(3, 1, 0) = 31250
arrKosten(4, 1, 0) = 39500
arrKosten(0, 1, 1) = 1.17 * arrKosten(0, 1, 0)
arrKosten(1, 1, 1) = 1.17 * arrKosten(1, 1, 0)
arrKosten(2, 1, 1) = 1.17 * arrKosten(2, 1, 0)
arrKosten(3, 1, 1) = 1.17 * arrKosten(3, 1, 0)
arrKosten(4, 1, 1) = 1.17 * arrKosten(4, 1, 0)
'Alles in eine Zelle
For i = 0 To 4
    MsgBox ("Das Fahrzeugmodell " & arrKosten(i, 0, 0) & " kostet netto " & arrKosten(i, 1, 0) & " CHF" _
        & Chr$(13) & "oder " & arrKosten(i, 1, 1) & " CHF incl. MwSt.")
Next
'... oder in Spalten nebeneinander
For i = 0 To 4
    Cells(i + 1, 1).Value = arrKosten(i, 0, 0)
    Cells(i + 1, 2).Value = arrKosten(i, 1, 0)
    Cells(i + 1, 3).Value = arrKosten(i, 1, 1)
Next i
End Sub


Daa Problem ist nun nur noch, die Daten aus der Datei einlesen, in einem brauchbaren Format an das Array übergeben, die entsprechenden Spalten des Array summieren und durch die Anzahl der Treffer zu dividieren :-)

Viel Spasse :- )

Gruss Rainer


Bild


Betrifft: AW: Rießig große textdatei auslesen. von: Horst S.
Geschrieben am: 17.03.2005 10:28:57

Hallo,
hatte vor Längerem was ähnliches Dank Hilfe dieses Forums
und anderer Quellen im Netz gebastelt

...geben und nehmen....

versuch Dich mal, ob Dir das was nützt:

1. Kannst die Funktion in einem Sub aufrufen: TXT_einlesen "MyFile.abc"
2. Die Funktionen Split und ReadUntil sind m.Wissens ab Excel2000
integriert und können weggelassen werden, geht aber bei mir SO auch in Excel XP
3. Das liest erst mal alles ein (Achtung Excel höchstens 65536 Zeilen),
hinterher sortieren und unbenötigte Zeilen löschen)

-------------MODUL START-----------

Public Function Split(ByVal sIn As String, Optional sDelim As _
String, Optional nLimit As Long = -1, Optional bCompare As _
Long = vbBinaryCompare) As Variant
Dim sRead As String, sOut() As String, nC As Long
If sDelim = "" Or Len(sDelim) > Len(sIn) Then
ReDim Preserve sOut(0)
sOut(0) = sIn
Else
sIn = sIn & sDelim
Do While sIn <> "" And Len(sDelim) < Len(sIn)
sRead = ReadUntil(sIn, sDelim, bCompare)
ReDim Preserve sOut(nC)
sOut(nC) = sRead
nC = nC + 1
If nLimit <> -1 And nC >= nLimit Then Exit Do
Loop
End If
Split = sOut
End Function




Private Function ReadUntil(ByRef sIn As String, _
    sDelim As String, Optional bCompare As Long = vbBinaryCompare) As String
Dim nPos As Long
  nPos = InStr(1, sIn, sDelim, bCompare)
  If nPos > 0 Then
    ReadUntil = Left(sIn, nPos - 1)
    sIn = Mid(sIn, nPos + Len(sDelim))
  End If
 End Function




Public Function TXT_einlesen(ByVal Dateiname As String) As Variant
Dim ReadFile, zeile As String, arr_str As Variant
'leere Tabelle zum Einlesen
Workbooks.Add
'Dialog öffnen auf Basis von *.txt, *.log oder *.dat Files
ReadFile = Dateiname
Open ReadFile For Input As #1
Do While Not EOF(1)
Line Input #1, zeile
arr_str = Split(zeile, vbTab) ' statt vbTab ggf ";" oder ","
j = j + 1
For i = 0 To UBound(arr_str)
Cells(j, i + 1) = arr_str(i)
Next i
Loop
Close #1
End Function



--------------------MODUL END --------


Horst vom Host
(bin für heute "runter" von Herber.de-Rückfragen zwecklos :-) )


Bild


Betrifft: AW: Rießig große textdatei auslesen. von: Domke, Frank
Geschrieben am: 17.03.2005 10:31:07

Hallo Christian,
bitte beschreibe genauer den Datenbestand, den Du einlesen willst! Handelt es sich um Daten eines unbestimmten Zeitraum oder eines Monats oder...?
Das Einlesen ist relativ einfach, aber mit der Kenntnis vom Inhalt könnte man die Daten evtl. auch in Excel unterbringen. Alternativ pakst Du die Daten in eine Datenbank (Access, MySQL o.ä.) und wertes diese dann entweder innerhalb der Datenbank oder in Excel aus.
Viel Erfolg
Frank.


Bild


Betrifft: AW: Rießig große textdatei auslesen. von: chris b
Geschrieben am: 17.03.2005 14:31:20

Vielen dank euch allen.
Werds mir morgen erst anschauen. Danke


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Rießig große textdatei auslesen."