我不是一个经验丰富的编码员,所以如果问题太简单了,请原谅我。 我有很多行的csv,其列之一是'id'。如何根据ID删除仅一行(即代码应搜索ID并删除该行)?
到目前为止,我得到了以下内容(因为有一天我可能需要删除ID 5,而在另一天我可能需要删除ID 2 ...,这不太有帮助)。
var fs = require('fs')
fs.readFile(filename, 'utf8', function(err, data)
{
if (err)
{
// check and handle err
}
var linesExceptFirst = data.split('\n').slice(1).join('\n');
fs.writeFile(filename, linesExceptFirst);
});
PS:它必须在javascript中,因为代码在Node.js服务器上运行
答案 0 :(得分:0)
您将需要解析Array.prototype.map()
格式的CSV文件然后,您需要使用Array.prototype.filter()来查找您想要的列值。
这只是几行代码,您已经准备就绪:
SELECT *
FROM
(
select
*,
rank() over (partition by col_a order by col_b) as some_rank
from
table_A
) T
WHERE some_rank = 1
请注意,我删除了对var fs = require('fs')
// Set this up someplace
var idToSearchFor = 2;
// read the file
fs.readFile('csv.csv', 'utf8', function(err, data)
{
if (err)
{
// check and handle err
}
// Get an array of comma separated lines`
let linesExceptFirst = data.split('\n').slice(1);
// Turn that into a data structure we can parse (array of arrays)
let linesArr = linesExceptFirst.map(line=>line.split(','));
// Use filter to find the matching ID then return only those that don't matching
// deleting the found match
// Join then into a string with new lines
let output = linesArr.filter(line=>parseInt(line[0]) !== idToSearchFor).join("\n");
// Write out new file
fs.writeFileSync('new.csv', output);
});
的调用,因此我们可以对从对.join()
的调用创建的数组进行操作。其余的评论。
最后,可以在此处找到一个有效的示例:https://repl.it/@randycasburn/Parse-CSV-and-Find-row-by-column-value-ID
编辑:该代码现在将返回找到的ID除 之外的所有行。因此,从本质上讲,删除该行。 (根据OP的评论请求)。
EDIT2:现在根据请求输出到新的CSV文件。