当社では、CSV ファイルを提案してくれるベンダーから配信フィードを受け取ります。ただし、テキスト フィールド内の引用文字をエスケープできないため、いくつかの行が無視されます。テキスト フィールド パーサーを使用します。
不良行の例:
"CABLES TO GO"、"87029"、"5.0200"、"47"、"757120870296"、"87029"、"WP SGL ALUM 1 1/2" グロメット"
対応するコード スニペットは次のとおりです。
private static IEnumerable<string> ParseHelper(String line, int lineRead, Encoding enc)
{
MemoryStream mem = new MemoryStream(enc.GetBytes(line));
TextFieldParser readerTemp = new TextFieldParser(mem, enc) {CommentTokens = new[] {"#"}};
readerTemp.SetDelimiters(new[] { "," });
readerTemp.HasFieldsEnclosedInQuotes = true;
readerTemp.TextFieldType = FieldType.Delimited;
readerTemp.TrimWhiteSpace = true;
try
{
var items = readerTemp.ReadFields();
return items;
}
catch (MalformedLineException ex)
{
throw new MalformedLineException(String.Format(
"Line {0} is not valid and will be skipped: {1}\r\n{2}",
lineRead, readerTemp.ErrorLine, ex));
}
}
また、このベンダーは、ソース ファイルを変更してこれらの引用符をエスケープすることができません。このようなこれらの行の最善の回避策は何ですか?