Reputation: 353
I'm attempting to convert csv-file's charactor codes. For example, from "utf8" to "shift-jis" etc... But my code is not working well.
Can you give me advices about my code??
const fs = require("fs");
const iconv = require("iconv-lite");
convertCsvFile(filepath, encoding){
return new Promise(resolve => {
const streamReader = fs.createReadStream(filepath)
const streamWriter = fs.createWriteStream(filepath)
streamReader
.pipe(iconv.decodeStream(encoding))
.pipe(streamWriter)
streamWriter.on('finish', () => {
resolve(filepath)
})
}
}
await createCsvFile(path/to/csvfile, encoding)
return path/to/csvfile;
I expect this codes to receive csv-filepath and convert its encoding, and return the same csv-filepath. But it returns none.
Upvotes: 1
Views: 608
Reputation: 30725
I think reading and writing from the same stream will cause you problems. You could try writing to a separate file, this should be more reliable.
For example:
const fs = require("fs");
const iconv = require("iconv-lite");
function convertCsvFile(filepath, encoding, outputFile) {
return new Promise(resolve => {
const streamReader = fs.createReadStream(filepath)
const streamWriter = fs.createWriteStream(outputFile)
streamReader
.pipe(iconv.decodeStream(default encoding))
.pipe(iconv.encodeStream(encoding))
.pipe(streamWriter)
streamWriter.on('finish', () => {
resolve(filepath)
})
});
}
async function testConvertCsvFile(pathToCsvFile, encoding, outputFile) {
let filePath = await convertCsvFile(pathToCsvFile, encoding, outputFile)
console.log( { filePath });
return filePath;
}
testConvertCsvFile("./csv-file-input.csv", "ascii", "./csv-file-output.csv");
Upvotes: 2