関連 http://qiita.com/7of9/items/076cf5aaff7095bb876d
関連 http://qiita.com/7of9/items/fa852a99ccfabc112690
在庫表示システム。
About:の項目にカンマを含む文字列を使いたい。
v0.1 > 失敗
C#でコードを書いてみた。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
string line = "\"AAA,AAA\",BBB,CCC,DDD";
Console.WriteLine(line);
string [] elements = line.Split(',');
foreach(string elmnt in elements) {
Console.WriteLine(elmnt);
}
}
}
lineはEXCELで1セル内にAAA,AAAと入れたもの(下記)をcsv出力した時の文字列。
結果
"AAA,AAA",BBB,CCC,DDD
"AAA
AAA"
BBB
CCC
DDD
やはりパースで失敗して、AAA,AAAが2つの項目となる。
v0.2 > 成功
stackoverflow
にそれらしいコードがあった。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions; // for Regex
public class Program
{
public static string[] SplitCSV(string input)
{
Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
List<string> list = new List<string>();
string curr = null;
foreach (Match match in csvSplit.Matches(input))
{
curr = match.Value;
if (0 == curr.Length)
{
list.Add("");
}
list.Add(curr.TrimStart(','));
}
return list.ToArray<string>();
}
public static void Main()
{
string line = "\"AAA,AAA\",BBB,CCC,DDD";
Console.WriteLine(line);
string [] elements = SplitCSV(line);
foreach(string elmnt in elements) {
Console.WriteLine(elmnt);
}
}
}
結果
"AAA,AAA",BBB,CCC,DDD
"AAA,AAA"
BBB
CCC
DDD
成功。
あとは前後のダブルクォーテーションを消せば良さそう。