아래의 옥타브 스크립트에서 데이터를 조작하고 옥타브로로드 한 다음 조작 된 데이터 (행렬)를 쓰려고 시도하면서 디렉토리의 파일을 반복하고 있습니다. 이름이 입력 파일 이름에서 파생 된 새 파일. 조작 된 데이터는 저장할 파일과 이름이 같은 변수 이름에 할당됩니다. 원하지 않는 모든 변수는 지워지고 저장 명령 은은 할당 된 단일 변수 행렬을 " 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
나는이 방법이 못생긴 것을 알고,하지만 난 명시 적으로 각 루프 동안 "ex_data"를 저장 한 경우 각각 다르게 때문에 이름 지정 충돌이있을 것이다 저장된 파일 "new_filename"에는 "ex_data"라는 데이터가 포함됩니다. 그런 다음 두 개 이상의 파일을로드하려는 경우로드 된 각 파일은 바로 앞에있는 파일에서로드 한 데이터 "ex_data"를 덮어 씁니다. 물론, 나는 내 문제에 대한보다 우아한 해결책에 열려있다. – babelproofreader
@babelproofreader 그렇다면 (항상 나는 이것을 선호한다)'d = load ("yourfilename")'파일을 구조체'd'에로드하고'd.ex_data'를 사용하여 액세스 할 수있다. – Andy
@babelproofreader btw, 이 답변 (첫 번째 부분)이 문제를 해결하지 못합니까? 만약 당신이 [MCVE] (https://stackoverflow.com/help/mcve)를 써야만한다. (당신의 코드가 최소한이 아니며 검증 가능하지 않다.) – Andy