数学建模社区-数学中国
标题:
用textscan函数读取带变量名的数据集
[打印本页]
作者:
逝水lcc无痕
时间:
2014-12-31 21:02
标题:
用textscan函数读取带变量名的数据集
%这是一个读取数据集的程序,目的是把如下带变量名的数据矩阵读进MATLAB。
$ v0 F0 R9 V1 M: B( O' D1 S" T; m
% <DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
3 K$ W2 s ], d5 a
% 20040615,212000,0.6987,0.6987,0.6986,0.6986,2
7 r: F: v9 L2 N) }
% 20040615,212100,0.6987,0.6987,0.6987,0.6987,1
& S. @8 b/ a, P
% 20040615,212200,0.6988,0.6988,0.6987,0.6987,2
1 B6 X) \% f8 N1 p8 i" _' e7 t% X
%这样在处理比较大、多的数据集时,就不需要把文件打开去掉最上面一行了。
: @9 E! K' O! d* \, o; L
9 C) d- y8 r% ?/ A/ ]
tic
4 r2 D0 k/ j' S. Z4 L) C) J% T. w# w7 I! O
clear
3 G* Q! Y8 f7 o1 ?1 k
4 g7 w! k3 Z% m6 j+ e
%用如下方来来读取,把CollectOutput设为0,则MATLAB会把每一列的数字返回成一个数组。
3 ]# s/ L! _$ [! y; Q
fid = fopen('E:\v time deformation\EURUSD.txt','r'); %打开要读取的数据集,'r'表示要读取打开文件,r是默认值。
) R# j1 H- C, i% n* T# U/ _
C_text = textscan(fid,'%s',7, 'delimiter',','); %上句读取第一行的文字,即变量名。
1 l; S1 q1 r! b4 e- z1 C
C_data = textscan(fid,'%f %f %f %f %f %f %f','delimiter',',','CollectOutput', 0);
7 l2 a+ h9 T9 ?$ ~
%上句读取第2行以后的数据矩阵。
X- e7 ]3 `" E1 Z- U
%其中设定'delimiter',','是因为原文件里每两个数据之间是用逗号隔开的。
6 _$ X7 S0 \' f
%设定'CollectOutput'为默认值0,这样MATLAB把各列分别当作数组返回。
4 R( N8 @. e$ x% P
# Z; \; g8 W# ~6 S! ^
fclose(fid);
% {. l8 ^+ ^3 T1 s( a
% C_text{:} %这一句返回数组C_text的全部内容(元素)。
% `, x! D5 N* N0 ] `
% C_text{1} %这一句返回数组C_text第1列的内容(元素)。
7 f4 E; U* Q/ `% \0 \4 u' w3 r
% C_text(
%这一列返回数组C_text的整体结构。
f& Y" R2 h2 Q5 q3 R
% C_text(1) %这一句返回数组C_text第1列的结构:{8x1 cell}
, }$ \+ R) x3 }- w0 ^4 j
% C_data{:} %查看数组C_data的全部元素,以一列一列的形式返回。
( V! e- V0 }! ]5 j6 o2 N1 [ F
% C_data{1} %这一句返回数组C_fata第1列的内容(元素)。是一个列向量。
7 D) L7 B' r5 y- L- \, B
% C_data{4} %这一句返回数组C_data的第4列的元素。是一个列向量。
+ e+ I' S" b9 t! R _: j
% C_data(
%这一列返回数组C_data的整体结构。
! ]% D, Q. o+ L* r O
% C_data(1) %这一句返回数组C_data的第1列的结构。
, ~( H$ n/ _# X: P
: m0 x' B3 a2 Z# |' }, t
%现在可以把数组C_data的各列赋予新的名称。例如:
7 m3 e' S `) A* m
date = C_data{1};
' h4 X# |: c* r' J6 I- [2 g* g2 H
time = C_data{2};
# Y0 [1 m7 N6 q. y7 {- }# T
open = C_data{3};
. q: {! G' w' P0 i9 G; F! ~9 w; Z
high = C_data{4};
. L# D& M! i0 |! k$ h
low = C_data{5};
5 v: N) h2 w# K2 y( K3 R0 J
close = C_data{6};
0 u; _8 W2 D# M) h0 }
vol = C_data{7}; %以上分别是日期,时点,开盘价,最高价,最低价,收盘价,交易次数。
. z# P- y3 _4 Z: ?+ w; [
( m6 j% v% Y6 L7 M5 k) q: n. d x
% 现在可以把上述各列数据组成一个新的数据矩阵,以便进一步分析之用。例如:
0 H+ X; p1 U9 S0 g: h7 q
EURUSD = [date,time,open,high,low,close,vol];
' i- F1 z2 Q6 m* E% l+ D
* H7 y. x/ ?/ e7 [
% 也可以用EURUSD=cat(2,date,time,open,high,low,close,vol) 或EURUSD = horzcat(date,time,open,high,low,close,vol);
% { }+ q5 d3 s4 u0 }' ^$ G; T
%注意:如果在前面C_data=textscan那一行里所设定的各列数据的性质不一样,例如前三列是整数(%d),后四列是%f(小数),
. g V0 M) N9 O1 [
%则上句合并成矩阵时,最后四列数据将被取整。因此数据性质必须一致才行。
& ?( @" d/ E5 D6 X% ]) y% t. E& r
[rr,cc] = size(EURUSD)
3 v8 d. _* `) c3 o8 d( `
EURUSD(1:10,
5 k2 @4 ?( f' g* C" j3 }
3 }. Q6 y7 R2 o5 H. ^& B0 }) _1 v
toc
; i$ V' Y T- K3 B, u; J3 B2 W
$ Y& h% w0 ~# l$ w [1 r
8 J+ B" _" f3 G2 B) ^
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5