数学建模社区-数学中国
标题:
用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,2
0 }, w% J% k4 s' J& G
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。
: U, O! I+ M# d$ G8 f4 q
9 I- U' W' m! i3 V
tic
9 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# _) r
C_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% e
time = C_data{2};
' n' V& ]3 {3 ^- `) I! C5 L, h
open = C_data{3};
5 p ]5 U9 t1 Z3 F" r ], R
high = C_data{4};
, I) B; L/ Q& Q5 S$ d
low = C_data{5};
1 |: u5 s+ Y% O+ W
close = C_data{6};
4 S6 V2 d( W% r: f/ a; V
vol = 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; }( t
EURUSD = [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$ y
7 @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