2016-05-08 2 views
0

Я хочу прочитать данные файла размером около 60 МБ в matlab в некоторых переменных, но я получаю ошибки. Это мой код:Чтение данных в matlab с циклом for

clear all ; 
    clc ; 
    % Reading Input File 
    Dataz = importdata('leak0.lis'); 
    %Dataz = load('leak0.lis'); 

    for k = 1:1370 
foundPosition = 1 ; 
for i=1:size(Dataz,1) 
    strp = sprintf('I%dz=',k); 
    fprintf(strp); 
    findValue = strfind(Dataz{i}, strp) ; 
    if ~isempty(findValue) 
     eval_param = strp + '(foundPosition) = sscanf(Dataz{i},''%*c%*c%*f%*c%*c%f'') ;'; 
     disp(eval_param); 
     % str(foundPosition) = sscanf(Dataz{i},'%*c%*c%*f%*c%*c%f') ; 
     eval(eval_param); 
     foundPosition = foundPosition + 1 ; 
    end 
end 
end 

Когда я отлажен, я обнаружил, что Датас пуст & поэтому не переходят к следующей строке. Я заменяю его на fopen, загрузку & и т. Д., Но это не сработало.

+0

Waht является форматом содержимого файла? –

+0

это фрагмент файла: *** monte carlo index = 1 *** i1z = -17.3439n i2z = -24.7754p – lili94

+0

Без петли на K я получил данные в рабочем пространстве Matlab. Я имею в виду, если я делаю это для каждого из k, но проблема в том, что когда я пишу 1370 раз из следующего кода, программа matlab переходит в состояние занятости в течение нескольких часов и не отвечает: foundPosition = 1; для i = 1: размер (данные, 1) findValue = strfind (данные {i}, 'i11p ='); if ~ isempty (findValue) i11p (foundPosition) = sscanf (Данные {i}, '% * c% * c% * f% * c% * c% f'); foundPosition = foundPosition + 1; end end – lili94

ответ

0

From the Matlab help files, данные импорта, скорее всего, не работают, потому что они не понимают ваш формат файла.
Из файлов справки

имя и расширение файла для импорта, указанных в виде строки. Если importdata распознает расширение файла, он вызывает вспомогательную функцию MATLAB, предназначенную для импорта связанного формата файла (например, загрузка MAT-файлов или xlsread для электронных таблиц). В противном случае importdata интерпретирует файл как разделительный ASCII-файл.

Для файлов ASCII и таблиц importdata ожидает найти числовые данные в прямоугольной форме (то есть, как в матрице). Текстовые заголовки могут появляться сверху или слева от числовых данных, следующим образом:

Если предположить, что ваши .lis файлы на самом деле текст с разделителями. Вы должны отрегулировать разделитель в вызове importdata, чтобы Matlab мог понять ваш файл.

filename = 'myfile01.txt'; 
delimiterIn = ' '; 
headerlinesIn = 1; 
A = importdata(filename,delimiterIn,headerlinesIn);