Попытка создать отдельные строки при записи в csv

#javascript #loops #csv

#javascript #циклы #csv

Вопрос:

Я запускаю вызов API из списка данных в файле csv. Затем я возвращаю результаты и записываю их обратно в новый CSV-файл. Проблема, с которой я сталкиваюсь, заключается в том, что он записывает результаты обратно в одну строку. Существуют ли пакеты npm или способ для него записать результаты обратно в отдельные строки после завершения цикла? Ниже приведен код, который я запускаю.

     /*AXIOS GET API CALL URL */
    axios.get(url 'term=' orgName  'amp;location=' city   state   zipCode,{
        headers: {
            Authorization: 'Bearer '   token
        }
    })
    /*If results are less than 1, moves on to fetchWhitePages API, ELSE, passes in the data*/
        .then(res => {
            if(Array.isArray(res.data.businesses) amp;amp; res.data.businesses.length === 0){
               return fetchWhitePages(data);

            }else{
                console.log('RUNNING YELPAPI');
                /*For loop to get JSON objects within YelpAPI */

                for(let i =0; i < res.data.businesses.length; i   ){

                    churchListing.push('Name: '   res.data.businesses[i].name);
                    churchListing.push('Address: '   res.data.businesses[i].location.address1);
                    churchListing.push('City: '   res.data.businesses[i].location.city);
                    churchListing.push('Zip: '   res.data.businesses[i].location.zip_code);
                    churchListing.push('Phone: '   res.data.businesses[i].phone   "/n");
                    // console.log(churchListing);

                   fs.writeFile('my.csv', churchListing,  (err) => {
                       if(err) throw err;
                   });

                }

            }
        })
        .catch(err => {
            console.log(err)
        })
}
  

Комментарии:

1. вы возражаете против создания строки CSV и записи ее в ваш новый файл? (вместо отправки массива)

2. как бы это выглядело?

3. но точно не добавлено.

4. Пожалуйста, посмотрите мой ответ

Ответ №1:

Если вы захотите создать строку самостоятельно, вам не нужен подключаемый модуль. Следующий код записывает первую строку CSV в качестве заголовка, а затем добавляет каждую строку в качестве данных CSV:

 const businesses = [
{name:'one', address: 'one address', city: 'one city', zip: '111111', phone: '1111111111'},
{name:'two', address: 'two address', city: 'two city', zip: '222222', phone: '2222222222'},
{name:'three', address: 'three address', city: 'three city', zip: '333333', phone: '33333333'},
]

//Header
let churchListingCSV = "Name, Address, City, Zip, Phonen";
//Data rows
businesses.forEach(row => {
  churchListingCSV  = row.name ',';
  churchListingCSV  = row.address ',';
  churchListingCSV  = row.city ',';
  churchListingCSV  = row.zip ',';
  churchListingCSV  = row.phone;
  churchListingCSV  = "n";
});

console.log(churchListingCSV);
/*
fs.writeFile('my.csv', churchListingCSV, (err) => {
  if (err) throw err;
});
*/  

Это решение предполагает, что «разделитель строк» является символом новой строки, а «разделитель полей» — запятой (традиционный формат CSV).