Rename variable throughout project/directory

I have inherited a project (a director and a subdirectory of matlab files) where variable names are unhelpful. To make this clear to myself I want to rename some variables.
I know I can rename a variable throughtout a single file with shift enter or search. But it's tedious to do this for every file. Is there a way to rename/search and replace throughout a project?

4 comentarios

Stephen23
Stephen23 el 8 de Dic. de 2022
Editada: Stephen23 el 8 de Dic. de 2022
"But it's tedious to do this for every file."
But the variable names in other files should not matter... unless the project is based on scripts (ugh, shudder) or lots of ASSIGNIN (ugh ugh, shudder) or some other very unfortunate practices that are best avoided by using functions properly.
Scripts are good for playing around with, but for anything that you want to use for longer than a day, functions or classes are the easy, reliable, repeatable, testable, recommended approach. Probably you should consider refactoring the code:
Jason Klebes
Jason Klebes el 8 de Dic. de 2022
The variables names are often fields in structs, that are passed around and are used/set by multiple functions - these really need to be renamed everywhere for the code to run. Maybe something wrong with this approach, but I'd like to make sense of things by renaming variables first.
In other cases, the original author names the same concept the same thing in many functions, it's not necessary to rename everywhere to run but would be nice for readability and consistancy.
Stephen23
Stephen23 el 8 de Dic. de 2022
Editada: Stephen23 el 8 de Dic. de 2022
"The variables names are often fields in structs"
Aaah, so structure fieldnames, not variables names. This important information is missing from your question.
"Maybe something wrong with this approach"
No, passing structure is a recommended way of passing lots of parameters between workspaces.
" Is there a way to rename/search and replace throughout a project?"
I recommend using Notepad++ features:
  • search and replace in multiple files under some folder
  • filters for filenames, extensions, etc.
  • search pattern using literals or regular expressions.
Stefan Schuberth
Stefan Schuberth el 21 de Mzo. de 2023
Movida: Bruno Luong el 21 de Mzo. de 2023
Is this a joke? Every modern IDE can do that. This is called refactoring. Finally give more resources to Matlab's IDE department so they can write a worthy interface. Take a look at "Microsoft Code". Even Notepad++ can handle it! Just not Matlab.

Iniciar sesión para comentar.

 Respuesta aceptada

Bruno Luong
Bruno Luong el 8 de Dic. de 2022
Editada: Bruno Luong el 8 de Dic. de 2022

0 votos

Use grep sed command of linux system. There light be some linux shell (cygwin?) on windows that you can install if you are under Windows.

Más respuestas (1)

Jan
Jan el 8 de Dic. de 2022
You can modify the field names using regexprep :
% Get a list of M-files:
List = dir(fullfile(Folder, '**', '.m'));
for k = 1:numel(List)
file = fullfile(List(k).folder, List(k).name);
str = fileread(file);
str = regexprep(str, 'Struct\.oldfield\s', '.newfield ');
writelines(str, file);
end
This does not consider sub-structs, or a directly following parenthesis or equal character. Hopefully a regexp hero can post a more powerful pattern.
But keep in mind, that the problem is not trivial. This modifies and comments strings also. After the conversion you should compare the new file with the original one and check all changes manually.

Categorías

Más información sobre Variables en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 8 de Dic. de 2022

Movida:

el 21 de Mzo. de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by