我有一个看起来像这样的CSV文件
CSV文件:
lunch,bento box b - sashimi,box combo,$9.59
dinner,vegetable sushi,6 rolls,$3.50
dinner,tuna roll,3 rolls,$4.50
dinner,roe,2 rolls,$3.95
lunch,bento box a - chicken teriyaki,box combo,$8.59
我首先在csv中读取文件,然后将所有内容放入数组
function getMenu (fileName) {
fs.readFile (fileName, 'utf8', (err,data)=>{
if (err){
console.log (err.message)
}
let arr = []
let myMenu = data.trim().split('\n')
for (const item of myMenu) {
arr.push (item.split(","))
}
console.log (arr)
})
}
getMenu ('meals.csv')
我需要这样格式化结果:
* Lunch Items *
$15.46 bento box a - chicken teriyaki, box combo
$17.26 bento box b – sashimi, box combo
* Dinner Items *
$7.11 roe, 2 rolls
$8.10 tuna roll, 3 rolls
$6.30 vegetable sushi, 6 rolls
并使用fs.writeFile
答案 0 :(得分:2)
假设您在读取CSV文件时有一系列项目:
let arr = getMenu('meals.csv');
/*
arr = [
['lunch','bento box b - sashimi', 'box combo', '$9.59'],
['dinner','vegetable sushi', '6 rolls', '$3.50'],
['dinner','tuna roll', '3 rolls','$4.50'],
['dinner','roe','2 rolls','$3.95'],
['lunch','bento box a - chicken teriyaki', 'box combo','$8.59']
]
*/
首先,我们可以创建两个单独的数组来存储午餐项目和晚餐项目。
let lunch = [];
let dinner = [];
接下来,我们可以循环浏览菜单,并将每一行放入相应的列表中
arr.forEach(item => {
let item_without_category = item.slice(1);
if (item[0] === 'lunch') {
lunch.push(item_without_category);
}
else {
dinner.push(item_without_category);
}
});
(请参见Array.forEach和Array.slice)
现在有了两个列表,您可以创建文本文件。如果您想从午餐开始:
let menu_text = '* Lunch Items *';
您希望将每个项目作为换行符添加到文本中,可以使用\n
字符来表示,这意味着换行符。遍历数组,然后将每个项目添加到字符串中:
lunch.forEach(item => {
menu_text += `\n${item[2]} ${item[0]}, ${item[1]}`;
});
(请参见Template Literals)
对于晚餐,您需要添加两个新行,以使午餐和晚餐之间保持一定距离:
menu_text += '\n\n* Dinner Items *';
现在,我们使用相同的循环技术添加晚餐项目
dinner.forEach(item => {
menu_text += `\n${item[2]} ${item[0]}, ${item[1]}`;
});
然后,最后,您可以将新创建的文本输出为txt文件。
fs.writeFile('menu.txt', menu_text, (err) => {
// Do whatever you want when you're done here.
})