Hallo carsten,
bist du sicher, dass die Software des Forums nicht mal wieder Teile deines Makros verschluckt hat. Ich finde nirgendwo eine Zuweisung zur Variablem "Daten" oder eine Anweisung zum Lesen von Daten.
Ich vermute, du liest die gesamte Datei in diese Variable auf einmal ein. Das ist sicherlich unzweckmäßig, sollte aber keinen Fehler verursachen, denn Strings können, zumindestens in der Office-Version 2007, bis zu ca. 2 Milliarden Zeichen enthalten. Prüfe doch einmal, ob das auch bei deiner Version der Fall ist (Dateityp String in der VBA-Hilfe suchen).
Für den Fall, dass das nicht der Fehler ist, einige Fragen:
Deine Datei enthält also Tabulatoren (Chr(9)) und Zeilenvorschubzeichen (Chr(10)). Gibt es noch weitere Zeichen in den Zeilen, die als Datenseparator interpretiert werden können, z.B. Kommas? Stehen in jeder Zeile gleich viele Tabulatoren, also so viele, wie in der ersten Zeile?
Vielleicht zeigst du einmal eine Original Titel- und eine Origainaldatenzeile, wobei es weniger auf den Text als auf die nichtdarstellbare Sonderzeichen ankommt, so dass du diese bitte besonders kennzeichnest. Es gibt bestimmt effizientere Möglichkeiten als den Gesamtstring nach Chr(9) und chr(10) abzusuchen, wenn du nur die Anzahl der Zeilen und Spalten erfahren willst. Bevor ich aber einen Vorschlag mache, sollte ich den Dateiaufbau kennen.
Gruß
Holger
carsten schrieb am 17.10.2008 12:31:58:
hi,
ich hab ein programm geschrieben, welches eine textdatei mit messwerten lädt, und dann sowohl zeilen als auch spalten zählt(anhand der zeichen ascii 9 u 10).
funktioniert bei ner normalen textgröße auch wunderbar
nun habe ich jedoch textdateien mit einer größe von 100 MB. da versagt das programm.
meine frage: gibt es eine grenze bei der größe von dateien, die man laden kann?
oder hat jemand vielleicht ne andere idee, wo das problem liegen könnte?
ist die anweisung zum laden der datei falsch gewählt?
hier mein code:
'variablen für das reine spalten und zeilenzählen
Public ReadFile As String
Public zeichen 'zeichen im string beim zählen der zeilen und spalten
Public Länge 'ist die Länge des Gesamtstrings
Public Anzahl 'ist die Anzahl der Zeilen
Public Spalten 'ist die Anzahl der Spalten
Public Ascii 'ist der Ascii-Wert eines Zeichens
Public merkez 'ist die Stelle, an der die erste überzählige Zeile erreicht wird
Public kopfzeile As String 'ist der Kopfzeilenstring
Public daten As String
Sub Zeichenzählen()
Dim frage 'ist der Wert der Ja/Nein Frage
Anzahl = 0
Spalten = 1
ReadFile = Application.GetOpenFilename("Dateityp (*.txt; *.log; *.dat; *.asc; *.doc; *.rtf),")
If ReadFile = "Falsch" Then Exit Sub
'Die Zeilen und Spalten des Strings werden erfasst, gezählt
'und für weitere Operationen wichtige Stellen werden gespeichert
Open ReadFile For Random As #1
Do While Not EOF(1)
Länge = Len(daten)
For x = 1 To Länge
zeichen = Mid(daten, x, 1) 'der ascii wert eines jeden zeichen wird ausgewerten
Ascii = Asc(zeichen)
If Ascii = 10 Then 'wenn der ascii=10, dann newLine/ende einer zeile
Anzahl = Anzahl + 1
End If
If Ascii = 9 And Anzahl = 0 Then 'wenn ascii=9, dann tab/neue spalte ->spalten werden nur anhand der ersten zeile gezählt
Spalten = Spalten + 1
End If
If Anzahl = 65536 Then 'stelle im datenstring, an der mehr als excelzeilen erreicht werden
merkez = x
End If
If Anzahl = 0 Then 'kopfzeilenstring für die verarbeitung hinsichtlich der zeilen wird gespeichert
kopfzeile = Mid(daten, 1, x)
End If
Next x
Loop
MsgBox "Zeilenzahl ist " & Anzahl & " Spaltenzahl ist " & Spalten
UserForm1.Show 'der user entscheidet, ob er die spaltenformatierungsfkt. oder die Zeilen formatierungsfkt. nutzen möchte
End Sub
|