【问题标题】:CsvReader - Tab delimiter dataCsvReader - 制表符分隔符数据
【发布时间】:2016-10-21 14:27:17
【问题描述】:

我正在使用来自 https://github.com/phatcher/CsvReader 的 CsvReader

分隔符将取决于数据源的类型,因此我的分隔符字符存储在数据库中。

对于逗号(,)和管道(|)来说,它工作得非常好。

现在我得到了制表符分隔值,制表符是“\t”,即 2 个字符而不是 CsvReader 所期望的 1 个字符。

所以我将分隔符的数据类型更改为 Varchar(2),现在在 C# 中修改它时会抛出错误,因为“字符串必须恰好是一个字符长”

另一种选择是存储 Ascii 值并在 C# 中转换为 Char。

在将字符串转换为字符时,我可以对转义字符做些什么吗?

【问题讨论】:

    标签: c# tabs delimiter


    【解决方案1】:

    由字符串文字“\t”指定的字符串长度为 1 个字符。在字符串文字中指定只需要两个字符(实际上是四个字符,包括引号)。

    【讨论】:

    • 感谢您的回复。那么如何使用 Convert.ToChar 函数将其转换为 C# 中的制表符,我的意思是 Char 数据类型。
    • 正确的做法是将其作为制表符存储在数据库中,而不是将其存储为带有转义序列的字符串,然后尝试在 C# 中“解析”它。我快速检查了一下,似乎 SQL 数据库在如何指定字符方面有所不同。例如,您似乎将 SQL Server 中的水平选项卡指定为 char(9)。
    • 我在数据库中指定为 \t 在数据库中并使用 Char.Parse 进行了检查,但得到了相同的异常,即字符串必须恰好是一个字符长。正如我所说,最后一个选择是存储 ascii 值:(
    • 正如我在上一条评论中所说,您不想在数据库中存储 C# 字符串文字。您想存储一个实际的制表符。如何在 SQL 中指定制表符因数据库而异,但您希望执行 insert into someschema.sometable values (char(9)) 之类的操作
    • 我认为这里的“正确”可能取决于用例需求。就我个人而言,我发现在我的数据库中有一些我无法“看到”的特殊字符很烦人——但我相当直接地使用 DBA 工具来处理我的数据库。 adv12 的解决方案肯定更高效。
    【解决方案2】:

    转义值仍然是单个字符长。您可以编写将制表符(ASCII 9)分配给 char 变量:

            char value = '\t';
    

    如果您需要转换从数据库读取的转义字符串,您可以将 \t 值替换为实际值,即:

            string newstring = mystring.Replace("\\t", "\t");
    

    【讨论】:

    • 感谢您的回复所以在这种情况下,我从数据库中得到这个 Varchar(2),即 C# 中的字符串,现在如何将它从字符串转换为 Char 数据类型,我在转化
    • 你可以使用 mystring.Replace("\\t","\t")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多