Matlab xlsread()认为我的单行CSV有1048576行
我想使用Matlab xlsread()认为我的单行CSV有1048576行,matlab,csv,file-io,Matlab,Csv,File Io,我想使用[~,~,temp]=xlsread('1.csv','A:A')获取单行CSV文件的第一列1.CSV 1.csv只包含一行: 5B0E8795E18013D0FBC33558F0512832,3,7,1,练习,榨汁机,榨汁机,对,错,2347.0,0 但是,返回的temp是一个单元格。temp不应该是一个单元格吗 参数'A:A'应仅返回第一列的现有行,如中的“读取数据列”示例所示。由于temp是一个单元格,因此使用'a:a'似乎会返回整个列,包括不存在的行(1048576是Micros
[~,~,temp]=xlsread('1.csv','A:A')
获取单行CSV文件的第一列1.CSV
1.csv
只包含一行:
5B0E8795E18013D0FBC33558F0512832,3,7,1,练习,榨汁机,榨汁机,对,错,2347.0,0
但是,返回的temp
是一个单元格。temp
不应该是一个单元格吗
参数'A:A'
应仅返回第一列的现有行,如中的“读取数据列”示例所示。由于temp
是一个单元格,因此使用'a:a'
似乎会返回整个列,包括不存在的行(1048576是Microsoft Excel 2010中的最大行数)
使用textscan()
可以正常工作(datatemp
在以下代码段中只有一行):
但是我不明白为什么
xlsread()
不能正常工作。我使用MATLAB R2012a 64位、Microsoft Excel 2010和Windows 7 x64。Excel COM界面实际上就是这样工作的,所以你不能责怪MATLAB:)
下面是一个示例代码,它基本上完成了xlsread
内部的工作。您可以在VBScript/Powershell中编写代码并获得相同的结果
%# create Excel COM server
Excel = actxserver('excel.application');
%# open file
Excel.workbooks.Open(which('1.csv'), 0, true);
Excel.Worksheets.Item(1).Activate();
Excel.Visible = true;
%# select first column
Excel.Range('A:A').Select();
val = Excel.Selection.Value();
%# close
Excel.Quit();
Excel.delete();
变量val
返回:
>> whos val
Name Size Bytes Class Attributes
val 1048576x1 71303224 cell
其中除第一个单元外的所有单元均为NAN:
>> val(1:3)
ans =
'5B0E8795E18013D0FBC33558F0512832'
[NaN]
[NaN]
我不明白你为什么不直接使用
textscan
将文件解析为文本,这比调用COM(更不用说可移植到Windows以外的其他平台)要快得多你为什么要使用xlsread
读取CSV文件?为什么不使用csvread
?xlsread()文档中说:“在使用Microsoft Excel软件的Windows®系统上,xlsread可以读取您的Excel版本识别的任何文件格式。”因此,我认为它应该可以工作。使用textscan()更为繁琐。至于csvread
,根据以及csvread
文档:“csvread仅适用于数字数据”,因此我无法使用它。是的,我也很惊讶csvread
无法处理非数字数据。您能尝试将该CSV文件保存为XLS(X)格式,并测试xlsread
是否可以处理该文件吗?如果是这样,我宁愿忘记使用xlsread
读取CSV文件。文档可能在这里,我想这是个bug。我在Win7 64 R2013a Excel2010上观察到了相同的行为。我会向TMW汇报,并让我们了解最新情况。混淆是由示例引入的,这就是为什么问题首先出现的原因。根据“”,对行为的期望是不同的。我忘了说,您在文档中提到的示例使用了xlsread
的前两个输出,这两个输出是从第三个输出raw
中提取的,方法是删除您上面看到的nan单元格,并过滤为数字/文本。所以如果你写:[~,txt]=xlsread('1.csv','A:A')代码>你得到了你想要的东西..很好的一点,但是xlsread()文档说:“如果指定了xlRange,工作表中带数据的行和列前面的前导空白行和列将在raw
中返回。”。这相当明确地意味着,即使在raw
列中,也不希望返回数据后的空行。关于textscan()
的使用,它更为冗长,无论如何都不应妨碍xlsread
正常工作。@Frankdernoncourt:我想在某种程度上是这样的,但我认为他们指的是常规范围表示法,如A1:C5
。Excel中的A:A
触发返回整个列的特定行为。更不用说最近的xlsread
@Amro-Wow了,感谢你的链接,似乎最好尽量避免xlsread
!
>> val(1:3)
ans =
'5B0E8795E18013D0FBC33558F0512832'
[NaN]
[NaN]