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

时间:2013-05-16 22:55:53

标签: string matlab text scanf

所以,当然,我现在有点麻烦。我正在尝试以列式顺序读取类似这样的文本文件。我想要做的是将数字,字符和字符串列分别存储在数组中。

[Numbers] [Characters] [Strings] 

现在,虽然我已经想出如何将数字和字符列读入自己的数组,但我似乎无法使用字符串列。至少,不是fscanfsscanf,而是我想要使用的命令。

如何使用fscanfsscanf阅读按此组织的文件? (我知道文本扫描,我想知道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。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

Matlab的文档详细解释了可能性the format specification,并附带了很好的例子。