2015-09-21 3 views
0

Допустим, у меня есть файл .mat, и я знаю, что каждая из переменных в нем есть XY перед ним (например, XYJanuary, XYFebruary, XYMarch и так далее ...) и я просто хочу удалить XY.Удалить первые 2 буквы из рабочего пространства переменных

Я посмотрел на this и пытался копировать его, но это добавляет XY к моей переменной (XYXYJanuary, XYXYFebruay, ...), но я хочу, чтобы это было просто (January, Februay, ...).

x= load('file.mat');        % Load into structure x 
names=fieldnames(x);        % names of the variables 
    for iname=1:length(names)      % start the loop 
    x.(['XY', names{iname}]) = x.(names{iname}); % PROBLEM 
    x = rmfield(x, names{iname}); 
    end 
save ('newfile.mat', '-struct', 'x');   %save 

ответ

1
x= load('file.mat');        % Load into structure x 
names=fieldnames(x);        % names of the variables 
    for iname=1:length(names)      % start the loop 
    x.([names{iname}(3:end)]) = x.(names{iname}); % No more PROBLEM 
    x = rmfield(x, names{iname}); 
    end 
save ('newfile.mat', '-struct', 'x');    % save 

Вы добавили 'XY' к LHS вашей линии, что делает его добавить его к окончательному решению. То, что я сделал, - отрубить первые две записи, но сохранить остальное, следовательно, (3:end). Теперь это работает на тестовом примере, который я создал.

+0

Это прекрасно работает, но могу ли я спросить, почему вы не можете использовать «XY» на RHS ... 3: end - это, по сути, то же самое ... и делать x. ([Names {iname}, (' XY ')]) помещает XY в конец переменной .... – Bala

+0

Вы можете, но это будет * добавить * 'XY' к вашим данным. Это не одно и то же, поскольку вы хотите удалить символы, а не добавлять их. Удаление вещей должно быть сделано путем манипулирования индексами, как я здесь. – Adriaan

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