2017-09-22 53 views
0

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

但是,这最后一个保存/写入命令没有发生,我不明白为什么不。没有特定的变量命令,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 

回答

1

save new_filename将当前工作区保存为文件名为“new_filename”的文件。我猜你想要的是创建一个文件,存储在“new_filename”文件名:

save (new_filename); 

您当前的“清除了所有我不需要再存储整个工作区”的做法是非常恕我直言丑陋,则应该明确存储ex_data如果这是唯一的部分宏愿想:

save (new_filename, "ex_data"); 
+0

我知道这种做法是丑陋的,但如果我明确地保存的每个循环中“ex_data”会有,因为每一个不同的命名冲突保存的文件“new_filename”将包含名为“ex_data”的数据。如果我然后想要加载这些文件中的两个或多个文件,我加载的每个文件都会覆盖已经由前一个文件加载的数据“ex_data”。当然,我愿意为我的问题提供更优雅的解决方案。 – babelproofreader

+0

@babelproofreader然后你应该(并且我总是更喜欢这个)使用'd = load(“yourfilename”)'这将文件加载到结构'd'中,并且可以通过'd.ex_data'访问它 – Andy

+1

@babelproofreader btw,这个答案(第一部分)不解决你的问题吗?如果不是的话,你应该写一个[MCVE](https://stackoverflow.com/help/mcve)(你的问题的代码不是最小的,也不是可验证的 – Andy