0

我必须在 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-video\vid.2 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)并读取数组中的所有数字,直到出现新行。如何才能做到这一点?

4

2 回答 2

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
于 2013-04-08T18:59:29.907 回答
2

一种更简单的方法如下:

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

广告 maiora。

编辑

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

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

而不是results.

于 2013-04-08T20:09:53.423 回答