File 在D3中加载分隔符分隔的值
我试图使用通用的D3.dsvFormat()函数在D3中加载管道分隔值文件。虽然我没有得到一个错误,但没有发生任何事情,我认为这是因为没有执行回调函数 我确实检查了这里的文档,但没有发现有什么帮助: 我的语法有问题吗File 在D3中加载分隔符分隔的值,file,d3.js,File,D3.js,我试图使用通用的D3.dsvFormat()函数在D3中加载管道分隔值文件。虽然我没有得到一个错误,但没有发生任何事情,我认为这是因为没有执行回调函数 我确实检查了这里的文档,但没有发现有什么帮助: 我的语法有问题吗 var psv = d3.dsvFormat("|"); psv.parse("my_file.txt", function(error, data) { Do a bunch of stuff with the data.... console.log(data)
var psv = d3.dsvFormat("|");
psv.parse("my_file.txt", function(error, data) {
Do a bunch of stuff with the data....
console.log(data); //nothing happens here
});
psv.parse
想要文本,您正在传递文本-只是其中没有任何管道:“my_file.txt”。由于这是一行文本,而第一行文本转换为列名,因此您将无法获得任何数据
您的问题是,psv.parse
不会像d3.csv或d3.tsv那样为您获取文件(而psv.parse()的行为类似于d3.csvParse()或d3.tsvParse()。幸运的是,这并不难解决
如果我们查看d3.csv的API文档,我们可以为任何分隔文件重新创建相同的功能。使用d3.csv
如果指定了回调,则发送GET请求,使其
相当于:
d3.request(url)
.mimeType("text/csv")
.response(function(xhr) { return d3.csvParse(xhr.responseText, row); })
.get(callback);
()
我们只需对管道分隔文件进行模拟:
var psv = d3.dsvFormat("|");
d3.request("my_file.txt")
.mimeType("text/plain")
.response(function(data) { return psv.parse(data.response) })
.get(function(data) {
console.log(data);
});
它比普通的d3.csv()或d3.tsv()要详细一点,但是使用get方法中的回调函数可以获得相同的结果
您也可以在response方法中使用data.responseText,但我不确定区别是什么,在我的快速测试中,两者看起来完全相同
您可能还注意到,我没有在响应方法中指定行函数,这是一个可选函数,允许“将行对象转换为更具体的表示”,例如:返回数字而不是字符串)
最后一点注意: 对于原始代码,
psv.parse(“text”)
返回数据,此方法不使用回调函数。以下代码段演示了如何解析直管分隔的文本:
var psv=d3.dsvFormat(“|”);
var data=psv.parse(“a | b\n1 | 2\n4 | 3”)
控制台日志(数据)代码>