Загрузка текстового файла в MATLAB? - PullRequest
3 голосов
/ 09 января 2012

У меня есть разделенный запятыми файл с 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 ]

4 голосов
/ 10 января 2012

Создайте спецификатор формата для текстов, основываясь на количестве и типах столбцов, и попросите его прочитать файл для вас.

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};
3 голосов
/ 09 января 2012

Например, если у вас есть следующие данные в файле с именем 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
3 голосов
/ 09 января 2012

Вы можете использовать функцию textcan .Например:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...