【问题标题】:How to read strings from file with sscanf or fscanf?如何使用 sscanf 或 fscanf 从文件中读取字符串?
【发布时间】:2013-05-16 22:55:53
【问题描述】:

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

[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

这会运行,但 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。

【问题讨论】:

    标签: string matlab text scanf


    【解决方案1】:

    你要找的函数是textscan

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

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

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

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

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

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

    【讨论】:

    • 对,我知道 textscan。也许我会调查它,但我不愿意,因为据我所知,该命令仅存在于 matlab 中,这可能不是我唯一想做的事情。我会调查一下,但是,我想知道这是否可以使用 fscanf 或 sscanf。而且,我的意思是,我所说的实际上是文本文件的格式。只是长的(数千个值)数字、字符和字符串列。在很多方面,我只是好奇地想看看如何使用 fscanf 和 sscanf 来做到这一点。也许这很愚蠢,但......我想知道。
    • 好吧,我不得不承认 textscan 完美无瑕,老实说,这真的让我很恼火。我只是,真的,真的很想知道如何使用 sscanf 和/或 fscanf 来做到这一点。它必须是可能的,我真的不在乎它有多痛苦。
    猜你喜欢
    • 2017-05-03
    • 2014-02-10
    • 2023-03-17
    • 2012-07-17
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多