vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Textdatei 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textdatei editieren 
Autor: ModeratorDaveS (Moderator)
Datum: 26.03.10 19:45

Ans Zeilenende, oder Dateiende??

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textdatei editieren 
Autor: disem
Datum: 26.03.10 20:22

An das Dateiende!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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()
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textdatei editieren 
Autor: ModeratorDaveS (Moderator)
Datum: 26.03.10 20:53

My.Computer.FileSystem.WriteAllText(pfad, "Neue zeile", True)

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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ß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textdatei editieren 
Autor: SupiFlix
Datum: 27.03.10 12:04

Nenn den i doch zu i2 um?

"iPod oder EiPott?"

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-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