Octave 分配的倍频程变量未保存到文件

Octave 分配的倍频程变量未保存到文件,octave,Octave,在下面的Octave脚本中,我循环遍历目录中的文件,将它们加载到Octave中以对数据进行一些操作,然后尝试将被操作的数据(矩阵)写入一个新文件,该文件的名称源自输入文件的名称。操纵的数据被指定给一个变量名,该变量名与要保存数据的文件名相同。所有不需要的变量都被清除,save命令应将单个分配的变量矩阵保存/写入文件“new_filename” 但是,最后一个save/write命令没有执行,我不明白为什么不执行。如果没有特定的变量命令,save函数应该保存作用域中的所有变量,在这种情况下,只保存

在下面的Octave脚本中,我循环遍历目录中的文件,将它们加载到Octave中以对数据进行一些操作,然后尝试将被操作的数据(矩阵)写入一个新文件,该文件的名称源自输入文件的名称。操纵的数据被指定给一个变量名,该变量名与要保存数据的文件名相同。所有不需要的变量都被清除,save命令应将单个分配的变量矩阵保存/写入文件“new_filename”

但是,最后一个save/write命令没有执行,我不明白为什么不执行。如果没有特定的变量命令,save函数应该保存作用域中的所有变量,在这种情况下,只保存一个矩阵。为什么这不起作用

clear all ;

all_raw_OHLC_files = glob( "*_raw_OHLC_daily" ) ; % cell with filenames matching *_raw_OHLC_daily

for ii = 1 : length( all_raw_OHLC_files ) % loop for length of above cell

filename = all_raw_OHLC_files{ii} ; % get files' names

% create a new filename for the output file
split_filename = strsplit( filename , "_" ) ;
new_filename = tolower( [ split_filename{1} "_" split_filename{2} "_ohlc_daily" ] ) ;

% open and read file
fid = fopen( filename , 'rt' ) ;
data = textscan( fid , '%s %f %f %f %f %f %s' , 'Delimiter' , ',' , 'CollectOutput', 1 ) ;
fclose( fid ) ;
ex_data = [ datenum( data{1} , 'yyyy-mm-dd HH:MM:SS' ) data{2} ] ; % extract the file's data

% process the raw data in to OHLC bars
weekday_ix = weekday( ex_data( : , 1 ) ) ;
% find Mondays immediately preceeded by Sundays in the data
monday_ix = find( ( weekday_ix == 2 ) .* ( shift( weekday_ix , 1 ) == 1 ) ) ;
sunday_ix = monday_ix .- 1 ;

% replace Monday open with the Sunday open
ex_data( monday_ix , 2 ) = ex_data( sunday_ix , 2 ) ;

% replace Monday high with max of Sunday high and Monday high
ex_data( monday_ix , 3 ) = max( ex_data( sunday_ix , 3 ) , ex_data( monday_ix , 3 ) ) ;

% repeat for min of lows
ex_data( monday_ix , 4 ) = min( ex_data( sunday_ix , 4 ) , ex_data( monday_ix , 4 ) ) ;

% combines volume figures
ex_data( monday_ix , 6 ) = ex_data( sunday_ix , 6 ) .+ ex_data( monday_ix , 6 ) ;

% now delete the sunday data
ex_data( sunday_ix , : ) = [] ;

assignin( "base" , tolower( [ split_filename{1} "_" split_filename{2} "_ohlc_daily" ] ) , ex_data )

clear ans weekday_ix sunday_ix monday_ix ii filename split_filename fid ex_data data all_raw_OHLC_files

% print to file
save new_filename

endfor

save new\u filename
将当前工作区保存到文件名为“new\u filename”的文件中。我猜您想要的是创建一个文件名存储在“new_filename”中的文件:

您当前的“清除所有我不需要的内容,然后存储整个工作区”的方法非常难看,您应该显式地存储
ex_数据
,如果这是唯一需要的部分:

save (new_filename, "ex_data");

我知道这种方法很难看,但如果我在每次循环中显式保存“ex_数据”,就会出现命名冲突,因为每个不同保存的文件“new_filename”都会包含名为“ex_data”的数据。如果我想加载两个或多个文件,则加载的每个文件都会覆盖数据“ex_data”已由前一个文件加载的。当然,我愿意为我的问题找到一个更优雅的解决方案。@babelproofreader你应该(我总是喜欢这样)使用
d=load(“yourfilename”)
这将文件加载到结构
d
中,你可以使用
d.ex_数据
@babelproofreader顺便说一句,这个答案(第一部分)解决了你的问题吗?如果不是的话,你应该写一个(你的问题代码不是最小的,也不是可验证的是的,你答案的第一部分确实解决了我眼前的问题,这就是为什么我投票支持你的答案。几天后,如果没有其他投稿人在其他总体方法方面提供“更好”的答案,我将正式接受你的答案。
save (new_filename, "ex_data");