我一直在研究从URL解析数据,最终目标是实时或更新数据视觉效果。我正在处理的当前工作是来自Google财经网址。 API不再与我们在一起(可能它安静地休息),以下只是一些回填数据 - 仍然有效。我不是在尝试生产高质量的代码或任何东西;它更像是我的概念验证。
EXCHANGE%3DINDEXSP
MARKET_OPEN_MINUTE=570
MARKET_CLOSE_MINUTE=960
INTERVAL=300
COLUMNS=DATE,OPEN
DATA=
TIMEZONE_OFFSET=-240
a1521120900,555.45
1,554.53
2,554.07
3,553.9
4,552.67
...
问题是,虽然数据看起来遵循逗号分隔值格式(即上例中的最后4行),但前7行不符合要求。似乎也没有标题。前几行中的一些信息对于将unix时间转换为日期对象很有用,但我可能会为此执行单独的功能。就像头灯中的鹿一样,我不知道该怎么做,所以我只是把它解析为csv,看看会发生什么。以下是d3.csv()
在控制台中的样子:
Array(84)
0:object
EXCHANGE%3DINDEXSP: "MARKET_OPEN_MINUTE=570"
...
8:object
EXCHANGE%3DINDEXSP: "2"
...
所以它似乎将EXCHANGE%3DINDEXSP
视为标题并一直使用它。这是可以理解的,我没有给它一个简单的格式。在这一点上,我不确定如何继续。
问题:如何让我的csv
解析器忽略前几行并在没有标题的情况下读取数据?我还需要能够接受数据的更新(根据帖子的顶部将采用原始格式)。
我想我可以在事后添加一个标题,但我不确定我是怎么做到的。正确的标题应为interval,open
。
答案 0 :(得分:0)
您可以使用d3.text
代替d3.csv
:
d3.text('data.csv', function(error, rawData) {
var data =
rawData
.split("\n")
.slice(7)
.map(r => {
var split = r.split(",");
var l = new Object();
l.k = split[0];
l.v = split[1];
return l;
});
console.log(data);
});
产生:
[
{k: "a1521120900", v: "555.45"},
{k: "1", v: "554.53"},
{k: "2", v: "554.07"},
{k: "3", v: "553.9"},
{k: "4", v: "552.67"}
]
rawData
是表示文件内容的字符串。
我们拆分rawData
以获得一系列行。
然后我们删除前7行:.slice(7)
。
然后将每一行拆分并转换为一个对象。