2016-02-02 3 views
0

Я хочу загрузить ASCII-файл, используя следующий синтаксис:Получить выходное имя переменного из функции нагрузки нагрузки в Matlab

load('10-May-data.dat') 

Возвращенных выходным переменное имя должно быть X10_May_data.

Есть ли способ получить имя переменной в Matlab? Если я хочу использовать регулярное выражение для перевода, как я могу это сделать? Например, поставьте X перед любыми символами подчеркивания или цифр в имени файла и замените любые другие неалфавитные символы символами подчеркивания.

+2

Как был создан '' -May-data.dat''? С 'save'? Это на самом деле MAT-файл, несмотря на расширение? – horchler

+2

И что означает 's = load ('10 -May-data.dat ')' return? Или вы просто пытаетесь сделать 'fname = '10 -May-data.dat ';' 'str = strsplit (fname, {' - ','. '});' Vname = [' X 'strjoin (str (1: конец 1), '_')] '? – horchler

+2

И если вы пытаетесь сделать то, что сказал @horchler: пожалуйста, не хочу этого делать. –

ответ

0

Функция who возвращает имена переменных в matlab. Он также имеет встроенный в регулярное выражение для выбора определенных элементов:

X10_May_data = [1 2 3]; 
save X10_May_data.mat X10_May_data 
clear 
load X10_May_data.mat 
w = who('-regexp','X*') 

w = 

    'X10_May_data' 

Вы можете работать на w{1} делать какие-либо замены, которые вы хотите. Например, можно использовать функцию strrep для простых модификаций строки:

newvar = strrep(w{1},'May','latest') 

newvar = 

X10_latest_data 

Для более сложных модификаций, использовать regexp или regexprep. Если у вас есть новое имя, вы можете назначить его eval:

eval([newvar '=' w{1}]) % like typing "X10_latest_data = X10_May_data" 

X10_latest_data = 

    1  2  3 

[править] PS Я согласен с комментариями, что eval обычно плохая идея; но иногда вам просто нужно получить что-то сделано :) Для альтернативных подходов см. matlab page on the topic.

+1

[NOOOOO] (https://static.squarespace.com/static/51b3dc8ee4b051b96ceb10de/51ce6099e4b0d911b4489b79/51ce61bde4b0d911b449f30f/1348785466046/1000w/Luke-No-Supercut-Star -Wars.jpg) –

+1

Использование 'eval' почти всегда ужасная идея. Пожалуйста, см. [Этот мой ответ] (http://stackoverflow.com/questions/32467029/how-to-put-these-images-together/32467170#32467170), где я подробно объясняю это. – Adriaan

+1

RE: ваше редактирование. Вы можете получить * что-то сделанное * так же быстро, не используя ленивый код, который сложно для людей использовать/отлаживать и невозможно для компилятора JIT MATLAB для оптимизации. – excaza

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