Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
556to560
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
556to560
556to560
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Weiss den keiner Rat????Textfile einlesen!

Weiss den keiner Rat?Textfile einlesen!
01.02.2005 14:40:06
Karl-Heinz
Hallo...
nachdem hier irgendwie keiner so recht bei meiner Frage Bescheid weiss - formuliere ich diese um.
Wie kann ich ein Textfile einlesen das ca 70mb gross ist?
Wie kann ich eine Textfile stückweise einlesen - ca die ersten 50 000 Zeilen?
Danke

32
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nicht nur doppelt sonder
fünffach
.
AW: Weiss den keiner Rat?Textfile einlesen!
c0bRa
hallo...
also automatisierte lösung dafür wirst IMHO vergeblich suchen...
bleibt nur noch die möglichkeit des cut´n´paste um die 70 mb zu zerpflücken...
wie kriegt man eigentlich ne txt date 70 mb groß!?

Das Forum lebt auch von Rückmeldungen...
c0bRa
AW: Weiss den keiner Rat?Textfile einlesen!
01.02.2005 15:06:09
Karl-Heinz
Hallo...
na ja...wenn keiner anwortet bin ich mir nicht sicher ob keiner was weiss(was ich mir nicht vorstellen kann) oder nur keiner will.....
Ausserdem reicht ja scho ne kurze Mitteilung dass es nicht geht mit VBA.
Aber du hast ja recht....
Danke dir c0bRa für deine Anwort - ein Textfile mit 70 mb bekommt man wenn man sie mit Verbindungsdaten von ca 50000 Kunden füttert :-)
Anzeige
AW: Weiss den keiner Rat?Textfile einlesen!
01.02.2005 15:11:01
Josef
Hallo Karl-Heinz!
Mal als Ansatz!
Bei mehr als 65536 Zeilen, muss man halt das Blatt oder die Spalte wechseln!


      
Sub splitTextFile()
'by Josef Ehrensberger
Dim arr As Variant
Dim strFile As String, strTemp As String
Dim lRow As Long
strFile = 
"D:\Temp\karlheiz.txt" 'Pfad anpassen

Open strFile For Input As #1
Input #1, strTemp
Close #1
arr = Split(strTemp, 
"D")
   
For lRow = 1 To UBound(arr)
   Cells(lRow, 1) = 
";D;" & Replace(arr(lRow - 1), ";""")
   
Next
End Sub 


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: Danke Sepp Textfile einlesen!
01.02.2005 15:47:14
Karl-Heinz
Danke Sepp..
wie immmer hilfbereit. Also ich erklär dir mal kurz die Sachlage evtl. hab ich mich nicht richtig ausgedrückt. Ich durchsuche eine Textdatei nach bestimmten nummern. Wird diese nummer gefunden wird diese und noch ein paar andere in ein Arbeitsblatt geschrieben. Mit folgendem Code:
If Len(strLine) If Len(strLine) strGesamt2 = Mid(strLine, 27, 16)
strSuch = "0"
If InStr(1, strGesamt2, strSuch) > 1 Then
Lesebeginn2 = 26 + InStr(1, strGesamt2, strSuch)
Leseende2 = 17 - InStr(1, strGesamt2, strSuch)
End If
strRuftelnummer = Mid(strLine, Lesebeginn2, Leseende2)

wks2.Activate
For i = 1 To wks2.Range("A65536").End(xlUp).Row
Gefunden = InStr(1, strRuftelnummer, Cells(i, 1))
If Gefunden = 1 Then
strGesamt1 = Mid(strLine, 10, 12)
strSuch = "0"
If InStr(1, strGesamt1, strSuch) > 1 Then
Lesebeginn1 = 9 + InStr(1, strGesamt1, strSuch)
Leseende1 = 14 - InStr(1, strGesamt1, strSuch)
strKDtelnummer = Mid(strLine, Lesebeginn1, Leseende1)
End If
Rufdatum = Mid(strLine, 45, 8)

wks1.Cells(Zeile, 1) = strKDtelnummer
wks1.Cells(Zeile, 2) = strRuftelnummer
wks1.Cells(Zeile, 3) = Rufdatum
wks1.Cells(Zeile, 4) = CDR
Zeile = Zeile + 1

End If
Bei dieser Variante bleibt der Rechner immer hängen wenn die Datei grösser als ca 30 mb ist. Das ist mein Problem.
Danke dir
Anzeige
AW: Danke Sepp Textfile einlesen!
01.02.2005 15:51:49
Josef
Hallo Karl-Heinz!
Und nach wievielen Zeilen steigt der Code aus?
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: Danke Sepp Textfile einlesen!
01.02.2005 15:58:51
Karl-Heinz
Hallo Sepp
hab ich vorher vergessen gehört noch dazu - ganz am anfang bei:
Open (File) For Input As #lngFreeFile
Do While Not EOF(lngFreeFile)
Line Input #lngFreeFile, strLine
also schon beim öffnen
AW: Danke Sepp Textfile einlesen!
01.02.2005 16:11:56
Karl-Heinz
HAllo...
kann nicht sagen bei wieviel Zeilen - bleibt ja hängen:-(
AW: Danke Sepp Textfile einlesen!
01.02.2005 16:48:28
Josef
Hallo Karl-Heinz!
Du schreibst in einem früheren Posting, das das Textfile keine
Zeilenumbrüche besitzt!
Darum steigt der Code warscheinlich aus, weil der String zu lang ist!
Kannst du mal ein Textfile mit einigen realistischen Zeichenfolgen
hochladen, dann "blas" ich das File bei mir mal auf 40 mb auf!
Sag mir auch genau, welche Teile aus dem String du wo brauchst.
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: Danke Sepp Textfile einlesen!
01.02.2005 17:33:19
Karl-Heinz
Hallo...
also den Zeilenumbruch hab ich schon hinbekommen - mache einfach alle mit dem TextPad auf und speichere alle Dateien mit diesem Format wieder ab - wäre jetzt nicht das Problem. Aber wie gesagt - das mit dem riesenstring hab ich noch nicht...
eine Datei die so aussieht wie das Orginal findest du unter:
https://www.herber.de/bbs/user/17280.txt
ich benötige alle teile die mit 01111111, 02222222 und 333333 gekennzeichnet sind - der Rest ist egal!
Vielen Dank
AW: Danke Sepp Textfile einlesen!
01.02.2005 17:41:56
Karl-Heinz
Hallo..
hab noch was vergessen..
die Nummern 0111111 und 0222222 können in ihrer Länge variieren - deswegen die suchroutine mit der "0"
Werde noch ca 20 min online sein dann werde ich erst morgen wieder ins Forum sehen können - meld mich dann - erstmal danke!
Anzeige
AW: Danke Sepp Textfile einlesen!
01.02.2005 21:03:02
Josef
Hallo Karl-Heinz!
https://www.herber.de/bbs/user/17287.xls
Probier mal!
Der Import hat bei mir mit einem File mit 40 Mb problemlos geklappt!(über 215.000 Zeilen/Datensätze)
Die Tabellenblätter werden automatisch angelegt.
Sowohl bei einem File mit, als auch ohne Zeilenmbruch!
Versuch's mal und berichte über deine Erfahrungen.
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: Danke Sepp Textfile einlesen!
Reinhard
Hi Karl-Heinz,
was tut sich bei diesem Makro an deiner Originaldatei?

Sub tt()
Close
On Error GoTo Fehler
Open "c:\temp\test.txt" For Input As #1
While Not EOF(1)
Input #1, wert
anz = anz + 1
Wend
Fehler:
MsgBox anz
Close #1
End Sub

Gruß
Reinhard
Anzeige
AW: Danke Sepp Textfile einlesen!
01.02.2005 18:15:22
Karl-Heinz
HAllo Reinhard..
werde das morgen noch testen und gebe dann Bescheid:-)
Mfg
AW:Textfile einlesen!
02.02.2005 08:30:12
Karl-Heinz
Hallo reinhard..
wie soll ich deinen code anwenden - seh dir doch mal mein Posting weiter oben an?´
Muss ja nur gewisse Teile einlesen...
MfG
Karl-Heinz
AW: AW:Textfile einlesen!
Reinhard
Hi Karl-Heinz,
mit meinem Code wollte ich herausfinden, ob deine Riesendatei mit 70MB problemlos geöffnet, ganz ausgelesen und wieder geschlossen werden kann.
Um dies dann als Fehlerquelle für die Abbrüche auszuschliessen.
Deine Daten aus den Auslesungen herauszufiltern ist dann erst der nächste Schritt.
Gruß
Reinhard
Anzeige
AW: AW:Textfile einlesen!
02.02.2005 14:25:39
Karl-Heinz
Hallo..
also klappt nicht - habs grad getestet mit ca 30mb und formatierter Datei!
Danke dir
AW: AW:Textfile einlesen!
02.02.2005 14:36:06
Karl-Heinz
Hallo..
also nochmal - genau beim öffnen ist Ende und Excel verbraucht 100% Prozessorleistung!
Bei
While Not EOF(1)
MfG
Karl-Heinz
Josef - Code klappt nicht! AW:Textfile einlesen!
02.02.2005 16:02:10
Karl-Heinz
Hallo Josef..
dein Code geht in Error bei
wks.Cells(lRow, 1) = "0" & tmp(1)
(index ausserhalb des gültigen bereichs)
Danke
AW: Josef - Code klappt nicht! AW:Textfile einlese
02.02.2005 17:13:24
Josef
Hallo Karl-Heinz!
Ich hab's gerade nochmal getestet, und es läuft mit dem File das du hochgeladen
hast ohne Probleme. Genauso mit einem File mit der Gleichen Datenstruktur, aber
ohne Zeilenumbrüche und mit 40 Mb.
Der Code schreibt mit diesem File, insgesamt über 235.000 Zeilen in 4 Tabellenblätter!
Stimmt die Datenstruktur mit den Originaldaten überein?
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: Josef - Code klappt nicht! AW:Textfile einlese
03.02.2005 09:11:16
Karl-Heinz
Hallo Josef..
hab's nochmal geteste - mit dem Orginalfile klapps nicht - mit meinem Testfile schon. Muss jetzt mal sehen ob und wie sich die files unterscheiden. Allerdings war mein Denkansatz anders - ich lese nur gewisse Blöcke aus einer Zeile ein, in denen eine gewisse nummer gefunden wurde und nicht das ganze file...Also ohne anlegen mehrer Arbeitsblätter, da am Ende nur ca 150 Einträge von 450 000 geschrieben werden.Hast Du explicit dafür einen Ansatz? Oder ist es besser alle Daten einzulesen und dann zu suchen?
Vielen Dank allen und dir natürlich Sepp
PS: Kannst du mir noch einen Tipp geben oder beser den code von dir mal ein wenig mehr dokumentieren damit ich das mit den Array besser verstehe?
Anzeige
AW: Josef - Code klappt nicht! AW:Textfile einlese
03.02.2005 09:24:10
Josef
Hallo Karl-Heinz!
Wenn du von 450.000 nur ca. 150 Datensätze brauchst, ist es sicher sinnvoller
den Text zu durchsuchen und nur die gefundenen Blöcke einzulesen!
Welche Nummer(n) suchst du ?
Kannst du einen Auschnitt der Originaldaten hochladen?
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: Josef - Code klappt nicht! AW:Textfile einlese
03.02.2005 14:00:51
Karl-Heinz
Hallo Sepp...
also ich suche nach einem Teil eines Strings in einer Zeile. Angenommen ich will alle meine Anrufe zu der Nummer 0171 herausfiltern dann suche ich nur nach 0171! In jeder Zeile in der die 0171 gefunden wird - wird dieser Teil des Strings also die komplette Nummer z.B. 0171123456 in ein sheet geschrieben. Dazu auch noch die Nummer von der aus ich angerufen habe.Diese ist im ersten Teil das Strings einer Zeile zu finden. Dazu kommt auch noch das Datum im Mittelteil des Strings. Du kannst mal in der unten angegeben Datei nach 0171 oder 0043 suchen. Die Nummern dach denen ich suche, stehen in einem Sheet z.B. in Spalte A nacheinander. Aber Wie gesagt, die Nummern können natürlich in ihrer Länge variieren wenn ich von einer anderen MSN anrufe habe ich z.B. 08124/1234 und die angerufene Nummer genauso.
https://www.herber.de/bbs/user/17416.txt
Danke Sepp
AW: Josef - Code klappt nicht! AW:Textfile einlese
03.02.2005 15:44:23
Josef
Hallo Karl-Heinz!
Probier' mers nochmal;-)
https://www.herber.de/bbs/user/17425.xls
Ich war mir allerdings nicht sicher, ob die 01 vor dem Datum noch
zur Rufnummer gehört oder nicht!
Jetzt ist sie nicht dabei, umstellung ist aber kein Problem!
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: Code klappt nicht! AW:Textfile einlese
04.02.2005 09:30:07
Karl-Heinz
Hallo Sepp...
Das mit der 01 vor dem Datum passt!
..also die Testdatei liest er einwandfrei ein - beim Orginal steigt der Code aus bei:
s2 = Mid(tmp, n2, n3 - n2 - 1) 'Angerufene Nummer oder ein anderes Mal bei
n3 = InStr(n2, tmp, CStr(Year(Date))) - 1 'Jahreszahl suchen
mit
Ungültiger Prozeduraufruf oder ungültiges Argument
Würde gerne ein Orginal hochladen - da stehen aber alle meine Telefonnummern drauf!
Sehe keinen Unterschied zwischen der Testdatei und dem Orginal...kannst mir das nochmal näher erläutern wie der Code genau funktioniert? Evtl komm i selber drauf? Kann es sein das es daran liegt dass die Nummern um bis zu 6 Zeichen in ihrer Länge variieren können?
Grusss und vielen Dank Karl!
AW: Code klappt nicht! AW:Textfile einlese
04.02.2005 09:40:51
Josef
Hallo Karl-Heinz!
Also der Code liest die Textdatei "häpchenweise" ein und untersucht jedes
Teilstück nach der gesuchten Nummer (zB. 0171) und schreibt, wenn diese
Nummer gefunden wird das Teistück, begrenzt durch "D", in ein Array!
Nach dem Durchsuchen der gesammten Datei, wird nun das Array zerlegt und die
relevanten Daten in die Tabelle geschrieben!
Wenn du mir vertraust, dann kannst du eine Originaldatei mailen!
j.ehrensberger(at)aon.at
Dann kann ich den Fehler sicher finden.
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: Code klappt nicht! AW:Textfile einlese
04.02.2005 10:57:33
Karl-Heinz
Hallo Sepp..
hab den Fehler...ist immer wenn die Suchnummer im ersten Teil des Strings auftaucht.
In Fall der nachstehenden Datei in der vorletzten Zeile bei:
03520171777
Datei:
https://www.herber.de/bbs/user/17448.txt
Ausserdem hab ich bei mir noch die Möglichkeit nach mehreren Nummern zu suchen (bis zu 20) - wie sieht das bei deinem Code aus?
MfG
AW: Code klappt nicht! AW:Textfile einlese
04.02.2005 12:15:18
Josef
Hallo Karl-Heinz!
Ich hoffe das ich nun alle Eventualitäten berücksichtigt habe!
Von den gefundenen Zeilen werden nur die ersten einhundert Zeichen
eingelesen. Ich glaube das reicht auch bei langen Rufnummern aus!
Die Nummern werden nur dann in die Tabelle geschrieben, wenn die
gesuchte Nummer in der angerufenen Nummer vorkommt!
Du kannst nun in der InputBox mehrere Nummern, getrennt duch Komma, eingeben.
Hier die angepasste Datei.
https://www.herber.de/bbs/user/17455.xls
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
fast haben wir es AW:Textfile einlesen
04.02.2005 13:49:07
Karl-Heinz
Hallo Sepp..
also klappt alles fast schon super.
Ein Problem besteht noch ...sorry.
Wenn im suchstring bei den angerufenen Nummern die 0171 als Beispiel erst nach 5 Stellen beginnt wird der String wieder am Ende abgeschnitten.
Bedeutet:
Bei Anrufnummer 08120171123 wird nur die 01711 geschrieben!?
Danke Sepp....
Ich antworte hier, weil mein Bildschirm ...
04.02.2005 14:32:22
Josef
... zu schmal ist ;-)
Hallo Karl-Heinz!
Das sollte es gewesen sein!
https://www.herber.de/bbs/user/17466.xls
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
geeeeeeht!!!!Alle klar!Vielen Dank!
04.02.2005 14:57:27
Karl-Heinz
Hallo Josef..
also...vielen,vielen Dank - war jetzt doch noch aufwändiger als gedacht oder?
Auf jeden Fall klappt bis jetzt alles gut - werde mir das Ganze noch ein wenig umbauen so dass ich nicht immer die Inputbox benutzen muss. Also in ne List oder mal sehen...
Also vielen Dank erst mal - wenns Problem gibt melde ich mich wieder!
PS.
Deine adresse brauch ich noch wegen dem Geschenkkorb!....:-)
AW: geeeeeeht!!!!Alle klar!Vielen Dank!
04.02.2005 15:18:42
Josef
Hallo Karl-Heinz!
Das ist immer das Problem mit den Beispieldateien!
Man glaubt das ein paar zufällige Zahlen in der richtigen anordnung
zum testn genügen, und mit dem Original sieht's dann ganz anders aus.
Freut mich das es endlich klappt.
Wenn du die Inputbox weghaben willst, dann ersetze einfach diesen Codeteil

'Suchbegriff(e) eingeben
sText = InputBox("Bitte gesuchte Nummer Eingeben!" & vbLf & vbLf & _
"Mehrere Nummern durch "","" trennen!", _
"Suche", "0171") 'Suchtext
If sText = "" Then Exit Sub
'Suchbegriff von falscheingaben (",", ":", ".", " ") bereinigen
sText = Trim(Replace(Replace(Replace(Replace(sText, ";", ","), ".", ","), ":", ","), " ", ""))
'Suchbegriffe aufteilen
arrS = Split(sText, ",")

und schreibe statt dessen

arrS = Array("0171", "0172", "0043", "0182")

dann kannst du alle Nummern die du suchen willst angeben!
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!

228 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige