写选项卡分隔文件

Ani*_*ola 3 c# file tab-delimited tab-delimited-text

我在编写制表符分隔文件时遇到问题,我在这里查了一下,还没有得到我的答案.

所以我有一个函数返回带有下面重要部分的字符串(使用分隔符以及我如何构建每一行):

var delimiter = @"\t";
sb.Append(string.Join(delimiter, itemContent));
sb.Append(Environment.NewLine);
Run Code Online (Sandbox Code Playgroud)

返回的字符串是这样的:

H\t13\t170000000000001\t20150630
D\t1050\t10.0000\tY
D\t1050\t5.0000\tN
Run Code Online (Sandbox Code Playgroud)

然后我用它写一个文件(下面的内容是上面的字符串):

var content = BuildFile(item);
var filePath = tempDirectory + fileName;

// Create the File
using (FileStream fs = File.Create(filePath))
{
    Byte[] info = new UTF8Encoding(true).GetBytes(content);
    fs.Write(info, 0, info.Length);
}
Run Code Online (Sandbox Code Playgroud)

但是,文件输出没有选项卡(在记事本++中打开):

H\t13\t170000000000005\t20150630
D\t1050\t20.0000\tN
D\t1050\t2.5000\tY
Run Code Online (Sandbox Code Playgroud)

当它应该更像这样(提供样本文件):

H   100115980   300010000000003 20150625
D   430181  1   N
D   342130  2   N
D   459961  1   N
Run Code Online (Sandbox Code Playgroud)

这可能是由我使用的编码引起的吗?感谢您的任何输入,谢谢!

Han*_*ing 14

使用时var delimiter = @"\t";,变量包含文字\t.@语法禁用反斜杠为"特殊".在这种情况下你真的想要

var delimiter = "\t";
Run Code Online (Sandbox Code Playgroud)

有一个制表符.


Pan*_*vos 8

您的代码中存在拼写错误.的@前缀意味着下面的字符串是一个文字,从而@"\ t"的是两个字符的字符串以字符\t

你应该使用没有前缀的"\ t".

您应该考虑使用StreamWriter而不是在内存中构造整个字符串并写入原始字节.StreamWriter默认使用UTF-8,允许您像使用Console.WriteLine一样编写格式化的行:

var delimiter ="\t";

using(var writer=new StreamWriter(filePath))
{
    var line=string.Join(delimiter, itemContent);
    writer.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)