首页 文章

在matlab中逐行读取文件

提问于
浏览
1

我有一个MATLAB代码的输入文件,它列出了网格中相邻顶点的索引 . 对于与文件的行号具有相同等级的顶点,我列出了同一行上的相邻顶点索引 .
例如

45, 56, 22
44, 12
12, 23,56,76

我想在这个文件中读入我的代码作为单元格数组 . 如下 .

NBR = { {45,56,22}, {44,12}, {12,23,56,76} }

有没有MATLAB功能来完成这个?

2 回答

  • 1

    新答案:

    我终于找到了一个不错的解决方案 . 实际上, importdata 在这里很有帮助,谢谢@Divakar .

    >> C = importdata('file','')
    C = 
        '45, 56, 22'
        '44, 12'
        '12, 23,56,76'
    >> C = cellfun(@str2num, C, 'UniformOutput', 0)
    C = 
        [1x3 double]
        [1x2 double]
        [1x4 double]
    >> C = cellfun(@(x) mat2cell(x, [1], ones(size(x,2),1)), C, 'UniformOutput', 0)'
    C = 
        {1x3 cell}    {1x2 cell}    {1x4 cell}
    >> NBR = { {45,56,22}, {44,12}, {12,23,56,76} };
    >> isequal(NBR,C)
    ans =
         1
    

    老答案:

    不幸的是 importdata 对于这个任务来说似乎太有限了,我找不到用 textscan 读取整个文件然后应用一些 cellfun 的好方法 . csvread 存在插入0的问题,其中应该有 NaN 值,因此对于实际包含零的数据集不起作用 .

    所以老式的方式看起来像这样:

    fid = fopen('file');
    ind = 1;
    line = fgetl(fid); % #get first line
    
    while line ~= -1; % #read until end of file
        cont = cellfun(@str2num, strsplit(line, ','));
        cont = mat2cell(cont, [1], ones(size(cont,2),1));
        C{ind} = cont;
        line = fgetl(fid);
        ind = ind + 1;
    end
    
    fclose(fid);
    

    演示,我的脚本保存为 readin.m

    >> readin
    >> C
    C = 
        {1x3 cell}    {1x2 cell}    {1x4 cell}
    >> C{1}
    ans = 
        [45]    [56]    [22]
    >> C{2}
    ans = 
        [44]    [12]
    >> C{3}
    ans = 
        [12]    [23]    [56]    [76]
    >> NBR = {{45,56,22}, {44,12}, {12,23,56,76}};
    >> isequal(NBR,C)
    ans =
         1
    
  • 2

    您可以使用fgets在matlab中逐行读取文件

    fid = fopen('yourfile');
    
    tline = fgets(fid);
    while ischar(tline)
        disp(tline)
        tline = fgets(fid);
    end
    
    fclose(fid);
    

相关问题