3

所以,当然,我现在有点麻烦。我正在尝试读取一个按列顺序排列的文本文件。我想做的是将数字、字符和字符串列分别存储在数组中。

[Numbers] [Characters] [Strings] 

现在,虽然我已经弄清楚如何将数字和字符列读入它们自己的数组,但我似乎无法对字符串列这样做。至少,不是fscanfor sscanf,这是我想要使用的命令。

您如何使用fscanfor读取这样组织的文件sscanf?(我知道 textscan,我想知道 fscanf 或 sscanf 是否可以)。

好的,让我在这里添加一些代码。因此,当我研究这个时,我尝试了以下方法:

fid = fopen('Data.txt', 'w+'); 
i = 1;
while ~feof(fid)
     line = fgets(fid);
     M(i) = sscanf(line, '%d, %c, %s', [3,inf];
     i = i+1; 
end

这会运行,但 M 最终仅作为由数据文件中第一列数字组成的行向量出现。它只是完全忽略了字符和字符串的存在。

现在,为了更好地理解 sscanf 函数,我尝试了以下

fid = fopen('Data.txt', 'w+'); 
    i = 1;
    while ~feof(fid)
         line = fgets(fid);
         M(i) = sscanf(line, '%d, %d, %d', [3,inf];
         i = i+1; 
    end

对于仅由数字列组成的样本数据集。顺便说一句,这与以前完全相同。它只是读取数据的第一个数字列并退出。所以,我什至不知道如何正确使用 sscanf、feof 或 fgets,基本上。所以我也可以在这里使用一些帮助。

而且我知道使用 fscanf 尝试仅读取数字列是微不足道的,但我试图在这里理解 sscanf 和 fgets。

4

1 回答 1

2

您正在寻找的功能宁愿是textscan

它将允许您一次读取整个文件并指定您正在阅读的每一列的格式。

在你的情况下,它应该是这样的:

fileID = fopen('myfile.txt');
C = textscan(fileID, '%f %c %s');
fclose(fileID);
celldisp(C)

由于我们不确切知道您的文本文件的格式,您可能需要调整格式字符串。

您将获得一个元胞数组,其中包含根据格式规范解析的文件内容。

Matlab 的文档详细解释了可能性、格式规范,并附带了很好的示例。

于 2013-05-17T11:11:56.143 回答