2014-05-19 114 views
1

我工作的GUI和我有一個文件名爲「work.mid」。用戶可以進行一些修改它,當他們點擊保存按鈕,我希望它被保存爲「work1.mid」到「C:\ saved_datas \」。當他們第二次點擊該按鈕時,應該將其保存爲'work2.mid',第三次'work3.mid'等。下面的代碼我到目前爲止:在Matlab中保存文件時自動生成名稱?

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

搞清楚什麼應該在?????是我卡住的地方。

+2

你是基於什麼是工作文件的下一個數量決定上已經存在的工作文件,或只能通過點擊按鈕的數量? – Marcin

回答

0

這可能取決於你如何結構化你的GUI做一對夫婦的方式。您需要跟蹤按鈕被按下的次數。在按鈕回調中,您可以使用一個持久變量('count'),並在函數開始時將其加1。然後用filename = ['work'num2str(count)'.mid']構造文件名。或者,如果您使用OOP實現了GUI,則可以增加一個類成員變量。

要保存文件使用「保存()」功能與先前構造的文件名和給變量的引用。

檢查出持久性變量,保存完整文件和uiputfile額外信息的文檔。如果你沒有事先work*.mid或者如果你有內部c:\saved_datas\任意數量的連續work*.mid文件

+0

'int2str'可能會比在這種情況下'num2str'一個更好的選擇。 – horchler

+0

此外,如果用戶重新啓動Matlab或清除變量,則此方法可能會出現問題。 – horchler

+0

是的。這假定重命名計數在工作空間的每次清除時重置。或者,您必須掃描目錄中的文件,然後選取您離開的位置。 – Jaxor24

1

下面的代碼會工作。現在,如果這些文件不是按順序排列的,那麼可以對此代碼進行調整,只要讓我知道是否也想處理這種情況。

代碼在這裏上市 -

%// 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); 

爲了實現文件名的唯一性,有的還採用時間戳。這可以這樣來實現 -

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); 
相關問題