我遇到了一个问题,如果我只有tsv的文件名,我如何提取它的所有信息并将其保存在一个数组中,比如X,其中tsv文件中的每一行都由一个数组表示,比如y,其中X是ys的数组。如果我不知道列名的标题,我该怎么做呢?
pgx2nnw81#
你将需要使用 AJAX 或纯XMLHttpRequest。http://d3js.org/有一个内置的tsv阅读器,它基本上可以完全满足您的需求。语法为
d3.tsv("file.tsv", function(data) { // use data here });
data变量是一个具有键/值对的对象数组,其中文件中的第一行作为键读入。
data
Number Awesomeness 1 5 2 3
将返回[{"Number":1, "Awesomeness":5}, {"Number":2, "Awesomeness":3}]。
[{"Number":1, "Awesomeness":5}, {"Number":2, "Awesomeness":3}]
rqenqsqc2#
// 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 请求以获取文件内容。
atmip9wb3#
把这个贴在这里,下次我需要的时候就能找到:
// 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的情况下,这会很有帮助。当然,如果需要的话,你仍然可以使用回调来构建数组。
1l5u6lss4#
你不需要使用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();
gwbalxhn5#
警告请不要自行创建,否则请务必考虑所有例外情况。
typescript 代码
import parser from "csvtojson"; /** * - Takes into account \t and \n inside cells * - Remove empty columns * - Remove empty rows * - Trim cells */ export async function parseSheetStringInJSON( tsvString: string ): Promise<Record<string, string>[]> { function removeEmpty(obj: Object) { return Object.fromEntries( Object.entries(obj).filter(([_, v]) => Boolean(v)) ); } const parsed: Record<string, string>[] = await new Promise( (resolve, reject) => parser({ flatKeys: true, delimiter: "\t", trim: true, }) .fromString(tsvString ?? "") .then(function (result) { const clean = result.map((el) => removeEmpty(el)); resolve(clean); }) ); return parsed; } const tsvString = prompt("Please") ?? 'Key 1\tKey 2\n1.1\t"2.1\n2.11"\n1.2\t2.2\n"1.3\t1.33"\t3.3'; parseSheetStringInJSON(tsvString).then(console.log)
o4hqfura6#
$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);
zour9fqk7#
你可以用Alasql库来实现:
alasql('SELECT MATRIX * FROM TSV("mydata.tsv")',[],function(res){ console.log(res); });
7条答案
按热度按时间pgx2nnw81#
你将需要使用 AJAX 或纯XMLHttpRequest。
http://d3js.org/有一个内置的tsv阅读器,它基本上可以完全满足您的需求。
语法为
data
变量是一个具有键/值对的对象数组,其中文件中的第一行作为键读入。将返回
[{"Number":1, "Awesomeness":5}, {"Number":2, "Awesomeness":3}]
。rqenqsqc2#
有关如何获取文件内容的帮助,您需要指定这些文件的位置(在客户机、服务器等上)。
如果这些文件位于客户端计算机上,那么前面的路可能会很艰难。
如果文件位于服务器上,则需要执行 AJAX 请求以获取文件内容。
atmip9wb3#
把这个贴在这里,下次我需要的时候就能找到:
它比公认的答案更好,因为它不会强制在内存中构建一个行数组,而是一个接一个地构建小数组。在大TSV的情况下,这会很有帮助。当然,如果需要的话,你仍然可以使用回调来构建数组。
1l5u6lss4#
你不需要使用D3、JQuery或其他框架来实现这一点。简单的JavaScript( AJAX 技术):
gwbalxhn5#
警告请不要自行创建,否则请务必考虑所有例外情况。
typescript 代码
o4hqfura6#
zour9fqk7#
你可以用Alasql库来实现: