【问题标题】:How to read file using textscan?如何使用 textscan 读取文件?
【发布时间】:2010-08-05 12:19:27
【问题描述】:

我有一个大的制表符分隔文件(10000 行,15000 列),想将其导入 Matlab。

我尝试通过以下方式使用 textscan 函数导入它:

function [C_text, C_data] = ReadDataFile(filename, header, attributesCount, delimiter, 

attributeFormats, attributeFormatCount)
AttributeTypes = SetAttributeTypeMatrix(attributeFormats, attributeFormatCount);
fid = fopen(filename);
if(header == 1)
    %read column headers
    C_text = textscan(fid, '%s', attributesCount, 'delimiter', delimiter);
    C_data = textscan(fid, AttributeTypes{1, 1}, 'headerlines', 1);
else
    C_text = '';
    C_data = textscan(fid, AttributeTypes{1, 1});
end


fclose(fid);

AttributeTypes{1, 1} 是一个字符串,它描述了每列的变量类型(在这种情况下,有 14740 个浮点类型变量和 260 个字符串类型变量,因此 AttributeTypes{1, 1} 的值是 '%f%f.. ....%f%s%s...%s,其中 %f 重复 14740 次,%s 重复 260 次)。

当我尝试执行时

>> [header, data] = ReadDataFile('data/orange_large_train.data.chunk1', 1, 15000, '\t', types, size);

header 数组似乎是正确的(列名已正确读取)。

data 是一个 1 x 15000 数组(只导入了第一行而不是 10000)并且不知道是什么导致了这种行为。

我猜问题出在这一行:

C_data = textscan(fid, AttributeTypes{1, 1});

但不知道哪里出了问题,因为帮助参考中有一个类似的例子。

如果你们中的任何人建议任何解决此问题的方法 - 如何读取所有 10000 行,我将不胜感激。

【问题讨论】:

    标签: matlab file-io text-files readfile


    【解决方案1】:

    我相信您的所有数据都在那里。如果您查看data 内部,则那里的每个单元格都应该包含整列 (10000x1)。您可以使用data{i} 将第 i 个单元格提取为数组。

    您可能希望将双精度数据和字符串数据分开。我不知道attributeFormats是什么,你可能可以使用这个数组。但你也可以使用AttributeTypes{1, 1}

    isdouble = strfind(AttributeTypes{1, 1}(2:2:end),'f');
    data_double = cell2mat(data(isdouble));
    

    要将字符串数据组合成一个字符串元胞数组,您可以这样做:

    isstring = strfind(AttributeTypes{1, 1}(2:2:end),'s');
    data_string = horzcat(data{isstring});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2013-09-12
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多