我在解析csv文件时遇到问题:
Date,Open,High,Low,Close,Volume,Adj Close
2014-08-22,16.08,16.19,15.80,16.00,139800,16.00
2014-08-21,16.16,16.33,16.00,16.10,128500,16.10
2014-08-20,16.00,16.28,15.78,16.15,271200,16.15
2014-08-19,16.20,16.27,15.96,16.04,379600,16.04
2014-08-18,16.87,16.87,16.10,16.16,259200,16.16
2014-08-15,16.54,16.55,16.21,16.38,190900,16.38
我当前的代码如下:
hist_data_f = fopen(hist_path)
fgets(hist_data_f);
hist_data = textscan(hist_data_f, '%s,%d,%d,%d,%d,%d,%d')
目前的结果如下:
hist_data =
{
[1,1] =
{
[1,1] = 2014-08-22,16.08,16.19,15.80,16.00,139800,16.00
[2,1] = 2014-08-21
[3,1] = ,
[4,1] = 16.20
[5,1] = ,
[6,1] = 16.55
[7,1] = ,
[8,1] = 16.41
[9,1] = ,
[10,1] = 16.53
[11,1] = ,
[12,1] = 327700,16.13
[13,1] = 2014-08-05,17.00,17.29,16.91,17.01,125500,16.67
[14,1] = 2014-08-04
[15,1] = ,
[16,1] = 17.86
[17,1] = ,
[18,1] = 18.80
[19,1] = ,
[20,1] = 18.96
[21,1] = ,
[22,1] = 19.10
......等等。
我的目标是获得这样的数据:
hist_data =
[
2014-08-22 16.08 16.19 15.80 16.00 139800 16.00
2014-08-21 16.16 16.33 16.00 16.10 128500 16.10
...
]
我做过的其他尝试:
hist_data = textscan(hist_data_f, '%s,%d,%d,%d,%d,%d,%d','Delimiter',',')
hist_data = csvread('hist_data.csv')
我似乎无法获得所需的输出。 有什么建议吗?
我已经通读了 Reading CSV files with MATLAB? Reading .csv file into MATLAB 还有一些没有运气。答案 0 :(得分:2)
如何:数字部分的csv read
%reads the csv file from row 1 on, to avoid the headers, and string date
M = csvread('test.csv',1,1);
然后根据需要输出:
M =
1.0e+05 *
0.0002 0.0002 0.0002 0.0002 1.3980 0.0002
0.0002 0.0002 0.0002 0.0002 1.2850 0.0002
0.0002 0.0002 0.0002 0.0002 2.7120 0.0002
0.0002 0.0002 0.0002 0.0002 3.7960 0.0002
0.0002 0.0002 0.0002 0.0002 2.5920 0.0002
0.0002 0.0002 0.0002 0.0002 1.9090 0.0002
答案 1 :(得分:1)
我不知道格式说明符中的,
是如何解释的。我想你正在寻找:
textscan(str,'%s%d%d%d%d%d','Delimiter',',')
答案 2 :(得分:0)
Sebastien - 如果您想要的只是hist_data
中的字符串单元格数组,那么为什么不像以前一样继续,只是将每一行视为字符串而不是尝试确定哪些字符串以及哪些字符串是数字?像
hist_data_f = fopen(hist_path)
fgets(hist_data_f);
hist_data = textscan(hist_data_f, '%s\n'); % now every line is a string only
hist_data
是一个单元格数组,所以现在只需用四个(或更多)空格替换所有逗号
hist_data = strrep(hist_data{1},',',' ');
hist_data =
'2014-08-22 16.08 16.19 15.80 16.00 139800 16.00'
'2014-08-21 16.16 16.33 16.00 16.10 128500 16.10'
'2014-08-20 16.00 16.28 15.78 16.15 271200 16.15'
'2014-08-19 16.20 16.27 15.96 16.04 379600 16.04'
'2014-08-18 16.87 16.87 16.10 16.16 259200 16.16'
'2014-08-15 16.54 16.55 16.21 16.38 190900 16.38'
尝试以上操作,看看会发生什么!