如何使用fs.writeFile

时间:2019-11-06 03:13:19

标签: javascript node.js

我有一个看起来像这样的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

输出它们

1 个答案:

答案 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.forEachArray.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.
})