我在C#中进行基本的CSV导入/导出。大部分都非常简单和基本,我们只有一个专业。
在我们导入/导出的值中,我们有一些特殊值,它们不是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 :(得分:1)
我怀疑这种编码是否可行。除非存在区分它们的规则,否则所有H3
值都是同等可能的。这使解析变得更加困难,而不是更少。
你想要做的事情看起来很像使用Latex甚至Word等工具已经完成的事情。您应该使用Latex使用的编码,因为他们已经完成了将符号编码为可以轻松解析的人类可读和可编辑关键字的工作,例如:使用^
获取权力,使用_
获取索引,\degree
为度,等等。
事实上,即使Word现在也可以在数学编辑器中使用这些相同的关键字,您可以输入\sum
并获取Σ,或\oint
获取∮
您应该标记包含替换的字段,例如将它们包含在多个大括号中,以便用户可以在自己的文本中使用关键字。
答案 1 :(得分:0)
我认为您需要排除不明确的映射。 E.g:
³ | ^3, **3
₃ | 3
⁹ | ^9, **9
或
³ | 3, ^3, **3
₃ | _3
⁹ | 9
答案 2 :(得分:0)
ASCII每个字符有7个位。现在你想使用在8位(例如UTF8)的空间中实现的字符。
现在您通过将UTF8字符转换为ASCII而丢失信息,但您想要获取完整信息。
要管理这个,你需要一个面具,这有助于识别正确的角色。
您可以使用special characters作为面具。所以你不要重新发明轮子,其他人可以在你的界面上找到整个互联网的文档。
但如果你做³=> 3,你丢失信息(3上标=> 3;上标在哪里,你应该如何猜测正确的选择?)