Я.
У меня есть 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.
Как я уже упоминал в комментарии, вы должны создать 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 ++ ключевое слово
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 );
}
}
}