vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen) 
Autor: crossweb
Datum: 08.03.06 13:04

Hallo zusammen,

ich habe folgendes Problem:

Ich habe eine ASCII Datei mit ca. 1Million Zeilen, aus welcher ich einige definierte Einträge in einer Anwendung analysieren bzw. weiterverabeiten möchte.

Zuert einmal ein Extrakt dieser Datei:

$TITLE   =                                                                    
$SUBTITLE=                                                                    
$LABEL   =                                                                   
$ELEMENT FORCES                                                                
$REAL OUTPUT                                                                   
$SUBCASE ID =           1                                                      
$ELEMENT TYPE =          34  BAR                                               
  22800110              4.811698E+03      0.000000E+00     -1.747397E+05       
-CONT-                  0.000000E+00      1.900003E+03     -0.000000E+00      
-CONT-                  3.300154E+04     -0.000000E+00                        
  22800210             -1.241476E+05      0.000000E+00     -9.908633E+04      
-CONT-                  0.000000E+00     -1.327251E+02     -0.000000E+00      
-CONT-                  3.356823E+04     -0.000000E+00                        
  22800310             -1.357281E+05      0.000000E+00     -6.437919E+04      
-CONT-                  0.000000E+00     -3.777034E+02     -0.000000E+00      
-CONT-                  3.315782E+04     -0.000000E+00                        
  22800410             -1.276038E+05      0.000000E+00     -3.908866E+04      
 
.... u.s.w.
Die Datei besteht aus ca. 200 solcher Blöcke, die jeweils mit einem solchen Header beginnen. Für mich wichtig sind nur Blöcke mit z.B. folgender Kennungskombination (jweiweils für unterschiedliche SUBCASES "i" ):
$SUBCASE ID =           i                                                      
$ELEMENT TYPE =          34  BAR
Anschließend suche ich nach mehreren ID's im nachfolgenden Block um dort die hinterlegeten Daten auszulesen.


Um die Datei zu öffnen habe ich bisher mehrere Ansätze verwendet. Generell hatte ich überlegt, die Datei zeilenweise in String Array zu packen und dann über .IndexOf Methode nach meinen Schlüsselzeilen / Ids zu suchen.

Zuert habe ich es über die StreamReader Klasse versucht. Anbei der Code (nur bis zum fertigen String Array):

        Dim datei As New System.IO.StreamReader("Dateiname.txt") 'wird geöffnet
        Dim tmpstr As string = datei.ReadToEnd 'Einlesen in eine String Variable	
        datei.Close()
        datei = Nothing
        Dim Str() as string
        Str = Split(tmpstr, Chr(10)) 'Umbrechen auf String Array        
        tmpstr = Nothing
	'.....Suchen in String Array
Hierbei bekomme ich immer eine out of memory exeption bzw. versucht er zuert die größe der Auslagerungsdatei anzupassen. Außerdem dauert es Ewigkeiten.....


Zweiter Ansatz ist das Zeilenweise Verarbeiten der Datei ... dauert nur auch extrem lange.....


Meine letzte Idee war nun das binäre öffnen der Datei in folgender Weise:

	Dim br As New IO.BinaryReader(New IO.StreamReader("Dateiname.txt").BaseStream)
        Dim b As Byte() = br.ReadBytes(br.BaseStream.Length - 1)
        Dim tmpstr as string = System.Text.Encoding.Default.GetString(b)
        br.Close()
	br = Nothing	
	Dim Str() as string
        Str = Split(tmpstr, Chr(10)) 'Umbrechen auf String Array        
        tmpstr = Nothing
Allerdings dauert es auch ewig bzw. ist das ganze so nicht handlebar.

Jetzt (endlich) zu meiner Frage:

Wie kann ich solche Dateien am schnellsten verarbeiten bzw. immer einzelne Blöcke bis zu einem bestimmten Schlüsselwort einlesen und verarbeiten. Muss ich die Datei überhaut komplett in ein String array oder etwas vergleichbares einlesen, oder kann ich auch direkt in der geöffneten Datei nach Schlüsselworten (Zeilen) suchen und entsprechend navigrieren.

Vielen Dank schon mal für Eure Hilfe....


THOMAS
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)2.658crossweb08.03.06 13:04
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.982ModeratorFZelle08.03.06 14:20
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.920Moderatorralf_oop08.03.06 14:44
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.971crossweb08.03.06 14:56
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.946Vento08.03.06 15:08
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.995crossweb08.03.06 16:04
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.967ModeratorFZelle08.03.06 16:56
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)1.974crossweb09.03.06 09:29
Re: Verarbeiten großer Text Dateien (100MB bzw. 1Mio Zeilen)2.016ModeratorFZelle09.03.06 09:42
Re: Arraylist und IndexOf2.137crossweb09.03.06 14:29
Re: Arraylist und IndexOf1.935ModeratorFZelle09.03.06 17:08
Re: Arraylist und IndexOf2.020crossweb10.03.06 09:38
Re: Arraylist und IndexOf1.945ModeratorFZelle10.03.06 12:21
Re: Arraylist und IndexOf1.936crossweb10.03.06 13:35
Große ASCII Dateien lesen (ca. 3GB und > 30Mio Zeilen)2.022crossweb26.04.06 13:18

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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