matlab中如何读取多个txt文件中的某一行的数据

具体是这样的,比如说我有100个按照序号排列的txt文件,文件名如下:file(1).txt、file(2).txt、……file(100).txt,每个txt文件中并不... 具体是这样的,比如说我有100个按照序号排列的txt文件,文件名如下:file(1).txt、file(2).txt、……file(100).txt,每个txt文件中并不是纯数据,开头还有一些解释说明,如下图所示 。我需要的是每个文件中的第60行的数据,就是读取这一行的数据,然后将100txt个文件中的这一行的数据全部放到一个矩阵当中。如果一行有7个数据,那么我的矩阵大小就是100行、7列的。请问如何编写这样的matlab程序,挺急的,希望高人指点。某一个TXT的文件内容如下,想要提取出红线画的那一行(假设该行是第60行) 展开
 我来答
大野瘦子
高粉答主

2019-10-21 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.1万
展开全部

这样:

% 实现思路:

% 1. 逐一以文本形式打开文件 file(n).txt ;

% 2. 逐行读出数据,并判断前9个字符是否 Timestamp ;

% 3. 如是,在下一行接收数据存入结果并退出此文件;

% 4. 如不是,继续往下读数据。

pt = 'd:\data\';      % 数据路径

ff = 'file';          % 数据文件前缀

ext = '.txt';         % 数据文件扩展名

stamp = 'Timestamp';  % 数据查找标志

n = 100;              % 文件个数

for k = 1:n

    id = num2str(k);

    files{k} = [pt ff id ext];  % 文件名列表

end

dt = [];

for k = 1:length(files)

    fds = 0;        % 查找结果

    fid = fopen(files{k});

    while ~feof(fid)

        tline = fgetl(fid)

        if fds==1

            dt = [dt; str2num(tline)];

            fclose(fid);

            break

        else

            if length(tline)>8

                fds = strcmp(stamp,tline(1:9));

            end

        end

    end    

end

扩展资料:

注意事项

它的基本语法是:

[A,B,C,...] = textread(filename,format)

[A,B,C,...] = textread(filename,format,N)

其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。

举例如下:

例1:myfile.txt 中的内容如下:

    1 2 3 4

    5 6 7 8

    9 10 11 12

相应的语句为:

filename = '.\myfile.txt';

[data1,data2,data3,data4]=textread(filename,'%n%n%n%n');

或者为

filename = '.\myfile.txt';

[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);

例2:myfile.txt 中的内容如下:

    1, 2, 3, 4

    5, 6, 7, 8

    9, 10, 11, 12

相应的语句为:

filename = '.\myfile.txt';

[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',');

这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。

例3:myfile.txt 中的内容如下:

    % this a comment

    1, 2, 3, 4

    5, 6, 7, 8

    9, 10, 11, 12

相应的语句为:

filename = '.\myfile.txt';

[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1);
这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。

例4:myfile.txt 中的内容如下:Sally Level1 12.34 45 Yes

相应语句为:

filename = '.\myfile.txt';

[names, types, x, y, answer] = textread(filename , '%s %s %f %d %s', 1) 

1、如果要忽略12.34这个浮点数:[names, types, y, answer] = textread(filename , '%s %s %*f %d %s', 1)。 %*f告诉textread跳过一个浮点数。

2、如果要忽略Level,只读取后面的数字:[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1) 

qingningleyun
推荐于2017-12-16 · TA获得超过5853个赞
知道大有可为答主
回答量:2991
采纳率:30%
帮助的人:3043万
展开全部
% 实现思路:
% 1. 逐一以文本形式打开文件 file(n).txt ;
% 2. 逐行读出数据,并判断前9个字符是否 Timestamp ;
% 3. 如是,在下一行接收数据存入结果并退出此文件;
% 4. 如不是,继续往下读数据。
pt = 'd:\data\';      % 数据路径
ff = 'file';          % 数据文件前缀
ext = '.txt';         % 数据文件扩展名
stamp = 'Timestamp';  % 数据查找标志
n = 100;              % 文件个数
for k = 1:n
    id = num2str(k);
    files{k} = [pt ff id ext];  % 文件名列表
end
dt = [];
for k = 1:length(files)
    fds = 0;        % 查找结果
    fid = fopen(files{k});
    while ~feof(fid)
        tline = fgetl(fid);
        if fds==1
            dt = [dt; str2num(tline)];
            fclose(fid);
            break
        else
            if length(tline)>8
                fds = strcmp(stamp,tline(1:9));
            end
        end
    end    
end
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式