写入以制表符分隔的文件

本文关键字:文件 分隔 制表符 | 更新日期: 2023-09-27 18:01:03

我在编写以Tab分隔的文件时遇到问题,我已经在这里检查过了,但还没有得到答案。

因此,我得到了一个函数,它返回包含以下重要部分的字符串(使用的分隔符以及我如何构建每一行(:

var delimiter = @"'t";
sb.Append(string.Join(delimiter, itemContent));
sb.Append(Environment.NewLine);

返回的字符串如下:

H't13't170000000000001't20150630
D't1050't10.0000'tY
D't1050't5.0000'tN

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

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);
}

然而,文件输出是这样的,没有选项卡(在记事本++中打开(:

H't13't170000000000005't20150630
D't1050't20.0000'tN
D't1050't2.5000'tY

什么时候应该更像这样(提供的样本文件(:

H   100115980   300010000000003 20150625
D   430181  1   N
D   342130  2   N
D   459961  1   N

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

写入以制表符分隔的文件

使用var delimiter = @"'t";,变量包含文字't。@语法将反斜杠禁用为"special"。在这种情况下,你真的想要

var delimiter = "'t";

以具有制表符。

您的代码中有一个拼写错误。@前缀表示以下字符串是一个文字,因此@"''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);
}