Matlab: импорт нескольких числовых файлов csv .txt в массив с одной ячейкой

У меня есть несколько (скажем, N из них) файлов .txt, состоящих из числовых данных csv в матричной форме. Я хотел бы импортировать каждый из этих файлов данных в один (1 x N) массив ячеек, сохраняя при этом исходную форму матрицы. Если исходные данные небольшие, скажем, 3x3, то textscan выполняет работу следующим образом:

fileId = fopen('data1.txt');
A{1} = textscan(fileID, '%d %d %d', 'delimiter',',','CollectOutput',1);

(Это будет частью функции.) Но что, если мои файлы .txt содержат 100 столбцов данных? Я мог бы написать '%d' 100 раз в formatSpec, но должен же быть лучший способ?

Это кажется простой проблемой, но я новичок в Matlab и не знаю, как действовать дальше. Буду рад любым советам, спасибо!!


person user3761656    schedule 20.06.2014    source источник
comment
Почему бы не использовать csvread()?   -  person jerad    schedule 21.06.2014


Ответы (1)


В таких случаях с согласованными данными в каждом из этих текстовых файлов вы можете использовать importdata, не беспокоясь о спецификаторах формата. На его основе обсуждаются два подхода.

Подход 1

filenames = {'data1.txt' 'data2.txt' 'data3.txt'}; %// cell array of filenames
A = cell(1,numel(filenames)); %// Pre-allocation
for k = 1:numel(filenames)
    imported_data = importdata(char(filenames(k)));
    formatted_data = cellfun(@str2num, imported_data, 'uni', 0);
    A{k} = vertcat(formatted_data{:})
end

Подход 2

Предполагая, что эти текстовые файлы являются единственными файлами .txt в текущем рабочем каталоге, вы можете напрямую получить имена файлов и использовать их для хранения данных из них в массиве ячеек, например:

files = dir('*.txt');
A = cell(1,numel(files)); %// Pre-allocation
for k = 1:numel(files)
    imported_data = importdata(files(k).name);
    formatted_data = cellfun(@str2num, imported_data, 'uni', 0)
    A{k} = vertcat(formatted_data{:})
end
person Divakar    schedule 21.06.2014