关于Matlab:如何使用sscanf或fscanf从文件中读取字符串?

How to read strings from file with sscanf or fscanf?

因此,当然,我现在遇到了一些麻烦。我正在尝试读取一个按列顺序排列的文本文件。我想做的是将数字,字符和字符串列分别存储在数组中。

1
[Numbers] [Characters] [Strings]

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

如何读取使用fscanfsscanf进行组织的文件? (我了解textscan,我想知道是否可以使用fscanf或sscanf)。

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

1
2
3
4
5
6
7
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函数,我尝试了以下操作

1
2
3
4
5
6
7
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。


您正在寻找的功能将是textscan

它可以让您一次读取整个文件,并指定要读取的每一列的格式。

您的情况应该是这样的:

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

由于我们不确定您的文本文件的格式,因此您可能需要调整Format字符串。

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

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