2014-12-19 2 views
0

Я делаю основной импорт/экспорт CSV в C#. Большинство из них действительно простые и простые, у нас есть только одна специальность.Создать строку списка на основе возможности замены

В значениях, которые мы импортируем/экспортируем, мы имеем некоторые значения специальных значений, которые не являются значениями ASCII. Чтобы облегчить работу наших конечных пользователей, клиент решил преобразовать некоторые значения в некоторые другие значения и сделать наоборот при импорте.

Некоторые примеры

Value in our application | ValueS that must be accepted on parsing 
----------------------------------------------------------------------- 
³ | 3, ^3, **3 
μ | u 
₃ | 3 
⁹ | 9 
° | deg 
φ | phi 

Для экспорта, это легко, мы заменим соответствующий символ, первый на второй колонке.

Но для синтаксического анализа это сложнее, и я не вижу простого способа получить все возможные значения для импорта?

Один пример:

H³ 3° (asd)₃ 

бы быть экспортированы в качестве

H3 3deg (asd)3 

Итак, чтобы правильно разобрать это, у меня есть, чтобы получить все возможности:

  • H3 3deg (asd)3 // Это могут быть действительными значениями
  • H³ 3deg (asd)3
  • H₃ 3deg (asd)3
  • H3 ³deg (asd)3
  • ....

Что бы хороший способ сделать это?

+0

Во время экспорта вы можете заменить что-нибудь, что не ASCII с чем-то вроде '{unicode: 12311}'. – Sinatr

+0

Если вы импортируете H3, это будет 'H³' или' H₃'? или 'H3'? В вашей кодировке отсутствует информация, это кодирование с потерями, которое кодирует несколько входов на один и тот же вывод. Таким образом, это не обратимо. Вам нужно найти другой способ кодировать это, чтобы различать входы. –

+0

Кроме того, неясно, что вы здесь задаете. Вы спрашиваете, как правильно декодировать (невозможно) или что является лучшим (отсутствует информация, например, вероятности и разрешено ли неправильно декодировать)? –

ответ

0

Я думаю, вам нужно исключить двусмысленные сопоставления. Например .:

³ | ^3, **3 
₃ | 3 
⁹ | ^9, **9 

или

³ | 3, ^3, **3 
₃ | _3 
⁹ | 9 
1

Я сомневаюсь, что это возможно при таком кодировании. Все значения H3 одинаково вероятны, если не существует правила, которое их отличает. Это делает анализ более сложным, не менее.

Что вы пытаетесь сделать, хотя очень похоже на то, что уже сделано с помощью таких инструментов, как Latex или даже Word. Вероятно, вы должны использовать кодировки, используемые Latex, поскольку они уже выполнили работу с символами кодирования для понятных и редактируемых ключевых слов, которые легко анализируются, например: используйте ^ для питания, _ для индексов, \degree для степеней и т. Д.

в самом деле, даже слово позволяет эти же ключевые слова в настоящее время в редакторе Math, что позволяет ввести \sum и получить Е, или \oint для ∮

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

+0

У меня есть замкнутый набор значений (большой набор, но закрытый). Я могу гарантировать 100%, что, когда мы экспортируем, с замененным символом, он делает уникальные значения для нас – J4N

+0

В чем проблема? Если 'H3' уникален, почему его трудно декодировать? –

0

ASCII имеет 7 бит для каждого символа. Теперь вы хотите использовать символы, которые реализованы в пространстве 8 бит (например, UTF8).

Теперь вы теряете информацию, преобразовывая символ UTF8 в ASCII, но вы хотите получить полную информацию.

Чтобы справиться с этим, вам нужна маска, которая помогает распознать правильный символ.

Вы можете использовать special characters как свою маску. Поэтому вы не изобретаете велосипед, и другие могут найти документацию по всему Интернету для вашего интерфейса.

Но если вы сделаете ³ => 3, то вы теряете информацию (3 верхний индекс => 3, где верхний индекс и как вы должны угадать правильный выбор?)

+0

Это не отвечает на мой вопрос. Мне хорошо известно о проблемах с кодировкой, это не главное. Наличие этих значений замены является обязательным требованием. Это было решено (не для меня), чтобы помочь нашим пользователям (потому что UTF8 не является значением excel по умолчанию, потому что не все пользователи теперь как ввести 'μ', ... – J4N

+0

ASCII имеет 8 бит, а не 7. UTF8 использует 8-32 бит - 8 только в том случае, если символ является одним из первых 127 символов ASCII, 16 или более в других случаях –

+0

Вы правы. Я быстро разобрал его и не имеет отношения к проблеме. – Mitja

Смежные вопросы