【发布时间】:2020-11-11 13:19:57
【问题描述】:
我正在尝试将 .xls 文件读入 Matlab。我被禁止使用内置函数,例如 xlsread()、textread() 和 readable()。如果更容易,我可以将 .xls 文件转换为其他格式,并且我已经使用 data.txt 尝试了以下代码,但无济于事。
我可以使用基本的“fopen”、“fscanf”、“fread”功能。但是,我似乎无法弄清楚如何正确实现它们。
我的数据的模拟版本如下所示......
Col1 Col2 Col3 Col4 Col5 Col6 Col7
1 2 3 4 5.5 6 Fox
2 3 4 5 6.7 8 Cat
18 12 56 3 20.2 9 Dog
以此类推,大约 400 行
目前,我的代码如下所示
fileID = fopen('data.xls', 'r');
fgetl(fileID);
data = fscanf(fileID, '%d %d %d %d %f %d %*s');
fclose(fileID);
我正在尝试删除列标题行并仅检索前 6 列。我想忽略最后的文本列。
此代码返回一个空矩阵'data[]'
我做错了什么?
更新的代码和数据集
我已经在完整数据集上实现了 MichaelTr7 的答案,但它仍然只复制文档的第一行?下面是对数据集的更准确描述。为简单起见,我没有在上面包含它,但现在我认为它是必需的
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
18 8 307 130 3504 12 70 1 chevrolet chevelle malibu
2 3 4 5 6.7 8 70 1 buick skylark 320
18 12 56 3 20.2 9 70 1 amc ambassador dpl
NA 4 133 115 3090 40 70 2 ford torino
代码...
fileID = fopen('data.txt', 'r');
Headers = string(fgetl(fileID));
Format_Specification = '%d %d %d %d %d %f %d %d %*s';
Array_Size = [8 Inf];
Output_Array = fscanf(fileID,Format_Specification,Array_Size);
Output_Array = Output_Array.';
fclose(fileID);
Ouput_array 现在等于 [18,8,307,130,3504,12,70,1]
【问题讨论】:
-
fscanf不处理标题,因此您需要使用不同的函数。顺便说一句,您正在那里阅读xls,您的意思是阅读txt吗? -
你会推荐什么?我可以使用 .xls 或 .txt,哪个更容易。我想我会把它保留为 .xls
-
可以先将xls文件另存为csv文件(xls文件具有复杂的二进制格式)。
-
@ErwinKalvelagen 这有点用。它现在返回第一列中的第一个值,即“1”。任何线索我将如何让它继续文件的其余部分?
-
是否允许其他功能?喜欢
split()和fgetl()。