Я относительно новый программист, разбирающий файлы, и у меня были некоторые проблемы с извлечением данных.
Я пытаюсь пропустить строки в файле 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