数学建模社区-数学中国
标题:
用textscan函数读取带变量名的数据集
[打印本页]
作者:
逝水lcc无痕
时间:
2014-12-31 21:02
标题:
用textscan函数读取带变量名的数据集
%这是一个读取数据集的程序,目的是把如下带变量名的数据矩阵读进MATLAB。
! {- G+ u N5 z! ?. f
% <DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
" k% c/ b/ J" Y) P. Y4 [
% 20040615,212000,0.6987,0.6987,0.6986,0.6986,2
# m( F; z( H1 o+ w# D
% 20040615,212100,0.6987,0.6987,0.6987,0.6987,1
/ H+ F/ h) \' o2 g! e
% 20040615,212200,0.6988,0.6988,0.6987,0.6987,2
6 b1 \' q+ s, G) t/ j; O0 T
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。
- Z5 L' y, x+ }( M- v& J( Y( ] i
& Z S7 ~! i6 V. l. L- H+ [
tic
1 p: |! ], X; N+ d
clear
7 V+ v" N: y: z1 r. B
' F! l* d8 Z3 E0 x% d/ e) p9 K1 g
%用如下方来来读取,把CollectOutput设为0,则MATLAB会把每一列的数字返回成一个数组。
$ v, K' k+ h4 i2 M: [5 r
fid = fopen('E:\v time deformation\EURUSD.txt','r'); %打开要读取的数据集,'r'表示要读取打开文件,r是默认值。
3 R2 C X' ]7 Z# v
C_text = textscan(fid,'%s',7, 'delimiter',','); %上句读取第一行的文字,即变量名。
" b! c" H; n& {0 `
C_data = textscan(fid,'%f %f %f %f %f %f %f','delimiter',',','CollectOutput', 0);
6 b# Y' ~+ M+ x$ `8 m$ j2 {
%上句读取第2行以后的数据矩阵。
! D3 ]9 z9 P# m. A5 `/ @, p
%其中设定'delimiter',','是因为原文件里每两个数据之间是用逗号隔开的。
M% ?% e# N F+ l
%设定'CollectOutput'为默认值0,这样MATLAB把各列分别当作数组返回。
& d. c* r" K* _' z
/ k- Y+ M$ ]3 d3 \. z! B
fclose(fid);
! h) {. b! i7 L
% C_text{:} %这一句返回数组C_text的全部内容(元素)。
' Q' S# c% m" q3 r
% C_text{1} %这一句返回数组C_text第1列的内容(元素)。
' k. l* z! y8 r+ G; r. \3 y/ i
% C_text(
%这一列返回数组C_text的整体结构。
* x: s. k4 h& w3 w5 T
% C_text(1) %这一句返回数组C_text第1列的结构:{8x1 cell}
" z, w0 l! [5 R; ^3 b* v
% C_data{:} %查看数组C_data的全部元素,以一列一列的形式返回。
/ p6 q6 ~- d6 P! G* w, K8 ~
% C_data{1} %这一句返回数组C_fata第1列的内容(元素)。是一个列向量。
: G' Y# ~& k; a# Z6 r# }* j" }
% C_data{4} %这一句返回数组C_data的第4列的元素。是一个列向量。
. l, O4 b8 k; W% H& V; q
% C_data(
%这一列返回数组C_data的整体结构。
( H1 w8 h" X) }5 ?! _2 U
% C_data(1) %这一句返回数组C_data的第1列的结构。
9 r* q( B* Y( E) A* ^" j
1 }" G: g7 T# T$ k! \
%现在可以把数组C_data的各列赋予新的名称。例如:
( y( J K6 ]! C! d, o
date = C_data{1};
" u+ ?" l, p# e4 l7 I! Q p
time = C_data{2};
3 M) } l4 r( Y* W/ [9 \
open = C_data{3};
- E) I( W' K1 M$ ?4 |4 M6 m
high = C_data{4};
6 ~7 H1 F7 C* K- j# F) C
low = C_data{5};
5 R+ C% R6 [) c7 q& a7 H) T1 V* [
close = C_data{6};
' X( \& C$ b- C' H
vol = C_data{7}; %以上分别是日期,时点,开盘价,最高价,最低价,收盘价,交易次数。
% n* p: n2 B; Y! x* U) `: B
, Z7 k' n1 u- A7 r$ z6 [& y
% 现在可以把上述各列数据组成一个新的数据矩阵,以便进一步分析之用。例如:
; S( b+ \/ }7 }$ k9 N: X* P
EURUSD = [date,time,open,high,low,close,vol];
# x0 U. A* t# h1 ^
+ f' u8 e# d' b* d, q
% 也可以用EURUSD=cat(2,date,time,open,high,low,close,vol) 或EURUSD = horzcat(date,time,open,high,low,close,vol);
' d1 o% m# L' Q' ]
%注意:如果在前面C_data=textscan那一行里所设定的各列数据的性质不一样,例如前三列是整数(%d),后四列是%f(小数),
8 K S0 {. z" u, a! W7 K% {3 `
%则上句合并成矩阵时,最后四列数据将被取整。因此数据性质必须一致才行。
' t0 H# O" d. b% F3 f G7 R
[rr,cc] = size(EURUSD)
- E& F) \- k7 l% f% [
EURUSD(1:10,
5 ^, [$ N8 ^. T$ L" M# D9 _
. D. b' O, x1 j: e5 d6 O8 l/ R- M( s
toc
$ X/ ?* h0 f& U" T0 i8 d
" ]6 _+ U* w3 o3 n' ]
# w0 \* ?: s5 f
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5