0

我。

我有一个如下所示的 csv 文件:

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

等等,它远不止于此。

二、

以下方法调用将启动我要设计的流程:

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

三、

使用 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 的日历类。

4

2 回答 2

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 );
        }
    }
}
于 2014-08-07T10:25:49.137 回答
0

正如我在评论中提到的,您应该创建一个stringstream您阅读的行,然后在stringstream对象上使用 getline 将其拆分为逗号字符。这比为字符串创建拆分函数要容易得多。

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 );
        }
    }
}

PSvar不是C++关键字

于 2014-08-07T10:16:39.587 回答