%读取带变量名的数据集的程序,寇文红2007年5月24日于畅春园。
%这是一个读取数据集的程序,目的是把如下带变量名的数据矩阵读进MATLAB。
% <DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
% 20040615,212000,0.6987,0.6987,0.6986,0.6986,2
% 20040615,212100,0.6987,0.6987,0.6987,0.6987,1
% 20040615,212200,0.6988,0.6988,0.6987,0.6987,2
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。
% <DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
% 20040615,212000,0.6987,0.6987,0.6986,0.6986,2
% 20040615,212100,0.6987,0.6987,0.6987,0.6987,1
% 20040615,212200,0.6988,0.6988,0.6987,0.6987,2
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。
tic
clear
clear
%用如下方来来读取,把CollectOutput设为0,则MATLAB会把每一列的数字返回成一个数组。
fid = fopen('E:\v time deformation\EURUSD.txt','r'); %打开要读取的数据集,'r'表示要读取打开文件,r是默认值。
C_text = textscan(fid,'%s',7, 'delimiter',','); %上句读取第一行的文字,即变量名。
C_data = textscan(fid,'%f %f %f %f %f %f %f','delimiter',',','CollectOutput', 0);
%上句读取第2行以后的数据矩阵。
%其中设定'delimiter',','是因为原文件里每两个数据之间是用逗号隔开的。
%设定'CollectOutput'为默认值0,这样MATLAB把各列分别当作数组返回。
fid = fopen('E:\v time deformation\EURUSD.txt','r'); %打开要读取的数据集,'r'表示要读取打开文件,r是默认值。
C_text = textscan(fid,'%s',7, 'delimiter',','); %上句读取第一行的文字,即变量名。
C_data = textscan(fid,'%f %f %f %f %f %f %f','delimiter',',','CollectOutput', 0);
%上句读取第2行以后的数据矩阵。
%其中设定'delimiter',','是因为原文件里每两个数据之间是用逗号隔开的。
%设定'CollectOutput'为默认值0,这样MATLAB把各列分别当作数组返回。
fclose(fid);
% C_text{:} %这一句返回数组C_text的全部内容(元素)。
% C_text{1} %这一句返回数组C_text第1列的内容(元素)。
% C_text(:) %这一列返回数组C_text的整体结构。
% C_text(1) %这一句返回数组C_text第1列的结构:{8x1 cell}
% C_text{1} %这一句返回数组C_text第1列的内容(元素)。
% C_text(:) %这一列返回数组C_text的整体结构。
% C_text(1) %这一句返回数组C_text第1列的结构:{8x1 cell}
% C_data{:} %查看数组C_data的全部元素,以一列一列的形式返回。
% C_data{1} %这一句返回数组C_fata第1列的内容(元素)。是一个列向量。
% C_data{4} %这一句返回数组C_data的第4列的元素。是一个列向量。
% C_data(:) %这一列返回数组C_data的整体结构。
% C_data(1) %这一句返回数组C_data的第1列的结构。
% C_data{1} %这一句返回数组C_fata第1列的内容(元素)。是一个列向量。
% C_data{4} %这一句返回数组C_data的第4列的元素。是一个列向量。
% C_data(:) %这一列返回数组C_data的整体结构。
% C_data(1) %这一句返回数组C_data的第1列的结构。
%现在可以把数组C_data的各列赋予新的名称。例如:
date = C_data{1};
time = C_data{2};
open = C_data{3};
high = C_data{4};
low = C_data{5};
close = C_data{6};
vol = C_data{7}; %以上分别是日期,时点,开盘价,最高价,最低价,收盘价,交易次数。
date = C_data{1};
time = C_data{2};
open = C_data{3};
high = C_data{4};
low = C_data{5};
close = C_data{6};
vol = C_data{7}; %以上分别是日期,时点,开盘价,最高价,最低价,收盘价,交易次数。
% 现在可以把上述各列数据组成一个新的数据矩阵,以便进一步分析之用。例如:
EURUSD = [date,time,open,high,low,close,vol];
EURUSD = [date,time,open,high,low,close,vol];
% 也可以用EURUSD=cat(2,date,time,open,high,low,close,vol) 或EURUSD = horzcat(date,time,open,high,low,close,vol);
%注意:如果在前面C_data=textscan那一行里所设定的各列数据的性质不一样,例如前三列是整数(%d),后四列是%f(小数),
%则上句合并成矩阵时,最后四列数据将被取整。因此数据性质必须一致才行。
[rr,cc] = size(EURUSD)
EURUSD(1:10,:)
%注意:如果在前面C_data=textscan那一行里所设定的各列数据的性质不一样,例如前三列是整数(%d),后四列是%f(小数),
%则上句合并成矩阵时,最后四列数据将被取整。因此数据性质必须一致才行。
[rr,cc] = size(EURUSD)
EURUSD(1:10,:)
toc
%%读取表头
fid = fopen('D:\work\task\task_data\base_s_t.csv');%%nidnopen返回的文件标识符
%%%读取第一行
title = textscan(fid,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s',1,'delimiter',','); %%%%%n——double %s——str%%%注意读取位置数据所在位置
fclose( fid );
%%读取数据
fid = fopen('D:\work\task\task_data\base_s_7.csv');%%nidnopen返回的文件标识符
base_d = textscan(fid,'%n %n %n %n %n %n %n %n %n %q %n %q %q %q','delimiter',',','HeaderLines',1);%%n——double %s——str
fclose(fid );