none
CSV komfortable auslesen RRS feed

  • Frage

  • Hallo, will eine csv erzeugen und auslesen, wie kann ich denn relativ übersichtlich die CSV einlesen, bzw. wie kann ich ohne das Format zu kennen relativ leicht die einträge zwischen den kommas, bzw. semikolons einlesen?
    Montag, 22. November 2010 18:00

Antworten

  • Hallo B.,

        > relativ leicht ... CSV ... einlesen

    Eine wichtige Technik bei CSV Dateien ist auch das Lesen über OleDbConnection. Mögliche Techniken hier das Replacing der nicht gewünschten Trenzeichen durch ein Komma: [Using Oledb to read a .csv with double quotes in it]

     public Form1()
     {
     InitializeComponent();
     DataTable dt = GetTableFromCSV("test.csv"); // Ergebnis steht in dt
     }
    
     private DataTable GetTableFromCSV(string pfad)
     {
     if (!File.Exists(pfad)) 
     throw new FileNotFoundException(@"Die CSV-Datei existiert nicht!", pfad);
     string csv = File.ReadAllText(pfad, Encoding.Default);
     csv = csv.Replace(";", ","); string tmp = "Tmp.csv";
     File.WriteAllText(tmp, csv, Encoding.Default);
     DataTable dataTable = new DataTable();
     OleDbConnectionStringBuilder b = new OleDbConnectionStringBuilder();
     b.Provider = "Microsoft.Jet.OLEDB.4.0";
     b.DataSource = Directory.GetParent(pfad).FullName;
     b["Extended Properties"] = "Text;";
     OleDbConnection con = new OleDbConnection(b.ToString());
     OleDbDataAdapter da = new OleDbDataAdapter(String.Format("select * from [{0}]", tmp), con);
     da.Fill(dataTable); if (File.Exists(tmp)) File.Delete(tmp);
     return dataTable;
     }

    Man kann es dann einfach wie bei einer Datenbank machen. zu berücksichtigen hier ggf. auch die Schema.ini: [Schema.ini File (Text File Driver)]

    oder auch eine sehr einfache Variante:

     public Form1()
     {
      InitializeComponent();
      List<string[]> csvElemente = GetListFromCSV("test.csv");
     }
    
     private List<string[]> GetListFromCSV(string pfad)
     {
      string[] csvZeilen = File.ReadAllLines(fileInfo.FullName, Encoding.Default);
      return csvZeilen.Select(x => x.Split(',', ';')).ToList(); 
     }


    [C# Tutorial - Using The Built In OLEDB CSV Parser | Switch on the Code]
    http://www.switchonthecode.com/tutorials/csharp-tutorial-using-the-built-in-oledb-csv-parser

    Andere CSV-DB-Treiber auch:

    [Textfile Connection String Samples - ConnectionStrings.com]
    http://www.connectionstrings.com/textfile


    Trotzdem gehen natürlich auch viele andere Möglichkeiten:
    http://www.google.de/#hl=de&q=CSV+Read+C%23
    Der Ausdruck "leicht" ist halt relativ.


    ciao Frank
    Montag, 22. November 2010 19:40
  • Hallo Bensen,

    Das Thema CSV wurde vor nicht allzu langer Zeit auch hier behandelt:
    http://social.msdn.microsoft.com/Forums/de-AT/visualcsharpde/thread/9b304ca5-b4bf-45e1-ba16-d0b126affad4

    Wenn Du die CSV-Datei selbst erzeugst ("will eine csv erzeugen und auslesen"), dann müßtest Du doch die verwendeten Feldtrennzeichen kennen, oder?

    Zur Sicherheit: Was die automatische Erkennung der Feldtrennzeichen angeht (solltest Du also gemeint haben "will eine csv erzeugen und [eine andere, fremde] auslesen"), ist das eine einfache Sache, wenn nur Komma bzw. Semikolon als Trennzeichen in Frage kommen: Du versuchst es erst mit dem einen (try) und wenn der Versuch fehlschlägt (catch), versuchst Du's eben mit dem anderen Trennzeichen. Ich würde dazu den CSVDataReader verwenden (www.csvreader.com).

    Gruß
    Marcel

    Dienstag, 23. November 2010 08:56
    Moderator

Alle Antworten