写选项卡分隔文件

时间:2015-07-03 07:33:34

标签: c# file tab-delimited tab-delimited-text

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

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

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

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

lat2 = [-54.54,-33.15,-8.64,-1.3,5.8,15.35,30.7,32.86,37.54,40.25,...
    43.84,45.95,47.65,49.38,51.04,53.33,54.70,56.33,58.59,60.02,60.84,...
    62.09,63.15,64.15,66.06];
lon2 = [-68.02,-52.84,26.39,33.22,37.54,-83.84,90.66,119.30,89.34,-121.19,...
    -77.76,-60.83,9.2,-94.91,-90.8,-100.13,-97.58,-76.29,-112.08,-106.06,...
    31.38,28.52,29.70,-108.45,30.97];

figure(1);
m_proj('Mollweide'); %clongitude, 0
m_coast('patch','k');
m_grid('xaxislocation','middle');
for i = 1:length(lat2);
    m_line(lon2(i),lat2(i),'marker','o','markersize',4,'color','k','MarkerFaceColor','r');
end    

figure(2);
m_proj('Mollweide','clongitude', 0);
m_coast('patch','k');
m_grid('xaxislocation','middle');
for i = 1:length(lat2);
    m_line(lon2(i),lat2(i),'marker','o','markersize',4,'color','k','MarkerFaceColor','r');
end    

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

2 个答案:

答案 0 :(得分:14)

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

var delimiter = "\t";

有一个制表符。

答案 1 :(得分:7)

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