在线时间 2759 小时 最后登录 2017-9-15 注册时间 2011-4-3 听众数 538 收听数 4 能力 80 分 体力 1764 点 威望 27 点 阅读权限 150 积分 5990 相册 0 日志 0 记录 5 帖子 6675 主题 3503 精华 8 分享 6 好友 1721
TA的每日心情 开心 2017-2-7 15:12
签到天数: 691 天
[LV.9]以坛为家II
群组 : 2013年国赛赛前培训
群组 : 2014年地区赛数学建模
群组 : 数学中国第二期SAS培训
群组 : 物联网工程师考试
群组 : 2013年美赛优秀论文解
% 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
zan