| 

.NET C# Java Javascript Exception

2
Hallo,

wie kann man eine >250 MB csv Datei in 100er schritten einlesen "Streamen"
Code vba .net 2010:

Dim sReader As New StreamReader("C:\Users\Public\Projekte_net_2010\Reader_csv\999\DATANORM_50.999")
Dim Record() As String

DataGridView1.Columns.Add("Feld1", "Feld1")
DataGridView1.Columns.Add("Feld2", "Feld2")
DataGridView1.Columns.Add("Feld3", "Feld3")
DataGridView1.Columns.Add("Feld4", "Feld4")
DataGridView1.Columns.Add("Feld5", "Feld5")
DataGridView1.Columns.Add("Feld6", "Feld6")
DataGridView1.Columns.Add("Feld7", "Feld7")
DataGridView1.Columns.Add("Feld8", "Feld8")
DataGridView1.Columns.Add("Feld9", "Feld9")
DataGridView1.Columns.Add("Feld10", "Feld10")


While sReader.Peek() <> -1
Record = sReader.ReadLine().Split(";")
DataGridView1.Rows.Add(Record)
'#### Progressbar
Me.ProgressBar1.Minimum = 0
Me.ProgressBar1.Maximum = sReader.BaseStream.Length
Me.ProgressBar1.Value = sReader.BaseStream.Position
'Me.ProgressBar1.Value = sReader.ToString.Length.ToString
Me.ProgressBar1.Value = sReader.BaseStream.Position
Me.Label2.Text = sReader.BaseStream.Position
End While

mfg. Thomas Meier
29.03.2011
tsmeier 51 1 3
4 Antworten
1
StreamReader - Codepage 850
--------------------------
StreamReader("C:\....\999\DATANORM.999", Encoding.GetEncoding(850))

Umlaute werden gelesen...

mfg
Thomas Meier
29.03.2011
tsmeier 51 1 3
0
Zählvariable definieren, bei jedem ReadLine um eins erhöhen, wenn durch 100 restlos teilbar dann sind genau 100 gelesen worden.

Um zum Beispiel den ProgressBar nur alle 100 Sätze upzudaten, würde ich die Zählvariable in der Schleife VOR dem ReadLine inkrementieren, und NACH dem ReadLine
die Abfrage machen.

Dim sReader As New StreamReader("C:\Users\Public\Projekte_net_2010\Reader_csv\999\DATANORM_50.999", Encoding.GetEncoding(850))
Dim Record() As String
Dim lngCount As Long

DataGridView1.Columns.Add("Feld1", "Feld1")
DataGridView1.Columns.Add("Feld2", "Feld2")
DataGridView1.Columns.Add("Feld3", "Feld3")
DataGridView1.Columns.Add("Feld4", "Feld4")
DataGridView1.Columns.Add("Feld5", "Feld5")
DataGridView1.Columns.Add("Feld6", "Feld6")
DataGridView1.Columns.Add("Feld7", "Feld7")
DataGridView1.Columns.Add("Feld8", "Feld8")
DataGridView1.Columns.Add("Feld9", "Feld9")
DataGridView1.Columns.Add("Feld10", "Feld10")

While sReader.Peek() <> -1
lngCount = lngCount + 1
Record = sReader.ReadLine().Split(";")
DataGridView1.Rows.Add(Record)
if (lngCount mod 100) = 0 Then
' #### Progressbar //'
Me.ProgressBar1.Minimum = 0
Me.ProgressBar1.Maximum = sReader.BaseStream.Length
Me.ProgressBar1.Value = sReader.BaseStream.Position
' Me.ProgressBar1.Value = sReader.ToString.Length.ToString //'
Me.ProgressBar1.Value = sReader.BaseStream.Position
Me.Label2.Text = sReader.BaseStream.Position
end if
End While
30.03.2011
nabuchodonossor 1,3k 5
liest der StreamReader dann aber nicht jede einzelne Zeile von der Festplatte? das will doch der OP gerade vermeiden, oder?
pinchbeck 30.03.2011
das hat er auch schon vorher gemacht, aber bei jeder zeile den progress bar aktualisiert, und das kostet natürlich auch zeit.
nabuchodonossor 31.03.2011
0
Hallo,
das 100er Zeilen von csv einlesen wäre sinnvoll da die csv Dateigröße <120 MB sehr groß ist... also man sollte verhindern das die ganze Datei csv geladen wird sondern immer 100er weise gelesen gestreamt wird beim Klicken des Buttons?

Hat einer eine Idee wie man das bewerkstelligen kann....

Bei SQL gibts so etwas ähnliches im Connector....

mfg.
Thomas Meier
30.03.2011
tsmeier 51 1 3
0
das geht natürlich (fast) genauso.

allerdings: das ganze muss in eine klasse (ja, ich weiss, es ginge auch noch auf die altmodische prozedurale art).

du baust einen konstruktor mit drei parametern: dateiname, zeichensatzcodierung UND EINE REFERENZ AUF DAS DATAGRID.

eine methode (z.b. getnextrecords (mit parameter für die anzahl der gewünschten), in dieser zählst du die klassenvariable für den recordcount einfach wie in meinem beispiel hoch und fügst deine gelesenen zeilen einfach in das datagrid.

und eine close methode wäre halt auch nicht schlecht.
31.03.2011
nabuchodonossor 1,3k 5

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH