Чтение с помощью конкретных строк Matlab из файла и преобразование их в числовые значения

Я создаю код в MATLAB, который оптимизирует исследование ANSYS, поэтому я хочу проверить выходной файл ANSYS и посмотреть, приемлемы ли результаты.

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

Давайте будем более конкретными. Ниже приведен пример выходного файла:

  • 1 строка блабла
  • 2 строка блабла

  • . . .

  • строка 10000 максимальных значений
  • строка 10001 значений1 2,31 4,56 5,69 8,64 0,25 9,70
  • .
  • .
  • строка 35000 максимальных значений
  • строка 35001 значения2 2,25
  • .
  • .
  • строка 70000 итоговых значений3 2503,4

Все, что я хочу сделать, это посмотреть, находятся ли первые два значения, выделенные жирным шрифтом, ниже пределов задачи (т.е. 9,70‹15 и 2,25‹7). Если это так, сохраните третье значение, выделенное жирным шрифтом в матрице. Если это не так, перейдите к следующей итерации.

Я новичок в программировании, и инструкции Matlab немного сбивают с толку.

Любые идеи будут приветствоваться!

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

**EDIT:** Это весь мой код:

    X1=linspace(26,60,3)';
    X2=linspace(104,70,3)';
    R=linspace(3,10,3)';
    vec={X1',X2',R'};
    combs=combvec(vec{:})';

    seqv=zeros(i,1);
    tic

    for i=1:length(combs);
        fid=fopen('C:\Users\vaioss\Desktop\ergasia ymk\test\aa.txt','w+');
        fprintf(fid,'*SET,X1,%7.4f \r\n',combs(i,1));
        fprintf(fid,'*SET,X2,%7.4f \r\n',combs(i,2));
        fprintf(fid,'*SET,R,%7.4f \r\n',combs(i,3));
        fclose(fid);

        fid=fopen('C:\Users\...','r+');
        fclose(fid);

        dos('"C:\Program Files\ANSYS Inc\v150\ANSYS\bin\winx64\ansys150.exe"  -p ...');     

        fid=fopen('C:\Users\...','r');

        for j=1:10152; 
            tline=fgetl(fid); 
        end

        match = textscan(tline, '%s %f %f %f %f %f', '\n')';
        seqv(i) = cell2mat(match(6,1));

        if seqv(i)>67.2887;
            fclose(fid);
            continue
        end


    end
    fclose all;
    toc

person dolving    schedule 24.06.2014    source источник
comment
Вы должны показать, что вы пытались до сих пор.   -  person Dang Khoa    schedule 24.06.2014
comment
Это зависит от того, всегда ли нужные значения находятся в одной строке и всегда ли структура этих строк одинакова. Если да, нажмите textscan.   -  person nkjt    schedule 24.06.2014
comment
@nkjt Я пробовал с textscan, но, к сожалению, нужные строки меняются на каждой итерации. Есть ли способ построчно сканировать файл в поисках строк с желаемым содержимым?   -  person dolving    schedule 25.06.2014
comment
Есть ли что-нибудь в начале нужных вам строк, что могло бы их идентифицировать? например есть ли на самом деле значения1 или какой-либо другой текст перед нужными вам числами?   -  person nkjt    schedule 26.06.2014
comment
@nkjt Да, формат вывода такой же, как в примере, который я разместил выше.   -  person dolving    schedule 26.06.2014


Ответы (1)


Если у вас есть неизвестное количество строк разного формата перед нужной вам информацией, вероятно, самый простой способ — это строки

1) Используйте fgetl для выборки строк по одной (очевидно, если вы знаете, что можете безопасно пропустить первые 3000 строк или что-то еще, сделайте это)

2) Используйте strfind, чтобы проверить, попали ли вы в строку values1. Если это так, проанализируйте строку и проверьте, находится ли значение в допустимых пределах.

Затем повторите для values2 и values3, если требуется, или перейдите к следующему файлу и повторите. Если есть шанс, что у вас есть файлы в списке, которые не содержат всех этих строк, вам также понадобится какой-то способ обработки случая, когда вы нажимаете eof, прежде чем найти их.

person nkjt    schedule 26.06.2014
comment
@nkjt Большое спасибо, вы лучшие!! - person dolving; 27.06.2014