C++ CSV文件,逗号商店的分割线并运行。量子历法

C++ CSV文件,逗号商店的分割线并运行。量子历法,c++,csv,quantlib,C++,Csv,Quantlib,一, 我有一个csv文件,如下所示: XXXX,20140101 XXXX,20140102 XXXX,20140103 XXXX,20140108 XXXX,20140212 以此类推,它远不止于此 二, 以下方法调用将启动我要设计的流程: Calendar XXXXCal = FromFile("h:\\temp\\XXXXdata.csv","XXXX"); 三, 使用C++,我想读取那些输入参数,这些参数包括文件和特定值。下面的代码在某种程度上说明了我要做的事情,首先,看

一,

我有一个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 and substr构造它

如何为此编写合理的测试脚本


我正在修改QuantLib的calendar类

正如我在一篇评论中提到的,您应该为读取的行创建一个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 );
        }
    }
}

S.var不是C++关键字< /p>没有STD::String的分割方法。您可以创建读取行的stringstream,然后再次使用getline作为分隔符来分隔列。您可以给我看一个示例,或者为我指出一些文档的方向吗?我对C++的概念不太了解,我想我知道这里发生了什么,但由于数据存储在csv中,就像这样XXXX,20140101第11行应为getnesy,csvDate,“\n”;类似的东西,用“n”代替“,”,如果没有逗号,它读到行的末尾,把它写进第二个论证。什么是测试这个最好的方法,你怎么看待DEV-C++?@ USER?因为这段代码只使用标准库,所以我尝试了这个解决方案,但事实上,当我打印出变量的值时,它们是空的。我试图在编辑你的原始评论时演示,但根据我收到的一条消息,我首先收到的评论必须经过同行审查,因此我不知道你是否能看到它。我需要担心关闭文件或类似的事情吗?不,IFStand的析构函数自动关闭文件,你会考虑C++代码测试的最佳方法,你觉得DEV-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 );
        }
    }
}