user3654469
user3654469

Reputation: 11

Auto generate a name when saving file in Matlab?

I am working on a GUI and I have a file named 'work.mid'. The user can make some modifications to it and when they click the save button I want it to be saved as 'work1.mid' to 'c:\saved_datas\'. When they click that button second time, it should save it as 'work2.mid', on the third time 'work3.mid' and so on. Here's the code I have so far:

nmat = readmidi_java('work.mid');
Name = fullfile('c:\saved_datas\', '?????');
writemidi_java(nmat, Name);

Figuring out what should go at ????? is where I'm stuck.

Upvotes: 1

Views: 196

Answers (2)

Divakar
Divakar

Reputation: 221524

The following code would work if you have no prior work*.mid or if you have any number of sequential work*.mid files inside c:\saved_datas\. Now, if the files are not in sequence, this code could be tweaked for that, just let me know if you would like to handle that case too.

Code listed here -

%// Parameters
org_filename = 'work.mid';
main_dir = 'c:\saved_datas\'; %//'

%// Your code
nmat = readmidi_java(org_filename);

%// Added code
[~,filename_noext,ext] = fileparts(org_filename)
filenames = ls(strcat(main_dir,filename_noext,'*',ext))
new_filename = strcat(filename_noext,num2str(size(filenames,1)+1),ext)
Name = fullfile(main_dir,new_filename)

%// Your code
writemidi_java(nmat, Name);

For achieving uniqueness of filenames, some also use timestamps. This could be implemented like this -

org_filename = 'work.mid'; %//'
main_dir = 'c:\saved_datas\'; %//'

[~,filename_noext,ext] = fileparts(org_filename)
new_filename = strcat('filename_noext','-',datestr(clock,'yyyy-mm-dd-hh-MM-SS'),ext)
Name = fullfile(main_dir,new_filename);

Upvotes: 1

Jaxor24
Jaxor24

Reputation: 71

This could be done a couple of ways depending on how you have structured your GUI. You need to keep track of how many times the button has been pressed. In the callback for the button you could use a persistent variable ('count') and increment it by one at the start of the function. Then construct the filename with filename = ['work' num2str(count) '.mid']. Alternatively you could increment a class member variable if you have implemented your GUI using OOP.

To save the file use the 'save()' function with the previously constructed file name and a reference to the variable.

Check out the documentation for persistent variables, save, fullfile and uiputfile for extra info.

Upvotes: 0

Related Questions