我在使用以下命令设置一个简单的应用程序后遇到了这个问题:
代码是:
const parse = require('csv-parse');
const fs = require('fs');
const results = [];
fs.createReadStream('kepler_data.csv')
.pipe(parse({
comment: "#",
columns: true,
}))
.on('data', (data) => {
results.push(data);
})
.on('error', (err) => {
console.log(err);
})
.on('end', () => {
console.log(results);
console.log('Done!');
});
Run Code Online (Sandbox Code Playgroud)
运行它的结果是:
index.js:7
.pipe(parse({
^
TypeError: parse is not a function
at Object.<anonymous> (/home/jadeye/node.js_workspace/PLANETS-PROJECT/index.js:7:11)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
Run Code Online (Sandbox Code Playgroud)
搜索 …
我正在使用csv-parse解析包含以下内容的 csv 文件-
userID,sysID
20,50
30,71
Run Code Online (Sandbox Code Playgroud)
但是,在返回的对象上,无法访问从第一列创建的属性userID。
这是我的代码——
userID,sysID
20,50
30,71
Run Code Online (Sandbox Code Playgroud)
输出 -
async function main(){
let systemIDs = await getSystemIds('./systems.csv');
console.log(`Scanning data for ${systemIDs.length} systems..`);
console.log(systemIDs[0]);
console.log(systemIDs[0].userID); // This prints undefined
console.log(systemIDs[0].sysID); // This prints the correct value
}
async function getSystemIds(path){
let ids= [];
await new Promise ((resolve,reject)=>{
const csvParser = csvParse({columns:true, skip_empty_lines: true});
FS.createReadStream(path)
.pipe(csvParser)
.on('readable', ()=>{
let record ;
while(record = csvParser.read()) {
ids.push(record);
}
})
.on('finish',()=>{
resolve();
});
});
return ids; …Run Code Online (Sandbox Code Playgroud) 我知道还有其他帖子,但似乎没有一个可以解决我的问题。我正在使用 csv-parse 和 Node js。这是我尝试解析的 CSV 标头和记录。
sku,description,productUnitOfMeasure,unitCost,retailPrice,wholesalePrice,dropShipPrice,assemblyCost,planner,comments,productId,fileUpdate,SkuStatus,Master Planning Family,Category,Sub-Category,Brand,ShortCode,Import/Domestic,Inventory Value,Master Pack Quantity,Pallet / TI / HI,40HC Quantity,Product Group ID
032406021945-GreenBay,TFAL B2080264 INIT TNS GRY SAUTE PN 8",EA,7.72,13.99,0.00,0.00,0,Whitney Ehlke-2307,,032406021945,2022-01-25,New,COOKWARE,OPENSTOCK,NONE,T-FAL,B2080264,Domestic,208.44,3,0/0/0,0,23
Run Code Online (Sandbox Code Playgroud)
我无法控制该文件。我只需要能够解析它。您将看到描述末尾有一个双引号:TFal B2080264 INI TNS GRY SAUTE PN 8"。
我需要将双引号保留在那里并将其解析为一个字段。我不断收到此错误:
开盘报价无效:在第 2 行的字段内发现报价。
引用不是一个开场白。从技术上讲,这是一个结束。但无论如何,它都不会解析。
这是目前我的代码:
const parser = fs.createReadStream(filePath).pipe(
parse({ columns: true, relax_quotes: true, escape: '\\', ltrim: true, rtrim: true })
)
Run Code Online (Sandbox Code Playgroud)
我删除了一些参数并尝试了其他参数,但无济于事。有任何想法吗??
我正在尝试使用csv-parse读取 CSV ,但最后一行未被读取。我的代码:
const handleFiles = event => {
const f = event.target.files[0];
const parser = CsvParse({delimiter: ',', columns: true});
parser.on('readable', function(){
console.log('readable');
let record;
// eslint-disable-next-line no-cond-assign
while (record = parser.read()) {
console.log(record);
}
});
const reader = new FileReader();
reader.onload = (function() {
return function(e) {
console.log('Writing');
parser.write(e.target.result);
};
})(f);
reader.readAsText(f);
};
Run Code Online (Sandbox Code Playgroud)
输入:
Letter,Number
A,1
B,2
C,3
Run Code Online (Sandbox Code Playgroud)
输出:
Writing
readable
{Letter: "A", Number: "1"}
readable
{Letter: "B", Number: "2"}
Run Code Online (Sandbox Code Playgroud)
为什么C3不被读取?
为什么“可读”被打印两次?我有一种感觉,我没有正确理解 csv-parse。
谢谢