Добавить данные из нескольких файлов в массив Matlab - PullRequest
1 голос
/ 20 сентября 2011

Здравствуйте, мне нужна ваша помощь, чтобы добавить все данные, которые я прочитал из многих файлов, в матрицу.Я сделал следующий скрипт

path='C:\Users\Kostas\Documents\MATLAB\';
filefolder=strcat(path,'MSL*.txt');
files=dir(filefolder);
k=0;
for i=1:length(files)
    filename=strcat(path,files(i).name);    
    %load the filename and create vectors of height (Z),
    %lat and lon
    newData=importdata(filename,'\t', 1);
    vars = fieldnames(newData);
for j = 1:length(vars)
    assignin('base', vars{j}, newData.(vars{j}));
end 
    timeas=data(:,1);
    lat=data(:,2);
    lon=data(:,3);
    Z=data(:,4);
  %  daten=(timeas/24)+doy;
   k=k+1; 
%append data to matrix Teff_series
    Teff_series(k,:)= [timeas lat lon Z];
end

сообщение об ошибке, которое я получаю при запуске этого скрипта:

??? Subscripted assignment dimension mismatch.

Error in ==> te at 31
    Teff_series(k,:)= [lat lon Z];

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Позвольте привести пример:

%# get the list of files
fpath = 'C:\Users\Amro\Desktop\';
files = dir( fullfile(fpath,'file*.dat') );
files = strcat(fpath,{files.name}');

%# read data from all files and store in cell array
Teff_series = cell(numel(files),1);
for i=1:numel(files)
    newData = importdata(files{i}, '\t', 1);
    Teff_series{i} = newData.data;
end

%# combine all into a matrix
data = vertcat(Teff_series{:});
colNames = newData.colheaders;

%# extract columns as vectors
t = data(:,1);
lat = data(:,2);
lon = data(:,3);
Z = data(:,4);

Если я использую эти образцы файлов данных:

file1.dat

t   lat lon Z
1   2   3   4
2   3   4   5
4   5   6   6

file2.dat

t   lat lon Z
4   5   6   6
2   3   4   5
1   2   3   4

Я получаю следующие результаты:

>> colNames
colNames = 
    't'    'lat'    'lon'    'Z'

>> data
data =
     1     2     3     4
     2     3     4     5
     4     5     6     6
    40    50    60    60
    20    30    40    50
    10    20    30    40
1 голос
/ 20 сентября 2011

Ошибка указывает на то, что левая часть выражения равна - в этом случае: Teff_series (k,:)

имеет размер, отличный от правого:

[lat lon Z]

Одним из способов устранения этой проблемы является выполнение команды:

dbstop if all error

и затем повторно запустите ваш скрипт. Он остановит отладчик в том месте, где выдается ошибка, и тогда вы сможете выяснить разницу в размерах.

Надеюсь, это поможет.

...