gpt4 book ai didi

matlab - xlsread() 认为我的 1 行 CSV 有 1048576 行

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:24 28 4
gpt4 key购买 nike

我想使用 [~, ~, temp] = xlsread('1.csv','A:A'); 获取单行 CSV 文件的第一列 1.csv.

1.csv 只包含一行:

5B0E8795E18013D0FBC33558F0512832,3,7,1,Practice,Juicer,Juicer,true,false,2347.0,0

但是返回的 temp 是一个 <1048576x1> 单元格。 temp 不应该是 <1x1> 单元格吗?

参数 'A:A' 应该只返回第一列的现有行,如 xlsread() documentation 中的“读取数据列”示例所示.由于 temp 是一个 <1048576x1> 单元格,使用 'A:A' 似乎返回整个列,包括不存在的行(1048576 是最大数量Microsoft Excel 2010 中的行)。

使用 textscan() 工作正常(= datatemp 在下面的片段中将只有 1 行):

fid = fopen('1.csv','r');
datatemp = textscan(fid, '%s %d %d %d %s %s %s %s %s %d %d', 'delimiter',',', 'CollectOutput',true)
fclose(fid);

但是我不明白为什么 xlsread() 无法正常工作。我使用 MATLAB R2012a 64 位、Microsoft Excel 2010 和 Windows 7 x64。

最佳答案

这实际上就是 Excel COM 接口(interface)的工作方式,所以您不能责怪 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 以外的其他平台)

关于matlab - xlsread() 认为我的 1 行 CSV 有 1048576 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700909/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com