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

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

这样:

% 实现思路:

% 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) 

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
% 实现思路:
% 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

本回答被提问者和网友采纳
相似回答