在MATLAB中加载文本文件?

时间:2012-01-09 11:43:59

标签: matlab file-io

我有一个逗号分隔的文件,包含182行和501列,其中500列的类型为数字(要素),而最后一列是字符串(标签)。

示例:182x501维度

1,3,4,6,.........7, ABC
4,5,6,4,.........9, XYZ
3,4,5,3,.........2, ABC 

如何加载此文件,使其包含一个数据集,其中包含一个矩阵B,其中包含作为我的要素的数字,以及一个包含字符串作为标签的向量C

d = dataset(B, C);

3 个答案:

答案 0 :(得分:4)

根据列的数量和类型为textscan构建格式说明符,并让它为您读取文件。

nNumberCols = 500;
format = [repmat('%f,', [1 nNumberCols]) '%s'];
fid = fopen(file);
x = textscan(fid, format);
fclose(fid);
B = cat(2, x{1:nNumberCols});
C = x{end};

答案 1 :(得分:3)

您可以使用textscan功能。例如:

fid = fopen('test.dat');

% Read numbers and string into a cell array
data = textscan(fid, '%s %s');

% Then extract the numbers and strings into their own cell arrays
nums = data{1};
str  = data{2};

% Convert string of numbers to numbers
for i = 1:length(str)
    nums{i} = str2num(nums{i}); %#ok<ST2NM>
end

% Finally, convert cell array of numbers to a matrix
nums = cell2mat(nums);

fclose(fid);

请注意,我已根据您指定的文件格式在此处做了一些假设。例如,我假设在数字后面的逗号后面没有空格,但是在每行末尾的字符串前面都有一个空格。

通过使用更加考虑的格式说明符(textscan的第二个参数),可以使上述代码更加灵活。请参阅Basic Conversion Specifiers文档中的textscan部分。

答案 2 :(得分:3)

例如,如果您在名为data.txt的文件中包含以下数据:

1,3,4,6,7, ABC
4,5,6,4,9, XYZ
3,4,5,3,2, ABC 

您可以使用代码

将其读入矩阵B和单元格数组C
N = 5; % Number of numeric data to read
fid = fopen('data.txt');
B = []; C = {};
while ~feof(fid)  % repeat until end of file is reached
  b = fscanf(fid, '%f,', N); % read N numeric data separated by a comma
  c = fscanf(fid, '%s', 1);  % read a string
  B = [B, b];
  C = [C, c];
end
C
B
fclose(fid);

给予

C = 
  'ABC'    'XYZ'    'ABC'
B =
 1     4     3
 3     5     4
 4     6     5
 6     4     3
 7     9     2