根据ID从本地CSV文件中删除行-javascript

时间:2018-12-04 17:46:25

标签: javascript csv

我不是一个经验丰富的编码员,所以如果问题太简单了,请原谅我。 我有很多行的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服务器上运行

1 个答案:

答案 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文件。