1

我一直无法找到“单元分隔符”的元字符来替换平面文件中的选项卡。

到目前为止,我有这个:

File.WriteAllLines(outputFile,
    File.ReadLines(inputFile)
    .Select(t => t.Replace("\t", "\0x1f")));  //this does not work

我也试过:

File.WriteAllLines(outputFile,
    File.ReadLines(inputFile)
    .Select(t => t.Replace("\t", "\u"))); //also doesn't work

File.WriteAllLines(outputFile,
    File.ReadLines(inputFile)
    .Select(t => t.Replace("\t", 0x1f)));  //also doesn't work

如何正确使用十六进制作为参数?另外,“单位分隔符”的元字符是什么?

4

3 回答 3

3

单位分隔符的元字符是

U+001f

你应该可以像这样使用它

File.WriteAllLines(outputFile,
File.ReadLines(inputFile)
.Select(t => t.Replace("\t", "\u001f")));

编辑:由于关于控制字符的讨论开始发生,为了后代的缘故,我会添加这个定义。

开始、修改或结束功能、事件、操作或控制操作的特殊非打印字符。ASCII 字符集定义了 32 个控制字符。最初,这些代码旨在控制电传打字机。然而,现在它们通常用于控制显示监视器、打印机和其他现代设备。

这里

另外,这里是单位分隔符的描述

存储在数据库中的最小数据项在 ASCII 定义中称为单位。我们现在称它们为字段。单位分隔符在串行数据存储环境中分隔这些字段。大多数当前的数据库实现要求大多数类型的字段具有固定长度。记录中分配了足够的空间来存储每个字段的最大可能成员,即使在大多数情况下这不是必需的。在许多情况下,这会占用大量空间。US 控制代码允许所有字段具有可变长度。如果数据存储空间有限(如 60 年代),这是保留宝贵空间的好方法。另一方面,串行存储的效率远低于现代的表驱动 RAM 和磁盘实现。我可以'

这里

于 2015-08-11T16:30:15.430 回答
0

我认为在 C# 中编码 unicode 字符的正确方法是使用\unnnn格式。您可以尝试将其替换为 string \u001f,如下所示:

File.WriteAllLines(outputFile,
    File.ReadLines(inputFile)
    .Select(t => t.Replace("\t", "\001f")));

那样有用吗?

于 2015-08-11T16:30:31.077 回答
0

这应该让你到达你需要的地方:

        char unitSeperatorChar = (char)Convert.ToInt32("0x1f", 16);
        string contents = File.ReadAllText(inputFile);
        string convertedContents = contents.Replace('\t', unitSeperatorChar);
        File.WriteAllText(outputFile, convertedContents);

我加载到一个字符串中,转换并重新保存。您可以将它们组合起来以提高字符串管理的内存效率。

于 2015-08-11T16:36:31.330 回答