逝水lcc无痕 发表于 2014-12-31 21:02

用textscan函数读取带变量名的数据集

%这是一个读取数据集的程序,目的是把如下带变量名的数据矩阵读进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
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。

tic
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把各列分别当作数组返回。

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_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的各列赋予新的名称。例如:
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 = ;

% 也可以用EURUSD=cat(2,date,time,open,high,low,close,vol) 或EURUSD = horzcat(date,time,open,high,low,close,vol);
%注意:如果在前面C_data=textscan那一行里所设定的各列数据的性质不一样,例如前三列是整数(%d),后四列是%f(小数),
%则上句合并成矩阵时,最后四列数据将被取整。因此数据性质必须一致才行。
= size(EURUSD)
EURUSD(1:10,:)

toc


页: [1]
查看完整版本: 用textscan函数读取带变量名的数据集