2013-05-16 553 views
3

所以,当然,我现在有点麻烦了。我试图读取一个文本文件,按照列表顺序进行这样的事情。我想要做的是将数字,字符和字符串列单独存储在数组中。如何使用sscanf或fscanf从文件中读取字符串?

[Numbers] [Characters] [Strings] 

现在,当我想通了如何读取数字和字符列到自己的阵列中,我似乎不能与字符串列这样做。至少,不是fscanfsscanf,这是我想要使用的命令。

如何阅读使用fscanfsscanf这样的档案? (我知道关于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 

这将运行,但中号结束了出来只由数字构成的数据文件中的第一列的行向量。它完全忽略了字符和字符串的存在。

现在,为了更好地了解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。

回答

2

你正在寻找的功能宁愿textscan

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

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

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

由于我们不知道你的文本文件的完全格式,你可能必须调整格式字符串。

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

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

+0

对,我知道textscan。也许我会研究它,但我不愿意,因为命令只存在,据我所知,在matlab中,这可能不是我唯一想做的事情。 我会研究一下,但是,我想再次知道这是否适用于fscanf或sscanf。 而且,我的意思是,我所说的确实是文本文件的格式。只需很长时间(数千个值)的数字,字符和字符串列。 在很多方面,我只是好奇在这里看看如何用fscanf和sscanf来做到这一点。也许这是愚蠢的,但是...我想知道。 – GeneralPancake

+0

嗯,我不得不承认textscan完美的作品,说实话,真的让我很烦恼。我只是,真的很想知道如何使用sscanf和/或fscanf来做到这一点。它必须是可能的,我真的不在乎它有多少痛苦。 – GeneralPancake

相关问题