数学建模社区-数学中国

标题: 用textscan函数读取带变量名的数据集 [打印本页]

作者: 逝水lcc无痕    时间: 2014-12-31 21:02
标题: 用textscan函数读取带变量名的数据集
%这是一个读取数据集的程序,目的是把如下带变量名的数据矩阵读进MATLAB。
& S3 K, ]- i0 Y- e4 X# w, ~% <DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>, l* B+ A$ J) Y! C
% 20040615,212000,0.6987,0.6987,0.6986,0.6986,2+ w" \: }. S+ |; m
% 20040615,212100,0.6987,0.6987,0.6987,0.6987,1
+ x( k0 v! B1 g( S) _0 B% 20040615,212200,0.6988,0.6988,0.6987,0.6987,20 }, w% J% k4 s' J& G
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。

: U, O! I+ M# d$ G8 f4 q 9 I- U' W' m! i3 V
tic9 c! |. o6 V" ^+ Q' y
clear+ e- c3 A8 l6 Z8 A, Q

& O+ v& H8 [% U( U5 a6 e+ I%用如下方来来读取,把CollectOutput设为0,则MATLAB会把每一列的数字返回成一个数组。1 @1 K$ b$ \) J3 f5 e! d/ U
fid = fopen('E:\v time deformation\EURUSD.txt','r');  %打开要读取的数据集,'r'表示要读取打开文件,r是默认值。
4 p- \0 O# _) rC_text = textscan(fid,'%s',7, 'delimiter',',');       %上句读取第一行的文字,即变量名。6 Z6 |+ ?3 g, Z0 P2 ]
C_data = textscan(fid,'%f %f %f %f %f %f %f','delimiter',',','CollectOutput', 0);  
/ i  m; d8 p7 e5 a- h" K: h%上句读取第2行以后的数据矩阵。
4 ~$ j: Q9 ]# w1 n) G4 M% j' W; l%其中设定'delimiter',','是因为原文件里每两个数据之间是用逗号隔开的。
$ H1 S8 F& G! _7 i%设定'CollectOutput'为默认值0,这样MATLAB把各列分别当作数组返回。
4 [& i1 l* _3 t  r
" ~; Z- U3 T: {- D6 A, s
fclose(fid);% j6 ]4 M) t7 D5 c- {
% C_text{:}                         %这一句返回数组C_text的全部内容(元素)。
( z4 ^" {* o6 X% C_text{1}                         %这一句返回数组C_text第1列的内容(元素)。
6 M1 W/ l- s7 x& S" h% C_text(                         %这一列返回数组C_text的整体结构。- p5 e  t0 F' h+ Z7 N5 |
% C_text(1)                         %这一句返回数组C_text第1列的结构:{8x1 cell}

1 P. D6 Y9 x1 ]$ \* h; ]  E4 W% C_data{:}                         %查看数组C_data的全部元素,以一列一列的形式返回。
. o; {. ?  ^& T) B' n: [% C_data{1}                         %这一句返回数组C_fata第1列的内容(元素)。是一个列向量。
; |" {6 A4 c$ b8 E; M6 w& A: p, h" F- ~2 `% C_data{4}                         %这一句返回数组C_data的第4列的元素。是一个列向量。# I# g" S# p  f! x, _1 D2 A: P$ Y
% C_data(                         %这一列返回数组C_data的整体结构。
7 m: ~& s$ H. o( v. R% C_data(1)                         %这一句返回数组C_data的第1列的结构。
7 h. t/ ]# ~2 x" }9 U: a( s
  p: P/ C, |- U8 O5 X  B2 U2 o
%现在可以把数组C_data的各列赋予新的名称。例如:7 R) y8 p: M  ], i+ ?1 w) P
date = C_data{1};
0 z% ~' w+ j3 R/ C, n% etime = C_data{2};' n' V& ]3 {3 ^- `) I! C5 L, h
open = C_data{3};
5 p  ]5 U9 t1 Z3 F" r  ], Rhigh = C_data{4};
, I) B; L/ Q& Q5 S$ dlow = C_data{5};
1 |: u5 s+ Y% O+ Wclose = C_data{6};                 
4 S6 V2 d( W% r: f/ a; Vvol = C_data{7};             %以上分别是日期,时点,开盘价,最高价,最低价,收盘价,交易次数。

; J6 r% p2 q: E0 W3 r3 b1 u- [( U 4 ]# i2 R4 c+ E& m4 _
% 现在可以把上述各列数据组成一个新的数据矩阵,以便进一步分析之用。例如:
" H! n2 E+ M) @! y% C6 e: n; }( tEURUSD = [date,time,open,high,low,close,vol];

, g9 @  Z, U2 h# A0 Q( B
% u' i6 @" g4 ]$ s! n+ ^& H1 S% 也可以用EURUSD=cat(2,date,time,open,high,low,close,vol) 或EURUSD = horzcat(date,time,open,high,low,close,vol); * h: v. k2 B$ g) W+ v
%注意:如果在前面C_data=textscan那一行里所设定的各列数据的性质不一样,例如前三列是整数(%d),后四列是%f(小数),
/ V4 z4 |* c! h& Q$ F' u( Q%则上句合并成矩阵时,最后四列数据将被取整。因此数据性质必须一致才行。* V- K$ V" E8 `& k( W) k
[rr,cc] = size(EURUSD)5 }, _% o0 i0 _. |* p8 y& i
EURUSD(1:10,
5 Y! s4 d. v2 g) b
2 j) w3 A6 c1 ~1 W$ \1 q2 n
toc
( L" D& O& _3 v/ P$ O& b1 j" ~9 k$ y7 @8 J+ C/ v$ z* r" F
# P6 z) h( f7 y5 Y5 D0 M- H





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