所以,当然,我现在有点麻烦。我正在尝试以列式顺序读取类似这样的文本文件。我想要做的是将数字,字符和字符串列分别存储在数组中。
[Numbers] [Characters] [Strings]
现在,虽然我已经想出如何将数字和字符列读入自己的数组,但我似乎无法使用字符串列。至少,不是fscanf
或sscanf
,而是我想要使用的命令。
如何使用fscanf
或sscanf
阅读按此组织的文件? (我知道文本扫描,我想知道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。
答案 0 :(得分:2)
您正在寻找的功能宁愿是textscan
它允许您立即读取整个文件并指定您正在阅读的每个列的格式。
在你的情况下,它应该是这样的:
fileID = fopen('myfile.txt');
C = textscan(fileID, '%f %c %s');
fclose(fileID);
celldisp(C)
由于我们不确切知道文本文件的格式,因此您可能需要调整格式字符串。
您将获得一个单元数组,其中包含根据格式规范解析的文件内容。
Matlab的文档详细解释了可能性the format specification,并附带了很好的例子。