Расщепление на уникального персонажа - PullRequest
7 голосов
/ 21 января 2011

Я хочу построить список через запятую, чтобы потом разделить запятую, чтобы получить массив значений. Однако значения могут содержать запятую. На самом деле, они могут содержать любой обычный символ клавиатуры (они предоставляются пользователем). Какова хорошая стратегия определения персонажа, который, как вы уверены, не столкнется со значениями?

В случае, если это имеет значение в зависимости от языка, я создаю разделенный "некоторый символ" список в C # и отправляю его в браузер для разделения на javascript.

Ответы [ 7 ]

3 голосов
/ 21 января 2011

Если JavaScript потребляет список, почему бы не отправить его в виде массива JavaScript?У него уже есть надежный и надежный метод представления списка и экранирования символов.

["Value 1", "Value 2", "Escaped \"Quotes\"", "Escaped \\ Backslash"]
1 голос
/ 21 января 2011

Вы можете разделить его на нулевой символ и завершить список двойным нулевым символом.

0 голосов
/ 22 февраля 2011

Существует RFC, который документирует формат CSV. Следуйте стандартам, и вы не будете изобретать велосипед и создавать беспорядок для следующего парня, который придет и поддержит ваш код.Приятно то, что есть библиотеки, доступные для импорта / экспорта CSV практически для любой платформы, которую вы только можете себе представить.и это также задокументировано в RFC , и вы можете получить библиотеки практически для любой платформы, такой как JSON.NET

0 голосов
/ 21 января 2011

Есть несколько способов сделать это. Первый - выбрать символ-разделитель, который обычно не вводится с клавиатуры. NULL или TAB обычно хороши. Второе - использовать символьную последовательность в качестве разделителя, файлы Excel CSV являются хорошим примером, где значения ячеек определяются кавычками с запятыми, разделяющими ячейки. Ответ зависит от того, хотите вы изобретать велосипед или нет.

0 голосов
/ 21 января 2011

Если есть вероятность появления какого-либо символа разделения в ваших строках, то я бы посоветовал вам написать элемент script в свой вывод с определением массива javascript. Например:

<script>
var myVars=new Array();
myVars[0]="abc|@123$";
myVars[1]="123*456";
myVars[2]="blah|blah";
</script>

Ваш javascript может ссылаться на этот массив

Это также избавляет от необходимости создавать разделенную запятыми строку из массива строк C #.

Единственное, что я могу придумать, это строки, которые содержат кавычки, в этом случае вам придется избегать их в C # при записи их в вывод myVars.

0 голосов
/ 21 января 2011

Эрик С. Рэймонд написал главу книги по этому вопросу, которая может вам показаться полезной . Он предназначен для пользователей Unix, но все равно должен применяться.

Что касается вашего вопроса, если у вас будут запятые в ячейках, вам понадобится некоторая форма побега. Использование \, является стандартным способом, но вам также придется избегать косых черт, которые также распространены.

В качестве альтернативы, используйте другой символ, такой как труба (|), табуляция или что-то еще по вашему выбору. Если пользователям необходимо работать с данными с помощью программы для работы с электронными таблицами, обычно вы можете добавить правила фильтрации для разделения ячеек на выбранном вами разделителе. Если это вызывает озабоченность, то, вероятно, лучше выбрать разделитель, который пользователи могут легко ввести, исключая среди прочего nul char.

Вы также можете использовать цитату:

"value1", "value2", "etc"

В этом случае вам нужно будет только экранировать кавычки (и косые черты). Это также должно быть принято в электронных таблицах, если указаны правильные параметры фильтра.

0 голосов
/ 21 января 2011

Я всегда использую |но если вы все еще думаете, что он может содержать его, вы можете использовать такие комбинации, как @ | @.Например:

"string one@|@string two@|@...@|@last string"
...