| |

Visual-Basic EinsteigerRe: Mehrer Dateien zusammenfügen | |  | Autor: IRCox | Datum: 29.03.08 10:46 |
| Moin, Moin....
Also - prinzipiell ist dies möglich, ABER das Ganze strapaziert den Rechner schon arg - besonders im Hinblick auf die Performance des Speichers. Du willst Dir ca. 210MB an Text in den Speicher ziehen - das ist nicht ohne, je nach Länge der einzelnen Strings kommt da ganz schön was zusammen. Zu überlegen wäre Dir jede einzelne Datei für sich vorzunehmen und da die "wichtigen" Daten herauszuziehen. Ich weiss ja nicht, um welche Art Logdateien es sich handelt, aber das wäre wohl der "elegante" Weg. Im Übrigen sollte man immer versuchen, so schonend wie möglich mit den Ressourcen des Rechners umzugehen - zumindest, wenn das Programm später auch auf anderen Rechnern flüssig laufen soll. Man kann jetzt vielleicht sagen "Hey, wir leben im Zeitalter der MultiCore- und GB-RAM-Rechner", aber lass' eine solche speicherintensive Operation mal auf einem älteren System laufen... Da wirst Du sehen, dass die Geschwindigkeit dramatisch einbrechen wird und mit ein bisserl Pech gleich die ganze Anwendung abschmiert - alles schon gesehen
Nunja... lange Rede, kurzer Sinn - dieses wäre die "Holzhammer-Methode" (ohne Gewähr):
Dim i As Integer
Dim FileNum As Integer
Dim x As Long
Dim StartPos As Long
Dim ActPos As Long
Dim tmpCount As Long
Dim tmpByteToRead As Long
Dim LinesCount As Long
Dim FileLength As Double
Dim tmpBytesRead As Double
Dim tmpData As String
Dim tmpArray() As String
x = 0
LinesCount = 0
For i = 0 To 6
FileNum = FreeFile
Open ("D:\Temp\test" & CStr(i + 1) & ".txt") For Binary As #FileNum
FileLength = LOF(FileNum)
tmpByteToRead = 256& * 256&
tmpBytesRead = 0
Do
If FileLength = tmpBytesRead Then
Exit Do
ElseIf (FileLength - tmpBytesRead) < tmpByteToRead Then
tmpByteToRead = FileLength - tmpBytesRead
End If
tmpData = Space$(tmpByteToRead)
Get #FileNum, tmpBytesRead + 1, tmpData
StartPos = 1
tmpCount = 0
Do
ActPos = InStr(StartPos, tmpData, Chr(10))
If ActPos = 0 Then Exit Do
tmpCount = tmpCount + 1
StartPos = ActPos + 1
Loop
LinesCount = LinesCount + tmpCount
tmpBytesRead = tmpBytesRead + tmpByteToRead
Loop
Close FileNum
ReDim Preserve tmpArray(LinesCount)
FileNum = FreeFile
Open ("D:\Temp\test" & CStr(i + 1) & ".txt") For Input As #FileNum
While Not EOF(FileNum)
Line Input #FileNum, tmpArray(x)
If tmpArray(x) <> vbNullString Then
x = x + 1
End If
Wend
Close FileNum
Debug.Print (CStr(Now) & ": Bearbeitung der Datei test" & CStr(i + 1) & _
".txt fertiggestellt!")
Next
ReDim Preserve tmpArray(x - 1)
Debug.Print ("--> " & CStr(UBound(tmpArray) + 1) & " Datensätze im Array" & _
"'tmpArray' (0 - " & CStr(UBound(tmpArray)) & ")") Der Code ließt die Textdatei ein und bestimmt zunächst deren Zeilenanzahl. Aufgrund dessen wird das Array dimensioniert und die Textdatei wird zeilenweise (ohne Leerzeilen und/oder Zeilenumbrüche) ins Array eingelesen.
Dies alles wird in einer Schleife für alle Dateien durchgeführt. Am Ende wird das Array ein letztes Mal redimensioniert, um die korrekte Anzahl der "gefüllten" Zeilen zu bekommen, denn bis dato wurde das Array auf die Gesamtanzahl der Zeilen (inkl. Leerzeilen) dimensioniert.
Vielleicht kannst Du ja damit etwas anfangen - aber wie gesagt... elegant ist das nicht
MfG IRCox |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|