【发布时间】:2017-05-15 16:21:47
【问题描述】:
[已编辑:]我有一个文件data2007a.csv,我将前连续几行复制并粘贴(在 MacBook 中使用 TextEdit)到一个新文件 datatest1.csv 进行测试:
Nomenclature,ReporterISO3,ProductCode,ReporterName,PartnerISO3,PartnerName,Year,TradeFlowName,TradeFlowCode,TradeValue in 1000 USD
S3,ABW,0,Aruba,ANT,Netherlands Antilles,2007,Export,6,448.91
S3,ABW,0,Aruba,ATG,Antigua and Barbuda,2007,Export,6,0.312
S3,ABW,0,Aruba,CHN,China,2007,Export,6,24.715
S3,ABW,0,Aruba,COL,Colombia,2007,Export,6,95.885
S3,ABW,0,Aruba,DOM,Dominican Republic,2007,Export,6,11.432
我想使用textscan 将其读入 MATLAB,其中只有第 2、3、5 列(从第二行开始),我编写了以下代码
clc,clear all
fid = fopen('datatest1.csv');
data = textscan(fid,'%*s %s %d %*s %s %*[^\n]',...
'Delimiter',',',...
'HeaderLines',1);
fclose(fid);
但我最终只得到了第 2,3 和 5 列的第二行:
然后我将第一行保留在data2007a.csv 中并选择其他几个保存为datatest2.csv:
Nomenclature,ReporterISO3,ProductCode,ReporterName,PartnerISO3,PartnerName,Year,TradeFlowName,TradeFlowCode,TradeValue in 1000 USD
S3,ABW,1,Aruba,USA,United States,2007,Export,6,1.392
S3,ABW,1,Aruba,VEN,Venezuela,2007,Export,6,5633.157
S3,ABW,2,Aruba,ANT,Netherlands Antilles,2007,Export,6,310.734
S3,ABW,2,Aruba,USA,United States,2007,Export,6,342.42
S3,ABW,2,Aruba,VEN,Venezuela,2007,Export,6,63.722
S3,AGO,0,Angola,DEU,Germany,2007,Export,6,105.334
S3,AGO,0,Angola,ESP,Spain,2007,Export,6,8533.125
我写道:
clc,clear all
fid = fopen('datatest2.csv');
data = textscan(fid,'%*s %s %d %*s %s %*[^\n]',...
'Delimiter',',',...
'HeaderLines',1);
fclose(fid);
data{1}
当我对原始数据文件data2007a.csv 使用相同的代码时,它与第一种情况一样。
出了什么问题,我该如何解决?
[添加:]如果重复我的实验1,可以发现两种情况都有效,问题不存在!真不知道怎么回事。
1对于“复制”,我的意思是复制并粘贴上面给出的数据并将其保存为两个新文件,例如datatest4a.csv 和datatest4b.csv。我使用visdiff('datatest1.csv', 'datatest4a.csv') 比较两个文件并返回:
【问题讨论】:
-
您的问题无法重现。我怀疑您在 MATLAB 中使用了不同的文件,并且您的实际文件不同。在您的帖子中,您说您有一个名为
data.csv的文件,但在 MATLAB 中,您打开了datatest.csv。我怀疑这不仅仅是一个错字 -
@Sardar_Usama:感谢您指出这一点。这确实是一个错字。我会马上修改。
-
你错过了重点。您的问题无法重现
-
@Sardar_Usama:对不起,我不太明白你的评论。您能否详细说明“问题不可重现”的含义?
-
它不会重现您在屏幕截图中显示的结果。相反,它会产生您正在寻找的结果,即它包含指定列的所有行(从第二行开始)