Re: CSV durchsuchen und Inhalt der Zeile/Spalte wiedergeben | |
|
Autor: Manfred X |
Datum: 16.09.15 14:53 |
|
Willst Du für die Anzeige eine Blätter-Funktion???
Statt dessen wäre vielleicht ein gebundenes DatagridView geeignet:
(Der Filterstring wird vor dem Laden in die Textbox eingetragen.)
Public Class frmCSV
Dim WithEvents btn_In As New Button With _
{.Parent = Me, .Text = "CSV-IN"}
Dim WithEvents btn_out As New Button With _
{.Parent = Me, .Text = "CSV_out", .Left = 150}
Dim ofd As New OpenFileDialog, sfd As New SaveFileDialog
Dim tboFilter As New TextBox With _
{.Parent = Me, .Top = 50, .Width = 400}
Dim dt As New DataTable, bs As New BindingSource
Dim dgv As New DataGridView With {.Parent = Me, _
.Top = 100, .Width = 400, .Height = 400, _
.AllowUserToAddRows = False, .DataSource = bs}
Dim FileName_In As String = "", filename_out As String = ""
Private Sub frmCSV_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Width = 420 : Me.Height = 550
dt.Columns.Add("Spalte3") : dt.Columns.Add("Spalte5")
End Sub
Private Sub btn_In_Click(sender As Object, _
e As System.EventArgs) Handles btn_In.Click
With ofd
.Filter = "CSV|*csv"
.CheckFileExists = True
.Multiselect = False
If .ShowDialog = _
Windows.Forms.DialogResult.Cancel Then Exit Sub
FileName_In = .FileName
bs.DataSource = Nothing
dt.Rows.Clear()
Dim lines() As String = IO.File.ReadAllLines(.FileName)
For i As Integer = 0 To lines.Length - 1
Dim fields As New List(Of String)(lines(i).Split(";"c))
If String.IsNullOrEmpty(tboFilter.Text) OrElse _
fields.Contains(tboFilter.Text) Then
If fields.Count >= 5 Then
dt.Rows.Add(fields(2), fields(4))
End If
End If
Next i
bs.DataSource = dt
End With
End Sub
Private Sub btn_out_Click(sender As Object, _
e As System.EventArgs) Handles btn_out.Click
Const linesperfile As Integer = 300 'max. Zeilen/Ausgabedatei
Dim filecounter As Integer = 0
Dim linecounter As Integer = 0
Dim toOpen As Boolean = True
With sfd
.Filter = "CSV|*.csv"
.DefaultExt = ".csv"
If .ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
filename_out = .FileName.Substring(0, .FileName.Length - 4)
End With
Dim sr As IO.StreamWriter = Nothing
If IO.File.Exists(FileName_In) Then
For Each zeile As String In IO.File.ReadAllLines(FileName_In)
Dim fields As New List(Of String)(zeile.Split(";"c))
If String.IsNullOrEmpty(tboFilter.Text) OrElse _
fields.Contains(tboFilter.Text) Then
If toOpen Then
filecounter += 1
sr = New IO.StreamWriter(filename_out & "_" & _
filecounter.ToString & ".csv")
toOpen = False
End If
If fields.Count >= 5 Then
sr.WriteLine(fields(2) & ";" & fields(4))
linecounter += 1
If linecounter = linesperfile Then
sr.Close()
linecounter = 0
toopen = True
End If
End If
End If
Next zeile
sr.Close()
End If
End Sub
End Class
Beitrag wurde zuletzt am 16.09.15 um 15:09:30 editiert. |
|