загрузка и печать CSV-файлов - PullRequest
0 голосов
/ 26 мая 2011

Я новый пользователь Matlab, пытающийся загрузить мои 145 .csv-файлов в Matlab.Файлы имеют одинаковые имена и все содержат два столбца и 3000 строк.Мне нужно иметь возможность работать со столбцами 1 и 2 отдельно для каждого файла и составлять их графики (столбец 2 над 1).До сих пор я попробовал следующее (для папки, содержащей все файлы):

clear ;
direc = dir('*.csv');               
for i=1:length(direc)               
  x = csvread(direc(i).name,1);     
end

Мой х имеет только 3000x2 double, но мне нужно третье измерение ... и я не знаю, как получить доступпапка 'direc'.Я также попытался определить столбцы 1 и 2 каждого файла дополнительно:

time(i,:,:)=x(:,:,1) and 
signal(i,:,:)=x(:,:,2)

и построить его;но он возвращает график только для 1 набора данных (1 файл).

Может ли кто-нибудь помочь мне с этим?Я надеюсь, что дал всю необходимую информацию.

Спасибо!

1 Ответ

2 голосов
/ 26 мая 2011

Я не уверен, что вы подразумеваете под "как получить доступ к папке 'direc'" (direc является массивом struct, и вы уже обращаетесь к нему с помощью direc(index).fieldname, как и предполагалось), но я думаю, что основная проблема в том, что в цикле for каждая итерация перезаписывает предыдущее содержимое x, так что в итоге вы получаете содержимое последнего прочитанного файла.

Если все ваши CSV-файлы имеют одинаковые размеры, то вам нужно

x(:,:,i) = csvread(direc(i).name,1);

Затем вы можете получить доступ ко всем первым столбцам с помощью squeeze(x(:,1,:)) - только x(:,1,:) вернет трехмерный массив размером 3000x1x145 (используя числа, которые вы указали выше), squeeze создаст более удобную матрицу 3000x145.

Если не все ваши CSV-файлы имеют одинаковое количество строк и столбцов, вам необходимо использовать массив ячеек, и удобное индексирование не может быть использовано (кстати: signal(i,:,:)=x(:,:,2) действительно работал на двумерном x? ), либо заполните нулями, что может потребовать промежуточного шага для определения размера 3D-массива в конце.

...