2016-11-11 3 views
0

Ich habe eine CSV-Datei, die ich in der ersten Zeile lesen und in einer Liste speichern muss. Das Problem ist nur, dass in einem Teil des Textes Kommas stehen und es sich in der Mitte eines Feldes aufteilt, wenn ich es nicht brauche. Leider kann ich die Daten im Inneren nicht ändern, also was dort bleiben muss. Ich schreibe derzeit auch die Daten in CSV, so dass ich dachte, vielleicht anstelle eines Kommas kann ich einen anderen Charakter verwenden. Weiß jemand, ob das möglich ist? Ich habe recherchiert, komme aber nicht auf eine richtige Antwort. Hier ist mein Code unten:Lesen in der ersten Zeile der CSV-Datei und Speichern in eine Liste ohne ',' split

using System; 
using System.CodeDom; 
using System.IO; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

namespace TestJSON 
{ 
    class Program 
    { 

    static void Main() 
    { 
      var data = JsonConvert.DeserializeObject<dynamic>(File.ReadAllText(
          @"C:\Users\nphillips\workspace\2016R23\UITestAutomation\SeedDataGenerator\src\staticresources\seeddata.resource")); 
      string fileName = "";    
      var bundles = data.RecordSetBundles; 

      foreach (var bundle in bundles) 
      { 
       var records = bundle.Records; 
       foreach (var record in records) 
       { 
        var test = record.attributes; 
        foreach (var testagain in test) 
        { 
         // Getting the object Name Ex. Location, Item, etc. 
         var jprop = testagain as JProperty; 
         if (jprop != null) 
         { 
          fileName = jprop.First.ToString().Split('_')[2]+ ".csv"; 
         } 
         break; 
        } 
        string header = ""; 
        string value = ""; 
        foreach (var child in record) 
        {      
         var theChild = child as JProperty; 
         if (theChild != null && !theChild.Name.Equals("attributes")) 
         { 
          header += child.Name + ","; 
          value += child.Value.ToString() + ","; 
         } 
        } 
        value += "+" + Environment.NewLine; 

        if (!File.Exists(fileName)) 
        { 
         header += "+" + Environment.NewLine; 
         File.WriteAllText(fileName, header); 
        } 
        else 
        { 
         // Need to read in here 
         var readCSV = new StreamReader(fileName); 
         var splits = readCSV.ReadLine(); 

        } 
        File.AppendAllText(fileName, value); 
       } 
      } 
     } 
    } 
} 
+0

Es gibt eine Menge freier .NET CSV-Parser aus, dass es Behandle Kommas innerhalb von zitierten Feldern richtig. Du solltest eins benutzen. [Hier] (http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader) ist eine gute, die ich benutzt habe. – adv12

+0

Sie haben zwei Lösungen 1) ändern Sie Ihre Trennzeichen zu etwas, das nicht im Text oder 2) Codieren Sie Ihre Kommas als , (sagen wir) vor dem Speichern und Decodieren beim Lesen. – ChrisF

+0

@ChrisF, 3) Verwenden Sie einen tatsächlichen CSV-Parser. Das heißt, vorausgesetzt, dass die "CSV-Datei" wirklich eine CSV-Datei ist und Felder mit Kommas korrekt zitiert werden. Wenn die "CSV-Datei" nicht den Regeln des CSV-Formats entspricht, sind möglicherweise Ihre Vorschläge erforderlich. – adv12

Antwort

0

Sie müssen wissen, wie die Datei begrenzt ist. Ich würde vermuten, dass diese Datei tabulatorgetrennt ist, also teilen Sie sie stattdessen auf.

Ihre Linie Angenommen wird myCSVLine genannt ... IE

string seperator = "\t"; 
string[] splitLine = myCSVLine.Split(seperator.ToCharArray()); 

splitLine müssten jetzt alle Ihre Strings, darunter auch solche mit Komma

Verwandte Themen