| |
VB.NET - Ein- und UmsteigerTextdatei editieren | | | Autor: disem | Datum: 26.03.10 19:41 |
| ID278634;Name;1;7;3;4;2;5;6
ID278623;Name2;1;4;3;2;3;5;4
.
.
.
.
.
Ich möchte eine Textdatei Editieren! Es kommen täglich ein paar Einträge dazu (ans Zeilenende) die alten Einträge sollen bestehen bleiben. Wie kann ich das am besten anstellen? Später müsste ich die werte per ID auch wieder abfragen können, aber das müsste ich so hinbekommen.
danke im vorraus | |
Re: Textdatei editieren | | | Autor: disem | Datum: 26.03.10 20:22 |
| An das Dateiende! | |
Re: Textdatei editieren | | | Autor: VB.NET2005 | Datum: 26.03.10 20:40 |
| Meinst du so was:
Dim reader As New System.IO.StreamReader("C:\A.txt")
Dim Writer As New System.IO.StreamWriter("C:\A.txt")
Dim txt As String = reader.ReadToEnd
Writer.Write(txt)
Writer.WriteLine("...")
Writer.Close()
reader.Close() | |
Am Zeilenende anfügen | | | Autor: Manfred X | Datum: 26.03.10 20:41 |
| Hallo!
Schade, Ich dachte Zeilenende! Egal!
Das ist nämlich gomblisiert.
Dateiinhalt lesen mit System.IO.File.ReadAllLines
in ein String-Array. Danach in einer Zeilenschleife
jede einzelne Zeile anhand des Trennzeichens ";" splitten.
Dim lines() As String = _
System.IO.File.ReadAllLines(Pfad der Datei)
Dim fields() As String
for i as integer = 0 to lines.length-1
fields = lines(i).Split(";"c) Zu ändernde Zeilen kannst Du per ID im ersten
Element des aktuellen Splitarray finden.
Zeilen-Index merken.
Um Felder anzuhängen das Splitarray entsprechend der Zahl
der anzuhängenden Einträge per Resize verlängern und
die Einträge reinschreiben.
Dim elementstoadd As Integer = 5
System.Array.Resize(fields, fields.Length + elementstoadd)
Danach mit Join die Zeile wieder aus den getrennten
Elementen zusammenbauen und in das Zeilenarray am
Zeilenindex zurückschreiben.
lines(i) = System.String.Join(";"c, fields)
Das ganze nach Abschluss der Schleife wieder in
der Datei speichern!
System.IO.File.WriteAllLines(Datei-Pfad, lines)
Auf diese Weise lassen sich auch bereits vorhandene Fields
aktualisieren.
MfG
Manfred
Beitrag wurde zuletzt am 26.03.10 um 20:53:18 editiert. | |
Re: Textdatei editieren | | | Autor: Snof | Datum: 26.03.10 20:45 |
| Hallo
Dim FS As New FileStream("...", FileMode.Append)
Dim SW As New StreamWriter(FS)
SW.WriteLine("Neue Zeile")
SW.Close() Also ich würd da erstmal gar nix einlesen. Zumindest nicht, wenn du nur ne zusätzliche Zeile ans Ende setzen willst. Mit FileMode.Append wird automatisch ans Ende geschrieben. | |
Re: Textdatei editieren | | | Autor: disem | Datum: 26.03.10 21:58 |
| Das was ich noch vergessen habe, die ID + der Name werden komplett ausgelesen wenn neue einträge kommen (auch die alten) es sollen aber natürlich nur die neuen gespeichert werden!! Danke für die vielen antworten! Kann im Moment leider nichts testen, bin unterwegs (: Gruß | |
Re: Am Zeilenende anfügen | | | Autor: disem | Datum: 27.03.10 11:06 |
| Fehler 1 Die Variable "i" verbirgt eine Variable in einem einschließenden Block.
Bekomme ich jetzt als Fehlermeldung? Kann man csv Dateien nicht ähnlich wie Datenbanken auslesen? Hätte jetzt ja noch immer das Problem mit mehrfach Einträgen. | |
CSV-Editor | | | Autor: Manfred X | Datum: 27.03.10 22:07 |
| Hallo!
Du kannst mit den oben erwähnten Methoden
relativ einfach eine Datatable erweitern, diese dann an
ein Datagridview binden und beliebig den Dateiinhalt
editieren, Zeilen und Spalten anfügen usw.
Du kannst die Spalten im Datagridview auch sortieren
lassen und doppelte Einträge einfach markieren und löschen.
Hier ein einfaches - GROB getestetes Demo-Beispiel für
eine derartige Erweiterung der Datatable.
Dem Projekt eine Klasse hinzufügen und den Code eintragen:
Option Strict On : Option Explicit On : Option Infer Off
Public Class cDataTableCSV
Inherits System.Data.DataTable
Public Function LoadFile(ByVal filename As String, _
ByVal textencoder As System.Text.Encoding, _
Optional ByVal FeldTrennzeichen As Char = ";"c, _
Optional ByVal ZeilenTrennzeichen As String = _
Microsoft.VisualBasic.vbNewLine) As Boolean
Me.Rows.Clear() : Me.Columns.Clear()
Try
'Zeilen lesen
Dim lines() As String = _
System.IO.File.ReadAllLines(filename, textencoder)
'Maximale Feldzahl pro Zeile
Dim fields() As String, maxfields As Integer = 0
For i As Integer = 0 To lines.GetUpperBound(0)
If lines(i) <> String.Empty Then
fields = lines(i).Split(FeldTrennzeichen)
maxfields = System.Math.Max(maxfields, fields.Length)
End If
Next i
If maxfields < 1 Then Return False
'Spalten für Felder erstellen
For i As Integer = 0 To maxfields - 1
Me.Columns.Add("SP_" + CStr(i), GetType(String))
'Einige Standardeigenschaften der Spalten
Me.Columns(i).AllowDBNull = True
Me.Columns(i).DefaultValue = String.Empty
Me.Columns(i).ReadOnly = False
Next i
'Datatable: Zeilen füllen
Dim r As System.Data.DataRow
For i As Integer = 0 To lines.GetUpperBound(0)
If lines(i) <> String.Empty Then
fields = lines(i).Split(FeldTrennzeichen)
System.Array.Resize(fields, maxfields)
r = Me.NewRow
For k As Integer = 0 To maxfields - 1
If String.IsNullOrEmpty(fields(k)) Then
r(k) = String.Empty
Else
r(k) = fields(k).Trim
End If
Next k 'Felderschleife
Me.Rows.Add(r)
End If
Next i
Return Me.Rows.Count > 0
Catch ex As System.Exception
Return False
End Try
End Function
Public Function SaveFile _
(ByVal Filename As String, ByVal Feldtrennzeichen As Char) As Boolean
If Me.Rows.Count < 1 Then Return False
Try
Dim lines(Me.Rows.Count - 1) As String
Dim fields(Me.Columns.Count - 1) As String
For i As Integer = 0 To Me.Rows.Count - 1
'Felder aus der Table zusammenstellen
For k As Integer = 0 To Me.Columns.Count - 1
fields(k) = CType(Me.Rows(i).Item(k), String)
Next k
'Felder zusammenfügen
lines(i) = System.String.Join(Feldtrennzeichen, fields)
'Leere Spalten am Zeilenende entfernen
While lines(i).EndsWith(Feldtrennzeichen)
lines(i) = lines(i).Substring(0, lines(i).Length - 1)
End While
Next i
'Datei füllen
System.IO.File.WriteAllLines(Filename, lines)
Return True
Catch ex As System.Exception
Return False
End Try
End Function
Public Sub AddColumn()
Dim k As Integer = Me.Columns.Count
Dim cn As String = "SP_" & CStr(k)
Me.Columns.Add(cn, GetType(String))
For i As Integer = 0 To Me.Rows.Count - 1
Me.Rows(i).Item(k) = String.Empty
Next i
End Sub
End Class Verwendung:
Dim dx as cDataTableCSV 'am besten formular-global
dx = New cDataTableCSV
If Not dx.LoadFile(Dateipfad, System.Text.Encoding.Default) Then Stop
DataGridView1.DataSource = dx
Um eine weitere Spalte anzufügen:
dx.AddColumn
Weitere Zeilen können einfach im DataGrid angefügt werden.
Alle Änderungen werden sofort in die Datatable eingetragen.
Um die (editierten) Daten in der Table zu speichern ...
If Not dx.SaveFile(Datei-Pfad) Then Stop
Beitrag wurde zuletzt am 27.03.10 um 22:13:09 editiert. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2024 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
|
|