Я читаю данные буфера обмена, поступающие из Excel, используя
var stream = (System.IO.Stream) ( Forms.Clipboard.GetDataObject() ).GetData( Forms.DataFormats.CommaSeparatedValue );
* * 1004
но, к сожалению, excel передает текст ячейки вместо значений ячейки. Когда ячейки используют специальное форматирование (например, разделитель тысяч), данные буфера обмена для серии ячеек в столбцах выглядят следующим образом:
1,234,123.00 2,345.00 342.00 12,345.00
сохраняется как это:
\" 1,234,123.00 \",\" 2,345.00 \", 342.00 ,\" 12,345.00 \"
когда я действительно хочу это:
1234123.00, 2345.00, 342.00, 12345.00
Ранее я использовал функцию clipData.Split(new string[] { "," }, StringSllitOptions.None))
, чтобы превратить данные моего буфера обмена CSV в серию ячеек, но это не удается, если экранированный текст содержит запятые.
Я спрашиваю, может ли кто-нибудь придумать способ разбить эту строку на набор ячеек, игнорируя запятые, экранированные в битах \"
, поскольку именно так Excel выбирает экранирование ячеек, содержащих запятые.
Короче, как я могу превратить одну строку, содержащую это:
\" 1,234,123.00 \",\" 2,345.00 \", 342.00 ,\" 12,345.00 \"
в массив строк, содержащих это:
{ "1,234,123.00", "2,345.00", "342.00", "12,345.00" }
Не нарушая мою способность разбирать простую строку, разделенную запятой.
***** редактировать ***
Дополнительный вопрос (сформулированный как DFA) здесь: Разделить строку на основе того, когда детерминированные конечные автоматы достигают конечного состояния?