Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1016to1020
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Dateien laden, Dateigröße
17.10.2008 13:06:48
carsten
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


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien laden, Dateigröße
17.10.2008 13:26:58
Tino
Hallo Rudi,
ob dies bei so großen Textdateien funktioniert kann ich nicht sagen.
Test einfach mal
Sub Text_Info()
  Dim sFilename As String
  Dim F As Integer
  Dim sInhalt As String
  Dim AnzahlZeilen As Long, AnzahlSpalten As Long
  sFilename = Application.GetOpenFilename("Dateityp (*.txt; *.log; *.dat; *.asc; *.doc; *.rtf),")
  If sFilename = "Falsch" Then Exit Sub
  
  If Dir$(sFilename, vbNormal) <> "" Then
    F = FreeFile
    Open sFilename For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close #F
  End If
  
AnzahlZeilen = CountChar(sInhalt, vbCrLf) 'eventuell Zeilenumbruchzeichen anpassen 
AnzahlSpalten = IIf(AnzahlZeilen > Rows.Count, AnzahlZeilen / Rows.Count, 1)
MsgBox "Zeilenzahl ist " & AnzahlZeilen & " Spaltenzahl ist " & AnzahlSpalten
End Sub
Function CountChar(ByVal SourceString As String, ByVal strChar As String) As Long
   CountChar = Len(SourceString) - Len(Replace(SourceString, strChar, ""))
End Function


Gruß Tino

Anzeige
AW: Dateien laden, Dateigröße
20.10.2008 13:13:00
carsten
zeilenumbruchzeichen wäre ein newline (chr 10)..problem ist, ich muss diese abzählen, da ich den string an einer bestimmten stelle dann abschneiden und in eine andere datei speichern möchte..
AW: Dateien laden, Dateigröße
20.10.2008 13:43:00
Tino
Hallo,
dafür ist doch die Funktion eingebaut.

Function CountChar(ByVal SourceString As String, ByVal strChar As String) As Long
CountChar = Len(SourceString) - Len(Replace(SourceString, strChar, ""))
End Function


Gruß Tino

AW: Dateien laden, Dateigröße
20.10.2008 13:23:21
carsten
bei so großen dateien funktioniert deine version leider nicht.
als fehler spuckt er aus: nicht genügend zeichenfolgenspeicher
Anzeige
AW: Dateien laden, Dateigröße
20.10.2008 13:51:00
Tino
Hallo,
dann musst Du die Zeilen in der Textdatei Zählen.
Dim Text1 As String
Dim txtLines As Long
Dim ReadFile As String 'Pfad und Datei 

Open ReadFile For Input As #1
txtLines = 0
    Do While Not EOF(1)
        Line Input #1, Text1
        txtLines = txtLines + 1 'Zähler 
    Loop

Close #1


Gruß Tino

Anzeige
AW: Dateien laden, Dateigröße
20.10.2008 13:55:00
carsten
so mach ich dass ja auch eigentlich mit meinem code(wenn du vorher schaust müsste das da stehen)
das line input in meinem gepostetem code is leider verloren gegangen..
aber genauso wie du sagst hab ichs gemacht..und bei ner dateigröße von 100mb bzw. etwa 150mio zeichen kackt excel einfach ab..ohne jegliche rückmeldung..
hast du ne idee?
AW: Dateien laden, Dateigröße
20.10.2008 14:02:52
carsten
außerdem ließt er die ganze datei dann als eine zeile ein u erkennt nicht die zeilenumbrüche.
das is mir alles ein rätsel.
AW: Dateien laden, Dateigröße
20.10.2008 14:12:00
carsten
ok..nach der fehlersuche ist mir aufgefallen, dass er bei der großen datei schon bei dem line input nicht mehr weitermacht?!
Anzeige
AW: Dateien laden, Dateigröße
20.10.2008 14:59:00
Tino
Hallo,
also ich sage jetzt einfach mal, Du müsstest die Datei vorher aufsplittern.
Eventuell mit WindowsCommander oder auch mansche Zip-Programme können dies auch.
Gruß Tino
AW: Dateien laden, Dateigröße
20.10.2008 16:16:00
carsten
wills jetzt mit der .readline methode probieren..ich glaub, dann liest er jede zeile einzeln aus.
prob is nur folgendes..ich muss aus meinem pfad ja n textstream machen.
nu schreib ich so:
Sub Zeichenzählen()
Dim Object1
Dim objFileSys
Dim ReadFile As String
ReadFile = Application.GetOpenFilename("Dateityp (*.txt; *.log; *.dat; *.asc; *.doc; *.rtf),")
If ReadFile = "Falsch" Then Exit Sub
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set Object1 = objFileSys.OpenTextFile(ReadFile, ForReading)
usw...
und jetz: für die letzte zeile sagt er mir ungültiger prozeduraufruf oder ungültiges argument.
kann mir das jemand erklären?
Anzeige
AW: Dateien laden, Dateigröße
20.10.2008 16:32:05
Tino
Hallo,
warum nicht einfach so?
Modul Modul1
Option Explicit 
 
 
Sub Zeichenzählen() 
Dim ReadFile As String, sLine As String 
Dim F As Integer 
Dim lRow As Long 
 
ReadFile = Application.GetOpenFilename("Dateityp (*.txt; *.log; *.dat; *.asc; *.doc; *.rtf),") 
If ReadFile = "Falsch" Then Exit Sub 
 
 
  lRow = 0 
  If Dir$(sFilename) <> "" Then 
    F = FreeFile 
    Open ReadFile For Input As #F 
        While Not EOF(F) 
            Line Input #F, sLine 
            lRow = lRow + 1 
        Wend 
    Close #F 
 
End Sub 


Gruß Tino

Anzeige
AW: Dateien laden, Dateigröße
20.10.2008 17:43:00
carsten
weil vba über die Line Input methode komischerweise meine zeilenumbrüche nicht erkennt, und somit die gesamte tabellenstring als eine line einliest quasie 150mio zeichen. leider macht excel da faxen..macht einfach nich weiter..ka warum.
habs jetz mit der .readline methode gemacht..das funktioniert ähnlich
'variablen für das reine spalten und zeilenzählen
Public ReadFile As String
Public Object1
Public objFileSys
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

Public 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
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set Object1 = objFileSys.OpenTextFile(ReadFile, 1)
'Die Zeilen und Spalten des Strings werden erfasst, gezählt
'und für weitere Operationen wichtige Stellen werden gespeichert
Do Until Object1.AtEndOfLine
daten = Object1.readLine
If Anzahl = 0 Then
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 = 9 Then 'wenn ascii=9, dann tab/neue spalte ->spalten werden nur anhand der ersten  _
zeile gezählt
Spalten = Spalten + 1
End If
Next x
kopfzeile = Mid(daten, 1, x) 'kopfzeilenstring für die verarbeitung hinsichtlich der zeilen  _
wird gespeichert
End If
If Anzahl = 65536 Then     'stelle im datenstring, an der mehr als excelzeilen erreicht  _
werden
merkez = x
End If
Anzahl = Anzahl + 1
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


Danke dir

Anzeige
AW: Dateien laden, Dateigröße
24.10.2008 15:07:36
carsten
mit der readfile methode funzt es
kann den code nur irgendwie nich senden
danke für deine hilfe
AW: Dateien laden, Dateigröße
20.10.2008 13:42:49
carsten
funktioniert bei der großen datei nicht
fehler: zeichenfolgenspeicher zu klein..was kann man da machen?

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige