2016-11-11 17 views
0

私は最初の行で読み込んでリストに保存する必要があるcsvファイルを持っています。テキストの一部にカンマがあり、それが必要でないときにフィールドの真ん中で分裂しているだけの問題です。残念ながら、私は内部のデータを変更することはできませんので、そこに滞在する必要があります。私は現在、csvにデータを書き込んでいるため、コンマを使用する代わりに別の文字を使用することもできると考えていました。これが可能なら誰でも知っていますか?私は研究してきましたが、適切な答えを思いついていません。以下は私のコードです:'、'分割を使用せずにcsvファイルの最初の行を読み込んでリストに保存する

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

そこにその自由な.NETのCSVパーサーがたくさんあります引用符で囲まれたフィールド内のカンマを適切に処理します。あなたは1つを使用する必要があります。 [Here](http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader)は私が使ってきた良いものです。 – adv12

+0

2つの解決策があります:区切り文字をテキストに表示されないものに変更するか、または2)カンマを,(たとえば)と符号化して保存し、読み取り時にデコードします。 – ChrisF

+0

@ChrisF、3)実際のCSVパーサーを使用します。つまり、「CSVファイル」は本当にCSVファイルであり、カンマ付きのフィールドは適切に引用されている必要があります。 「CSVファイル」がCSV形式の規則に従わない場合は、あなたの提案が必要な場合があります。 – adv12

答えて

0

ファイルがどのように区切られているかを知る必要があります。私はこのファイルが区切られているので、その代わりに分割されていると思います。

あなたのラインを想定すると

myCSVLineと呼ばれている... IE

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

splitLineは今、カンマでものを含めて、あなたのすべての文字列を持っているでしょう

関連する問題