次の形式の行を含むタブ区切りのテキスト ファイルがあります。
I000001 \t I000002 \t "何とか何とか何とか。何とか何とか何とか"
すべてのタブで各行を分割しようとしているので、上記の行は 3 つの部分に分割されます
スペースや引用符がない場合は各行を希望どおりに分割できましたが、スペースがある場合は苦労しています。
上記のような行で試したのは次のとおりです。
var x = from lines in data
.Where(l => !string.IsNullOrEmpty(l))
.Select(l => l.Split('\t'))
select new
{
A = lines[0].Trim(),
B = lines[1].Trim(),
C = lines[2].Trim()
};
上記は、インデックス [ 0 ]、[ 1 ]、[ 2 ] を持つ配列を生成します。各インデックスには、上記の文字列で構成される 3 つのメンバーがあります (下の画像を参照)。3 つのメンバーを持つインデックスを 1 つだけ持つ必要があります。
配列の最初の項目に 3 つの要素があることに注意してください。配列には、最初の項目の下にさらに 2 つの項目があります。どちらにも 3 つの要素があり、これらの 3 つの要素には、二重引用符で囲まれた残りの文字列が含まれています。
解決:
選択した回答によると、引用符内の文に余分なタブがあり、配列に追加の項目が追加されました。これを解決するために、この回答から適応した正規表現を使用しました:
line = Regex.Replace(line, @"""[^""]+""", m => m.Value.Replace('\t', ' '));