CSVLib

    • Release
    • Closed Source

    Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

      Hallo zusammen,
      ich habe mal wieder eine kleine Lib geschrieben, um ganz einfach CSV-Dateien zu erstellen:

      Name:
      CSVLib

      Funktionen:
      Einfach zu verwenden
      Einträge mit Seperator werden automatisch in Hochkommas gesetzt


      Beispielcode:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports CSVLib
      2. Public Class CSVWriteDemo
      3. Public Sub DEMO()
      4. Dim table As New CSVTable
      5. Dim firstLine As New CSVLine
      6. firstLine.LineFields.Add("Eintrag1")
      7. firstLine.LineFields.Add("Eintrag2")
      8. table.Lines.Add(firstLine)
      9. Dim writer As New CSVWriter("C:\test.csv")
      10. writer.WriteTableAndSaveFile(table)
      11. End Sub
      12. End Class


      Heraus kommt:




      Screenshot:


      Verwendete Programmiersprache und IDE:
      Visual Basic .NET
      Visual Studio 2013 Professional

      Systemanforderungen:
      .NET Framework 4.0

      Download:
      CSVLib.dll (25 KB)

      Lizenz/Weitergabe:
      Closed Source

      Lob und Kritik sowie Verbesserungsvorschläge sind immer willkommen :D
      An Error 404 occurred while loading signature...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Twometer“ () aus folgendem Grund: Update

      Moin,

      Du solltest in Benennungen immer schauen, dass z. B. CSV zu Csv wird, das sind Guidelines.
      Dann ist LineFields ein öffentliches Feld, das ist ungut, denn das sollte eine Property sein, auf Felder soll nur die Klasse selber zugreifen.

      Sollte LineToString zudem nicht lieber in CSVLine implementiert sein? Dann würdest Du nämlich ToString überschreiben und könntest das da implementieren.

      Außerdem solltest Du das Framework runterschrauben...

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Generell ist die Struktur ausbaufähig.

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      ​in Benennungen immer schauen, dass z. B. CSV zu Csv wird

      Wo steht das? CSV ist in dem Fall eine Abkürzung, womit es völlig legitim ist, das alles groß zu schreiben. Macht ja Microsoft auch so: msdn.microsoft.com/de-de/libra…graphy.rsa(v=vs.110).aspx
      Mfg
      Vincent

      VincentTB schrieb:

      Wo steht das?
      msdn.microsoft.com/en-us/library/ms229043(v=vs.110).aspx
      Gleich am Anfang:

      MSDN schrieb:

      The PascalCasing convention, used for all identifiers except parameter names, capitalizes the first character of each word (including acronyms over two letters in length), as shown in the following examples:

      PropertyDescriptor
      HtmlTag

      A special case is made for two-letter acronyms in which both letters are capitalized, as shown in the following identifier:

      IOStream​
      @VincentTB Microsoft hält sich selbst meist nicht dran, das stimmt. ^^
      Siehe Artentus' Beitrag, ist auf jeden Fall so gedacht, darum ist es z. B. auch in ReSharper so als Naming Convention eingetragen.
      In vielen Fällen hält sich Microsoft selber aber auch dran, siehe HttpListener z. B.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Ich würd mir da jetzt nicht groß ins Hemd machen, ob's nun CSV heißt oder Csv. Und auch, ob da ein Feld rumfährt was man lieber als Property sähe - gibts dafür eiglich auch einen wirklichen Grund, ausser den, dasses bei MS iwo inne Guidelines stehen mag?

      aber nochmal zur Lib selbst: Muss man eine ganze Library einbinden, um bisserl CSV zu schreiben?
      Mir ist, als könne man sowas mit einer Methode abhandeln - keine 10 Zeilen

      VB.NET-Quellcode

      1. Imports System.IO
      2. Public Class CSVWriteDemo
      3. Public Sub DEMO()
      4. Dim table As New List(Of List(Of String))
      5. Dim firstLine As New List(Of String)
      6. firstLine.Add("Eintrag1")
      7. firstLine.Add("Eintrag2")
      8. table.Add(firstLine)
      9. WriteCsv(table, "C:\test.csv")
      10. End Sub
      11. Public Sub WriteCsv(ByVal csv As List(Of List(Of String)), ByVal filename As String)
      12. Using wr As New StreamWriter(filename)
      13. For Each line In csv
      14. Dim entries = From e In line Select String.Concat(""""c, e, """")
      15. wr.WriteLine(String.Join(";"c, entries))
      16. Next
      17. End Using
      18. End Sub
      19. End Class

      Artentus schrieb:

      Der HttpListener ist laut Guidelines richtig benannt.

      Habe ich ja gesagt, nicht? :P

      Ist natürlich in eigener Ansicht, ob man es macht, aber wenn es schon Guidelines gibt, würde ich die auch wo es geht befolgen. ^^

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      @ErfinderDesRades: Deine Methode merkt aber nicht, wenn ich in deine Liste ein ";" scheibe! Das heißt, da kommt kein Eintrag mit ";" sondern noch eine Spalte. Die Lib von mir berücksichtigt sowas

      Ich habe jetzt auch ein Update gemacht:
      Das Framework habe ich jetzt runtergeschraubt und die Struktur überarbeitet. Download ist im Startpost.

      LG
      Twometer
      An Error 404 occurred while loading signature...
      Ich habe die Lib nicht getestet.
      Ich werde sie auch nicht testen, sondern weiterhin meine eigenen Methoden verwenden.
      Solange du den Source-Code nicht public machst, habe ich eh kein Vertrauen in das Teil.

      Was mir jedoch auffällt:
      Es fehlt noch eine Property DecimalSeparator.
      --
      If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
      --

      Twometer schrieb:

      Das heißt, da kommt kein Eintrag mit ";" sondern noch eine Spalte.
      Irrtum. Meine Einträge sind alle gequotetd - ein Eintrag kann enthalten, was wolle, mit Ausnahme von ".
      Und auch dieses liesse sich nachbessern:

      VB.NET-Quellcode

      1. Public Sub WriteCsv(ByVal csv As List(Of List(Of String)), ByVal filename As String)
      2. Using wr As New StreamWriter(filename)
      3. For Each line In csv
      4. Dim entries = From e In line Select String.Concat(""""c, e.ToString.Replace("""", """"""), """")
      5. wr.WriteLine(String.Join(";"c, entries))
      6. Next
      7. End Using
      8. End Sub

      Ich fände es praktisch, wenn man jede Zeile in der CSV direkt in eine Objektinstanz serialisieren könnte.

      Für sehr große Tabellen (>10GB; ja, sowas gibt es) könntest du mit einem Stream arbeiten, der Zeilenweise liest. Das könntest du auch gleich so machen, dass man ein IEnumerable<CsvLine> hat, um durch alle iterieren zu können. Das hat den Vorteil, dass man die Tabelle zeilenweise verarbeiten kann, ohne sie komplett in den RAM laden zu müssen.
      Von meinem iPhone gesendet