Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
376to380
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
376to380
376to380
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

riesige textdatei importieren

riesige textdatei importieren
08.02.2004 13:27:25
daniel
hallo !
kann mir jemand sagen, wie ich eine textdatei mit ca. 200.000 zeilen (auf mehrere blätter verteilt) importieren kann ?
excel sagt, ich könne es mit dem textimport-assistenten machen und die bisher importierten daten ausschliessen.
leider weiss ich absolut nicht, wie das geht...
danke für eure tipps !!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: riesige textdatei importieren
08.02.2004 13:50:34
Ramses
Hallo
probier mal das


Sub Read_Bigdicttxt_File()
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'------------------------------
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
    Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
    'Zähler hochzählen
    txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 1 To txtlines
    Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = 2 To Worksheets.count
    Application.DisplayAlerts = False
    Worksheets(i).Delete
    Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Data1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
    Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
    'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
    If Mod 65536 = 0 Then
        tWkb.Worksheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Data" & i
        tWks = ActiveSheet.Name
        n = 1
    End If
    'Richtes Wort
    tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
    'Wort umgedreht
    tWkb.Worksheets(tWks).Cells(n, 2) = StrReverse(textArr(i))
    n = n + 1
Next i
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5

Gruss Rainer
Anzeige
AW: riesige textdatei importieren
08.02.2004 14:03:33
daniel
danke !! allerdings werden die daten recht komisch eingelesen...
ich versuche mal, mit dem kuddelmuddel klarzukommen! :)
AW: riesige textdatei importieren
08.02.2004 14:11:00
Ramses
Hallo
diese Anweisung
'Wort umgedreht
tWkb.Worksheets(tWks).Cells(n, 2) = StrReverse(textArr(i))
kannst du getrost löschen.
Das war mal eine Anforderung für ein anderes Projekt :-)
Gruss Rainer
AW: riesige textdatei importieren
08.02.2004 14:18:17
daniel
auch dann klappts leider nicht richtig.
dann muss ich wohl die textdatei vorher irgendwie splitten.
excel liest jedenfalls nicht korrekt ein.
die datei sieht so aus:
0;123456;345353;asdfasdfasdfdfgsdg;2342342sdfsdf;2424;1
(beispielsweise)
und das klappt leider nicht korrekt... :((
Anzeige
AW: riesige textdatei importieren
08.02.2004 14:31:57
NE
Hallo,
nur 'ne Idee & unprobiert, versucht's mal mit
Line input #1
statt nur
input #1
da liest er wirklich zeilenweise, incl. Kommata ;-)
HTH Nancy
Das ist schon korrekt...
08.02.2004 14:32:20
Ramses
Hallo
Du hast nix davon gesagt, dass du eine Tabelle einlesen willst die in txtform vorliegt und mit Semikolon getrennt sind !!
Ersetze die Abfrage "If i Mod 65536 = 0" durch diese Abfrage


    If Mod 65536 = 0 Then
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
        Range("A1").Select
        tWkb.Worksheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Data" & i
        tWks = ActiveSheet.Name
        n = 1
    End If

     Code eingefügt mit Syntaxhighlighter 2.5


Gruss Rainer
Anzeige
AW: Das ist schon korrekt...
08.02.2004 14:47:42
daniel
was soll ich sagen... es klappt einfach nicht... :(
ich suche stichprobenweise in der importierten datei nach namen, die vorhanden sein müssten, aber sie werden nicht gefunden.
ich weiss nicht, warum das nicht vernünftig importiert wird. selbst mit deinem update klappt es leider nicht...
trotzdem danke !!
AW: Das ist schon korrekt...
08.02.2004 14:51:55
Ramses
Hallo
kannst du die Textdatei mit ein paar Beispiel-Datensätzen mal hochladen ?
Gruss Rainer
AW: Das ist schon korrekt...
08.02.2004 14:57:24
daniel
ich weiss leider nicht, wie man hier was hochlädt, aber die gesamte datei findest du hier:
ftp://ftp.bis.de/services/stammdaten/stmd.asc
die datei muss man nur in stmd.txt umbenennen.
gruss,
daniel
Anzeige
AW: Das ist schon korrekt...
08.02.2004 15:24:07
Ramses
Hallo
probier jetzt nochmal


Option Explicit
Sub Read_Bigdicttxt_File()
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'------------------------------
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
    Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
    'Zähler hochzählen
    txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 0 To txtlines - 1
    Line Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = Worksheets.Count To Step -1
    Application.DisplayAlerts = False
    Worksheets(i).Delete
    Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
    Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
    'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
    If Mod 65536 = 0 Then
        'Aufsplitten der bisher eingelesenen Daten
        'Indem die Trennung anhand von der Semikolons vorgenommen wird
        Application.StatusBar = "Datentrennung wird vorgenommen"
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
        Range("A1").Select
        dataFitting = False
        tWkb.Worksheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Dataset from " & i
        tWks = ActiveSheet.Name
        n = 1
    End If
    'Richtes Wort
    tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
    n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

     Code eingefügt mit Syntaxhighlighter 2.5


Das ist das Ergebnis nach Abschluss des Import Vorganges
Anzeige
AW: Das ist schon korrekt...
08.02.2004 15:41:40
daniel
wunderbar !!!!!
vielen dank rainer !!!!!!
Merci :-)) Geschlossen o.T.
08.02.2004 15:45:18
Ramses
...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige