使用部分文件名和日期保存文件

Ben*_* B. 0 file-io matlab filenames date save

您好,我正在尝试找到一种方法将2个变量从我的工作区保存到文件中.我希望使用原始日期和当前日期将文件名放在一起.

我只想要变量的最大值,所以:

max(streaking)
Run Code Online (Sandbox Code Playgroud)

max(tap_total)
Run Code Online (Sandbox Code Playgroud)

原始文件名是:

3_FM001_02_05460 $ bandp指向$ 64_24000_FWD_1x1_PRI_PRI_PRI_PRI_15_17_ActivePixelMeans.csv

我想要使​​用的原始文件名的唯一部分是:

3_FM001_02_05460$BandP$64_24000_FWD_1x1
Run Code Online (Sandbox Code Playgroud)

这些可以保存在文本文件或电子表格中,没关系.

新文件名的示例如下所示:

3_FM001_02_05460$BandP$64_24000_FWD_1x1_7-26-2012
Run Code Online (Sandbox Code Playgroud)

也,

如果可以在文件中执行某些操作以显示哪个变量,例如:

Streaking: 1.272  % this would come from the variable max(streaking)

Tap_Total: 2.252  % this would come from the varaible max(tap_total)
Run Code Online (Sandbox Code Playgroud)

编辑:

% Construct a questdlg with three options

choice = questdlg('Would you like to save?', ...

'Save Options', ...

'Yes','No','Cancel','Cancel');

% Handle response

switch choice

case 'Yes'

    disp([choice ' processing.'])

    save_option = 1;
case 'No'
    disp([choice ' processing.'])
    save_option = 0;
case 'Cancel'
    disp('Canceled.')
    save_option = 2;
end

file_to_get = evalin( 'base', 'file_to_get' );
streaking = evalin( 'base', 'streaking' );
tap_total = evalin( 'base', 'tap_total' );

if save_option == 0
elseif save_option == 1

    max_streak = max(streaking);
    max_tap = max(tap_total);
    str_streak = mat2str(max_streak);
    str_tap = mat2str(max_tap);
    fname = file_to_get;
    pruned_fname = regexprep(fname,'_PRI(\w*).(\w*)','');
    new_fname = [pruned_fname '_' date '.csv'];
    path1 = '\\pfile01thn\bbruffey$\My Documents\analysis data\Banding and Streaking Results';
    fid = fopen([path1 new_fname], 'w');
    fprintf(fid,['Max Banding: %s\nMax Streaking: %s'],str_tap,str_streak)
    fclose(fid);
elseif save_option == 2
end
Run Code Online (Sandbox Code Playgroud)

Ben*_* A. 5

这将是一个使用regexprep命令修剪原始文件名的好地方.

例:

fname = '3_FM001_02_05460$BandP$64_24000_FWD_1x1_PRI_PRI_PRI_PRI_15_17_ActivePixelMeans.csv';
pruned_fname = regexprep(fname,'_PRI(\w*).(\w*)','');

pruned_fname =

3_FM001_02_05460$BandP$64_24000_FWD_1x1
Run Code Online (Sandbox Code Playgroud)

现在,关于regexprep我在这里使用的命令的注释.这特定于您在此处提供的文件名.因为看起来你想在第一次_PRI使用标签 后修剪掉所有东西,(\w*)这意味着[a-z A-Z _ 0-9]可以跟随任何组合.请注意,由于这是一个文件名,.因此有一个因此我添加了一个句点,然后用另一个句点(\w*)来完成csv.您可以在此处找到有关这些类型的运算符的更多信息.

现在您拥有了它,pruned_fname您可以简单地添加任何您想要的东西.因此,如果您想使用下划线添加日期到空间,只需执行以下操作:

new_fname = [pruned_fname '_' date '.csv'];
new_fname =

3_FM001_02_05460$BandP$64_24000_FWD_1x1csv_26-Jul-2012.csv
Run Code Online (Sandbox Code Playgroud)

现在您只需打开要写入的文件即可.您可能需要将路径追加到要保存的位置,我现在就打算调用它path.它会是这样的C:\Documents\

fid = fopen([path new_fname], 'w')
Run Code Online (Sandbox Code Playgroud)

现在,fid您拥有要写入的文件的ID.这应该是一个新文件,如果不是这样,如果你这样做,你将覆盖文件内容.请注意=)

接下来,您只需将前两行写入文件fwrite fprintf,只需命名一些可能的函数即可.

希望你能在那里安装!