数学建模社区-数学中国

标题: matlab批量转换日线数据 [打印本页]

作者: 百年孤独    时间: 2013-7-18 14:04
标题: matlab批量转换日线数据
% deal data from specified data file
clear ;
clc

file1=dir('D:\new_yhzq_v21\vipdoc\sz\lday\sz00*.day');
a1=struct2cell(file1);
z1=a1(1,:)';
file2=dir('D:\new_yhzq_v21\vipdoc\sz\lday\sz300*.day');
a2=struct2cell(file2);
z2=a2(1,:)';
NameString=[z1;z2];
len=length(NameString);
for i=1:len

data_fname=strcat('D:\new_yhzq_v21\vipdoc\sz\lday\',NameString(i)) ; % 这里是文件名
%jump_distance = 2048 ;    % 这里是跳过的字节数
% 打开方式为二进制打开,其实'r'就行,matlab是默认二进制形式打开文件的
data_fname=data_fname{1};
file_id = fopen(data_fname, 'rb');
% 从文件开始跳过jump_distance个字节
%fseek(file_id, jump_distance, 'bof');
% 先手工构造一个1x10大小的矩阵
raw_data = [1:8];
while feof(file_id) == 0
    % 这就是大名顶顶的fread了,数据类型是int32,每次读入10个数
    % raw_array每次都是10x1的矩阵,ele_count为读入的数的个数(正常情况下应为512)
    [row_array, ele_count] = fread(file_id, 8, 'int32') ;
    if ele_count < 8 % elecount < 8代表数据不够,已经到了文件的结尾
        break ;
    else
        % 将10x1的row_array转置一下,变为1x512的矩阵
        row_array = row_array'  ;
        % 然后,将row_array追加到raw_data中
        raw_data = [raw_data; row_array] ;
    end
end
% get off the first line [1:1:10]
% 这里就是要把raw_data的第一行数据手工构造的那行数据给去掉,剩下的就都是文件中的数据了
raw_data(1,:)=[] ;
%创建stockdatainfo。.mat
stockdatainfo(:,1) = raw_data(:,1);                 %时间
stockdatainfo(:,2:5) = raw_data(:,2:5)/100;        %开盘价,最高价,最低价,收盘价
stockdatainfo(:,6) = raw_data(:,7);                 %成交量
%stockdatainfo(:,7) = round(raw_data(:,6)/10); %成交额

savestring=strcat('D:\用户目录\Documents\MATLAB\sz\',NameString(i));
name=savestring{1}(1:length(savestring{1})-4);
save (name,'stockdatainfo');  

% 关闭文件
fclose(file_id);
% delete other usless vars
% 这里是把用过的变量都删除掉
clear data_fname file_id fid ele_count i m n raw_data row_array ans stockdatainfo;
end
作者: 百年孤独    时间: 2013-7-18 14:06
在别人的基础上加工过来的,大家共同探讨。
抛砖引玉,有能读取分时数据的不妨分享下,谢谢。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5