如何在TSV文件中提取信息并将其保存在JavaScript中的数组中?

时间:2013-04-23 18:52:18

标签: javascript multidimensional-array tsv

我遇到了问题。如果我只有tsv的文件名。如何提取所有信息并将其保存在一个数组中,比如X,其中tsv文件中的每一行都由一个数组表示,比如y,其中X是ys的数组。

如果我不知道列名称的标题,我怎么能这样做呢?

6 个答案:

答案 0 :(得分:4)

// get file contents, store in var str
var x = str.split('\n');
for (var i=0; i<x.length; i++) {
    y = x[i].split('\t');
    x[i] = y;
}

console.debug(x);

有关如何获取文件内容的帮助,您需要指定这些文件的位置(在客户端计算机,服务器等上)。

如果这些文件位于客户端计算机上,那么您可能会遇到一条艰难的道路。

如果文件位于服务器上,则需要执行AJAX请求以获取文件内容。

答案 1 :(得分:3)

您需要使用AJAX或纯XMLHttpRequest。

http://d3js.org/有一个内置的tsv阅读器,它基本上完全符合您的要求。

语法是

d3.tsv("file.tsv", function(data) {
    // use data here
});

data变量是具有键/值对的对象数组,其中文件中的第一行作为键读入。所以,例如

Number Awesomeness
1      5
2      3

将返回[{"Number":1, "Awesomeness":5}, {"Number":2, "Awesomeness":3}]

答案 2 :(得分:1)

坚持这里,所以我可以在下次需要时找到它:

// parse_tsv(tsvstring, function (row) { do something with row })
function parse_tsv(s, f) {
  var ix_end = 0;
  for (var ix=0; ix<s.length; ix=ix_end+1) {
    ix_end = s.indexOf('\n', ix);
    if (ix_end == -1) {
      ix_end = s.length;
    }
    var row = s.substring(ix, ix_end-1).split('\t');
    f(row);
  }
}

它比接受的答案更好,因为它不强制在内存中构建一个行数组,而是逐个构建小数组。在TSV较大的情况下,这可能会有所帮助。当然,如果你需要的话,你仍然可以使用回调来构建数组。

答案 3 :(得分:0)

您不必为此使用D3,JQuery或任何其他框架。简单明了的JavaScript(AJAX技术):

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
                var arrayWithValues = xhttp.responseText.trim().split('\t');
                console.log(arrayWithValues);
        };
};
xhttp.open("GET", "/some.tsv", true);
xhttp.send();

答案 4 :(得分:0)

$result = array();
$fp = fopen('/path/to/file','r');
if (($headers = fgetcsv($fp, 0, "\t")) !== FALSE)
  if ($headers)
    while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) 
      if ($line)
        if (sizeof($line)==sizeof($headers))
          $result[] = array_combine($headers,$line);
fclose($fp);
print_r($result);

答案 5 :(得分:-1)

您可以使用Alasql库:

执行此操作
alasql('SELECT MATRIX * FROM TSV("mydata.tsv")',[],function(res){
    console.log(res);
});

尝试在alasql.org上运行this example