【问题标题】:is it possible to index character strings pulled from an external .txt file?是否可以索引从外部 .txt 文件中提取的字符串?
【发布时间】:2012-01-20 18:24:50
【问题描述】:

我正在学习基本的 MATLAB 大学课程,需要一些关于我的代码的帮助。

有一个外部 .txt 文件,其中包含名称,并为每个名称分配了相应的数字。我的目标是将所有名字、姓氏和数字放入数组中,找到“数字”数组中的最小数字,获取相应的索引器编号,并打印与该数字相关的名字和姓氏。

文本文件读取 25 个不同的名称和数字 (即:

鲍勃 史密斯 17 简 美国能源部 23 账单 约翰逊 13

...等等...)

到目前为止,这是我的通用代码:

1  clear
2
3  clc
4
5
6  fid1=fopen('facedata.txt','rt');
7 
8  for index = 1:1:25
9     firstn(index) = fgetl(fid1);
10    lastn(index) = fgetl(fid1);
11    number(index) = fscanf(fid1,'%f');
12 end
13
14 [distmin,I] = min(dist);
15 fprintf('%5.4f %10s %10.0f', distmin, firstn(I), I);

我希望代码能够运行,让 matlab 将“13”识别为最小的数字,并将“bill johnson”打印到屏幕上,但如果我运行代码,matlab 会说有错误

Subscripted assignment dimension mismatch.' @ line 9.

Index exceeds matrix dimensions.' @ the firstn**(I)** in line 15.

有什么想法吗?我知道这很疯狂,但任何帮助将不胜感激! :]

【问题讨论】:

    标签: string matlab indexing


    【解决方案1】:

    命令fgetl 表示从文本文件中读取一行。因此,您的代码正在读取 2x25 = 50 行文本。你怎么知道你的文件有这么多行?您应该读取一个新行,处理它,然后重复直到到达文件末尾:

    fid = fopen('fgetl.m');
    tline = fgetl(fid);
    while ischar(tline)
      disp(tline)
      tline = fgetl(fid);
    end
    fclose(fid);
    

    但是,这不会满足您的要求。您应该使用fscanf 以您想要的格式读取数据。您想读取两个连续的字符串(名字、姓氏)和一个整数。所以你可以使用

    A = fscanf(fid, '%s %s %d', [3 inf]);
    

    一次读取三个项目并重复直到文件末尾。

    【讨论】:

      【解决方案2】:

      我今天早些时候回答了我自己的问题,但如果有人感兴趣,我会发现以下问题:

      你必须使用大括号而不是直括号来索引一行字符串。

      即:

      for index = 1:1:25
      firstname{index} = fgetl(fid1);
      end
      
      fprintf('%10s', firstn{index});
      

      fprintf 将打印提供的任何数字索引。

      还是谢谢卡夫卡:]

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 1970-01-01
        • 2018-02-15
        • 2021-07-07
        • 2013-07-03
        • 1970-01-01
        • 2018-10-26
        • 1970-01-01
        • 2016-01-21
        相关资源
        最近更新 更多