私はcsvパーサー用に次のコードを持っています
string input = wholeFile;
IList<string> wholeFileArray = new List<string>();
int start = 0;
bool inQuotes = false;
for (int current = 0; current < input.Length; current++)
{
// test each character before and after to determine if it is a valid quote, or a quote within a quote.
int test_backward = (current == 0 ? 1 : current) - 1;
int test_forward = (current == input.Length - 1 ? input.Length - 2 : current) + 1;
bool valid_quote = input[test_backward] == ',' || input[test_forward] == ',' || input[test_forward] == '\r';
if (input[current] == '\"') // toggle state
{
inQuotes = !inQuotes;
}
bool atLastChar = (current == input.Length - 1);
if (atLastChar)
{
wholeFileArray.Add(input.Substring(start));
}
else if (input[current] == ',' && !inQuotes)
{
wholeFileArray.Add(input.Substring(start, current - start));
start = current + 1;
}
}
文字列を取り、そのような二重引用符文字列内にない,
場合は分割します。,
"something,foobar"
私の問題は、私の文字列の悪党"
が私のプロセス全体を台無しにしていることです.
例:"bla bla","bla bla2",3,4,"5","bla"bla","End"
結果
- 「ブラブラ」
- 「ブラブラ2」
- 3
- 4
- 「5」
- "bla"bla","End"
不正を許可するようにコードを変更するにはどうすればよいですか"
「有効な」終了引用符の後には常にコンマ (,) またはコントロール ラインフィードが続きます
追加 これで修正されたようです
// test each character before and after to determine if it is a valid quote, or a quote within a quote.
int test_backward = (current == 0 ? 1 : current) - 1;
int test_forward = (current == input.Length - 1 ? input.Length - 2 : current) + 1;
bool valid_quote = input[test_backward] == ',' || input[test_forward] == ',' || input[test_forward] == '\r';