在matlab中使用字符串和整数读取文件

时间:2013-04-08 18:36:09

标签: file matlab file-io newline

我必须在Matlab中读取一个如下所示的文件:

  

D:\ Classified \ positive-videos \ vid.avi 163 3 14 32 54 79 105 130 155 202 216 224 238 250 262 288 288 322 357 369 381 438 457 478 499 525 551

  D:\ Classified \ positive-videos \ vid2.avi 163 3 14 32 54 79 105 130 155 202 216 224 238 250 262 288 288 322 357 369 381 438 457 478 499 525 551

有很多这样的线被换行分隔。我需要读取它:我丢弃视频名称和第一个整数的路径(例如第一行中的163)并读取数组中的所有数字,直到出现新行。怎么办呢?

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

fid = fopen('test1.txt','r');
my_line = fgetl(fid);
while(my_line ~= -1)
    my_array = regexp(my_line,' ','split');
    my_line = fgetl(fid);
    disp(my_array(3:end));
end
fclose(fid);

这会给你:

ans = 

  Columns 1 through 11

    '3'    '14'    '32'    '54'    '79'    '105'    '130'    '155'    '202'    '216'    '224'

  Columns 12 through 22

    '238'    '250'    '262'    '288'    '288'    '322'    '357'    '369'    '381'    '438'    '457'

  Columns 23 through 26

    '478'    '499'    '525'    '551'


ans = 

  Columns 1 through 11

    '3'    '14'    '32'    '54'    '79'    '105'    '130'    '155'    '202'    '216'    '224'

  Columns 12 through 22

    '238'    '250'    '262'    '288'    '288'    '322'    '357'    '369'    '381'    '438'    '457'

  Columns 23 through 26

    '478'    '499'    '525'    '551'

修改

对于数值矩阵结果,您可以将其更改为:

clear;
close;
clc;

fid = fopen('test1.txt','r');
my_line = fgetl(fid);
my_array = regexp(my_line,' ','split');
my_matrix = zeros(0, numel(my_array(3:end)));
ii = 1;
while(my_line ~= -1)
    my_array = regexp(my_line,' ','split');
    my_line = fgetl(fid);
    my_matrix = [my_matrix;zeros(1,size(my_matrix,2))];
    for jj=1:numel(my_array(3:end))
        my_matrix(ii,jj) = str2num(cell2mat(my_array(jj+2)));
    end
    ii = ii + 1;
end
fclose(fid);

这将是:

my_matrix =

     3    14    32    54    79   105   130   155   202   216   224   238   250   262   288   288   322   357   369   381   438   457   478   499   525   551
     3    14    32    54    79   105   130   155   202   216   224   238   250   262   288   288   322   357   369   381   438   457   478   499   525   551

答案 1 :(得分:2)

一种更简单的方法跟进:

fid = importdata(filename)
results = fid.data;

Ad maiora。

修改

由于您想要丢弃字符串后的第一个值,您必须调用

res = fid.data(:,2:end);

而不是results