File Parser - Как пропустить строки, которые не имеют соответствующих данных, и распечатать те, которые делают - PullRequest
0 голосов
/ 03 декабря 2018

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

Я пытаюсь пропустить строки в файле csv, в которых нет соответствующих данных, перед извлечением соответствующих строк, в которых есть данные, которые мне нужны.

Пример данных csv:

junk, junk, junk, //want to skip
 , , ,   // want to skip
apples, pears, oranges, //want to extract data below
1, 2, 3, 
2, 4, 2, 
3, 2, 1, 
3, 3, 2, 
0, 0, 0

Соответствующими строками в этом случае будут яблоки, груши, апельсины.

#include "csvstream.h" //header file custom library
#include <iostream> //input/output functions
#include <sstream>
#include <fstream> // data type represents the file stream generally which 
means it can create files, write information to files, and read information from files.
#include <string> // functions for dealing with strings stored in arrays of characters.
#include <map> //
#include <algorithm>
#include <stdio.h> //

using namespace std;

int main()
{
    csvstream csvin("fruit_data.csv"); // Open input file

    std::ofstream myfile; //this function is used to output items to a csv file
    myfile.open ("example.csv"); //list the name of the csv file you wish to create here

   // Rows have key = column name, value = cell datum
   map <string, string> row;

   // Column extraction
   while (csvin >> row)
   {
      //need to skip a row in order to read relevant cell data
     #if 1
     myfile << row["apples"] << ","; //csv print row for apples column
     myfile << row["pears"] << ","; //csv print row for pears column
     myfile << row["oranges"] << endl; //csv print row for oranges column

     cout << row["apples"] << ","; //emulator print data in apples column
     cout << row["pears"] << ","; //emulator print data pears column
     cout << row["oranges"] << endl; //emulator print data oranges column

     myfile.close(); //close csv file at EOL
     #endif // 0
   }

 }

Код выше работает только тогда, когда соответствующие массивы отображаются в первой строке.Но если есть другие строки выше, которые я хотел бы пропустить, это извлечет пустые данные.

Будет ли у кого-нибудь предложение о том, как пропускать строки, в которых нет яблок, груш или апельсинов, чтобы извлечь и напечатать следующее:

1, 2, 3 
2, 4, 2
3, 2, 1 
3, 3, 2 
0, 0, 0  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...