2014-11-30 3 views
1

В настоящее время у меня есть 72 .dat-файлы, которые можно загрузить в мое рабочее пространство matlab, используя следующий код;Наличие имени переменной зависит от имени импортируемого файла. Matlab

files = dir('*.dat'); 
for i=1:length(files) 
    eval(['load ' files(i).name ' -ascii']); 
    end 

Эта часть работает хорошо. Каждый файл содержит три столбца данных. Это первое время, а второе и третье - компоненты скорости U и V. Можно написать код, который будет импортировать все эти .dat-файлы в мое рабочее пространство и затем называть каждый столбец данных относительно имени файла. Например, каждый файл называется Point1, Point2 и т. Д. Вплоть до Point73. Возможно ли, что три столбца в .dat-файле Point1 могут быть названы Time1, U1 и V1 и названы Time2, U2 и V2, если их взять из файла Point2.dat?

В настоящее время я пытаюсь использовать этот фрагмент кода;

Time1 = Point1(1:1024, 1); 
U1 = Point1(1:1024, 2); 
V1 = Point1(1:1024, 3); 
Time2 = Point2(1:1024, 1); 
U2 = Point2(1:1024, 2); 
V2 = Point2(1:1024, 3); 

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

С уважением, Джерри

ответ

1

Согласно Generate Field Names from Variables, вы можете использовать оператор кронштейна.

Если вы используете struct, вы можете сделать так:

for i=1:3 
    varname = strcat('U',num2str(i)); 
    a.(varname) = i; 
end 

a = 

    U1 = 1 
    U2 = 2 
    U3 = 3 

Кроме того, вы должны стараться избегать eval, если это возможно, по причинам, указанным в Alternatives to the eval Function. Вместо этого вы можете загрузить переменные, подобные этому:

filename = strcat('Point',num2str(i),'.dat'); % filename = Point1.dat 
load(filename); 
+1

do no 'eval' :) – nkjt

Смежные вопросы