C ++ CSV-файл, разделить строку в магазине запятой и работать. Календарь QuantLib

Я.

У меня есть CSV-файл, который выглядит так:

 XXXX,20140101
XXXX,20140102
XXXX,20140103
XXXX,20140108
XXXX,20140212

и так далее, это намного больше, чем просто это.

II.

Следующий вызов метода запустит процесс, который я хочу разработать:

 Calendar XXXXCal = FromFile("h:\\temp\\XXXXdata.csv","XXXX");

III.

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

BespokeCalendar Calendar::XXXXCal(string input_file_name, string input_market)
{
/* Declare the variables to be used */
BespokeCalendar result;
string filename = input_file_name;
string marekt = input_market;

string csvLine
string csvMarket;
string csvDate;

ifstream csvFile ( filename ); // declare file stream
if( csvFile.good()) )
{
while (getline (csvFile,csvLine)
{
var containerArray = line.Split(",");
var csvDate = containerArray[1];
var csvMarket = containerArray[0];

if (csvMarket == marekt)
{
result.addHoliday( csvDate );
}
}
}
else
{
cout << "Unable to open file";
}

result.addWeekend();
return result;

}

Итак, как вы можете видеть, я хочу читать из файла csv построчно то, что приведенный выше код, безусловно, не выполняет. Я читал, что ifstream обрабатывает итерации по файлу, и что getline выведет меня на следующую строку, так? Как это работает?

Я также сомневаюсь, что метод split существует таким образом, я должен построить его из «find_first_of» и «substr»?

Как я могу написать разумный тестовый скрипт для этого?

Я изменяю класс календаря QuantLib.

0

Решение

Как я уже упоминал в комментарии, вы должны создать stringstream строки, которую вы прочитали, а затем разделите ее запятой, используя getline на stringstream объект. Это гораздо проще, чем создать функцию разделения для строк.

ifstream csvFile ( filename ); // declare file stream
if( csvFile.good()) )
{
while (getline (csvFile,csvLine)
{
stringstream ss(csvLine);
string csvMarket;
string csvDate;

getline(ss, csvMarket, ',');
getline(ss, csvDate, ',');

if (csvMarket == marekt)
{
result.addHoliday( csvDate );
}
}
}

Постскриптум var не является C ++ ключевое слово

0

Другие решения

ifstream csvFile ( filename ); // declare file stream
if( csvFile.good()) )
{
while (getline (csvFile,csvLine)
{
replace(csvLine.begin(), csvLine.end(), ',', ' '); // from <algorithm>
istringstream ss(csvLine);
istream_iterator<string> it(ss), itend; // from <iterator>
vector<string> containerArray(it, itend); // from <vector>

string csvDate = containerArray[1];
string csvMarket = containerArray[0];

if (csvMarket == marekt)
{
result.addHoliday( csvDate );
}
}
}
0

По вопросам рекламы [email protected]