C#从文本文件中读取制表符作为设置

时间:2013-07-01 01:42:21

标签: c# tabs character

美好的一天,我今天加入。

我在文本文件中有一个设置。

logSeparator = \吨

这将在启动期间读入Properties.Settings(字符串)。

当我把它读成字符串时,它将变为“\\ t”

所以我有一个临时解决办法来保持工作:

if (Properties.Settings.Default.logSeparator == "\\t") { //trim \t

            Properties.Settings.Default.logSeparator = "\t";
            Properties.Settings.Default.Save();

        }

应该有一些简单的方法来清理这个字符串并使其成为一个字符

“\ t”,现在,如果enduser决定开始使用例如“\ r”作为分隔符

字符不起作用。

我看起来像这样容易: string_name.Replace(“\\”,“\”); //(这不起作用)

请帮助,我相信必须有简单而干净的方式来做到这一点,但是花了很长时间才谷歌试图解决这个问题并找不到任何东西。

3 个答案:

答案 0 :(得分:2)

您的问题在于您如何将这些内容翻译成标签。在您的文件中,它只是普通字符:\t。但实际的制表符是不同的。当C#处理文字字符串时,它会将\t转换为一个标签(除非你告诉它不要使用@字符串前缀)。

所以你需要做的是模仿替换。你已经尝试过这个,但针对了错误的角色。你需要做的是:

string_name.Replace("\\t", "\t")

有更好的方法可以替换控制字符,您可能需要考虑允许转义反斜杠。但是在最基本的层面上,这应该让你前进。

答案 1 :(得分:0)

如果您只使用string.Format(logSeparator),它将转换它。你不需要做\剥离。我猜你在观察窗口看到的将是字符序列的转义版本。即字符串\ t将在监视窗口中显示为\\ t,以区别于制表符 - 它实际上在字符串中没有两个反斜杠。

答案 2 :(得分:0)

由于反斜杠由C#自动转义,因此最后一个字符不包含反斜杠。

我建议将logSeparator的类型更改为char,因为每次使用该字符串时都会发生此行为。这是一个简单的方法,它接受一个字符串,并根据字符串中的最后一个字符返回正确的控制字符:

    private char GetSeparator(string Input)
    {
        char separator = new char();
        switch (Input.Last())
        {
            case 't':
                separator = '\t';
                break;
            case 'r':
                separator = '\r';
                break;

        }
        return separator;
    }

您可以轻松添加所需的任何其他案例陈述。 我假设你正在使用readline方法,以便修剪新的行字符。如果不是这样,可能需要先完成。