Werte aus CSV lesen und in neue Datei speichern

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    Werte aus CSV lesen und in neue Datei speichern

    Hi,

    ich habe folgende CSV Datei:
    nummerprojectzeiteinheitbeginnende
    17011850295,25HOURS12:0017:00
    18051851244HOURS08:0016:00


    Ich möchte mittels vb.net oder c#, die einzelnen Werte Zeile für Zeile auslesen und in ein bestimmtes neues Format/Reihenfolge abspeichern.

    Also so in etwa um es zu verdeutlichen:

    value1(immer gleich)projectnummerzeiteinheitvalue2(immer gleich)
    V03185029
    1701
    5,25
    HOURS
    J2
    V03185124
    1805
    4
    HOURS
    J2

    Habe schon mehrere Ansätze versucht und gegoogelt aber bin bisher nicht auf eine brauchbare Lösung gekommen.
    Ich bin auf diesem Gebiet auch ein kompletter Anfänger :( , daher würde ich mich über eine Antwort freuen!

    LG Raffael


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo erstmal,

    ich sehe noch keine Frage. CSV Dateien einlesen und schreiben kann man wunderbar mit dem StreamReader bzw. StreanWriter. Da kann man Zeile für Zeile einlesen und dann diese umformatieren. Da eine CSV Datei eine durch ein Trennzeichen separierte Datei ist, bietet sich hier pro Zeile an die Werte zu spliten und die Einzelteile wie gewünscht wieder zusammenzusetzen.

    Was genau hast Du denn bis jetzt programmiert/getan?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo,

    danke für die Antwort.

    Bisher habe ich nur eher einfach Grafische Anwendungen erstellt.
    Das mit dem StreamReader hab ich mehrmals versucht aber nie so wirklich geschafft.

    Meine Frage liegt daher eben genau wie ich z.B. mittels StreamReader meine CSV Datei Zeile für Zeile auslesen kann und offensichtlich spliten kann.
    Mein Grundsätzliches Problem ist hier der Ansatz, also wie ich so etwas anfange / mache.

    LG Raffael
    Grob...
    Eine Beispielroutine die man abändern und aufrufen könnte.

    VB.NET-Quellcode

    1. Private Sub FormatiereUm()
    2. Using ofd As New OpenFileDialog
    3. Using sfd As New SaveFileDialog
    4. 'Abfragen wo die Ursprungsdatei liegt. Wenn auf Abbruch gedrückt wird, beenden der Routine
    5. If ofd.ShowDialog = DialogResult.Cancel Then Return
    6. 'Abfragen wo die neue Datei liegt. Wenn auf Abbruch gedrückt wird, beenden der Routine
    7. If sfd.ShowDialog = DialogResult.Cancel Then Return
    8. Using sr As New IO.StreamReader(ofd.FileName)
    9. Using sw As New IO.StreamWriter(sfd.FileName)
    10. 'CSV-Datei einlesen bis am Ende angekommen
    11. Do Until sr.EndOfStream
    12. Dim line = sr.ReadLine.Split(";"c)
    13. 'schreiben der neuen Zeile. line enthält die einzelnen "Spalten"
    14. 'der eingelesenen Datei. Das ganze ist 0-Basiert. Also erster Eintrag
    15. 'hat den Index 0.
    16. 'Das Beispiel gibt aus "Test;Inalt Spalte 1;Inhalt Spalte2;Test2"
    17. sw.WriteLine("Test;" & line(0) & ";" & line(1) & ";Test2")
    18. Loop
    19. End Using 'Ende sw StreamWriter
    20. End Using 'Ende sr StreamReader
    21. End Using 'Ende sfd SaveFileDialog
    22. End Using 'Ende ofd OpenFileDialog
    23. End Sub
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    der ansatz ist, dass du im ObjektBrowser erstmal guckst, was das ist, ein StreamReader, und welche Methoden er anbietet.
    Falls du den OB noch garnet kennst, gugge hier:
    VisualStudio richtig nutzen (Google ist nicht deine Mami)

    Da sollte dir ins Auge fallen, wie du eine Datei zeilenweise einlesen kannst - ansonsten poste Foto von deim OB - wenn man darin was nicht findet, liegts meist an ungünstigen Einstellungen.
    (obwohl, wie man ihn günstig einstellt, ist in dem Tut ja auch verlinkt)
    Hi,

    danke nochmals für die ganzen Antworten,
    ich konnte mein Problem mittlerweile durch weiteres suchen im Netz lösen.

    Habe das ganze mit einem StreamReader und einer while schleife gelöst. Mein Problem war eigentlich der StreamReader.
    Ich habe den vor Jahren schon mal genutzt, aber hatte da was ganz anderes im Kopf, was die Funktionsweise angeht.

    Daher hat's ein bisschen gedauert bei mir ihn zu verwenden^^.

    Eine andere Frage ist mir aber dennoch eingefallen und zwar habe ich in meiner schleife auch eine If Abfrage, da ich gewisse Zeilen mit gewissen Werten einfach überspringen möchte. Kann man mehrere z.B. Zahlen in einer If schleife ausschließen, ohne eine zu lange If abfrage zubekommen.

    Hier mal vielleicht ein Beispiel um das ganze zu veranschaulichen:
    Meine If Abfrage aktuell:

    Quellcode

    1. if (Convert.ToInt32(_values[2].Substring(1, 2)) != 75 && Convert.ToInt32(_values[2].Substring(1, 2)) != 79 )


    Ich filtere alle Zeilen die, in einer bestimmten Spalte, an einer bestimmten Stelle 75 oder 79 stehen haben, raus.

    Mein frage ist jetzt, muss ich immer über && eine weitere Zahl angeben oder gibt es auch die Möglichkeit einfach != 75,79,85 etc. zusagen?
    Ich müsste nämlich mehrere Zahlen ausschließen und mit && wird meine If Anfrage ein wenig unübersichtlich.

    LG Raffael