从csv文件C ++中读取数据

时间:2015-11-29 09:13:37

标签: c++ csv fstream ifstream ofstream

您好我的项目有很多csv文件。它与Datafolder/IAG/day1.csv, Datafolder/IAG/day2.csv and Datafolder/IAG/day3.csv位于同一目录中。 Datafolder/CBA/day1.csv, Datafolder/CBA/day2.csv and Datafolder/CBA/day3.csvDatafolder/NAB/day1.csv, Datafolder/NAB/day2.csv and Datafolder/NAB/day3.csv也是如此。 我的目标是用户可以输入他们想要和输入的那一天的数据。一旦输入,它将要求用户输入1(获得最高价格值)或2(最低价格值)。但在我的代码中,我不知道为什么一旦用户选择了当天并获得最高价格,它就会被存储为该值。即使用户选择另一天并寻找最高价格,它实际上并不显示当天的最高值,而是前一天的最高值再次复制以下是代码。先谢谢你们。

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include "vector.h"
#include "stock.h"
#include <map>

using namespace std;

int counter = 0;
    double highestPrice=0, lowestPrice=0;
    ofstream outfile;
    string sFileName;
    string record;
    Stock S1;
    Vector<Stock> data;
    int option;
    ifstream codeindex;
    ifstream IAGsales;
    ifstream CBAsales;
    ifstream NABsales;
    ifstream* Tempsales = 0;
    ifstream infile;
    map<string,Vector<Stock>> mapIAG;
    map<string,Vector<Stock>> mapCBA;
    map<string,Vector<Stock>> mapNAB;
    map<string,Vector<Stock>> mapTemp;
    map<string,Vector<Stock>>::iterator it;

    double price1, price2;
    Time time1, time2;
    Date date1;
    string sXCode,sInputDate;
int main()
{

    void initializing();
    codeindex.open("Datafolder/code_index.txt");
    if(! codeindex)
    {
        cout << codeindex <<" : File not found!!" << endl;
        system("PAUSE");
        exit(1);
    }


    do
    {
        initializing();
        time1.initialize();
        highestPrice = (data.getvalue(0)).getprice();//Initialise highest price
        lowestPrice=0;
        lowestPrice = (data.getvalue(0)).getprice();//Initialise lowest price
        (data.getvalue(0)).gettime(time1, data.getvalue(0));//Initialise time1

        switch (option)
        {
        case 1:
            {
                Date datehigh;
                for(int i = 1 ; i < counter ; i ++)
                {
                    if((data.getvalue(i)).getprice() > highestPrice)
                    {
                        highestPrice = (data.getvalue(i)).getprice();
                        (data.getvalue(i)).gettime(time1, data.getvalue(i));//get the time when highest price first occurred
                        (data.getvalue(i)).getdate(datehigh, data.getvalue(i));
                    }
                }   
                cout << "Date: " << datehigh << endl;
                cout << "Highest price : " << highestPrice << endl;
                cout << "Start time(s): " << endl;
                cout << time1 ;

                for(int i = 0 ; i < counter ; i ++)
                {
                    if( (data.getvalue(i)).getprice() == highestPrice)
                    {
                        (data.getvalue(i)).gettime(time2, data.getvalue(i));//get the time when highest price occurred

                        if(time2 != time1)//avoid duplicated time
                        {
                            (data.getvalue(i)).printtime();
                            (data.getvalue(i)).gettime(time1, data.getvalue(i));
                            //(data.getvalue(i)).getdate(datehigh, data.getvalue(i));
                        }
                    }//End of if( (data.get(i)).getprice() == highestPrice)
                }//End of for(int i = 0 ; i < count ; i ++)
                //main();
            //initialize();
            //(data.getvalue(0)).printdate();


                break;
            }
        case 2:
            {   
            Date datelow;
                for(int i = 1 ; i < counter ; i ++)
                {

                    if(((data.getvalue(i)).getprice() < lowestPrice) && ((data.getvalue(i)).getprice() > 0))
                    {
                        lowestPrice = (data.getvalue(i)).getprice();
                        (data.getvalue(i)).gettime(time1, data.getvalue(i));//get the time when lowest price first occurred
                        (data.getvalue(i)).getdate(datelow, data.getvalue(i));
                    }

                } 
                int j =0;
                //(data.getvalue(j)).printdate();

                cout << "Date: " << datelow << endl;
                cout << "Lowest price: " << lowestPrice << endl;
                cout << "Start time(s): " << endl;
                cout << time1<<endl;

                for(int i = 0 ; i < counter ; i ++)
                {
                    if( (data.getvalue(i)).getprice() == lowestPrice)
                    {
                        (data.getvalue(i)).gettime(time2, data.getvalue(i));//get the time when highest price occurred

                        if(time2 != time1)//avoid duplicated time
                        {
                            (data.getvalue(i)).printtime();
                            (data.getvalue(i)).gettime(time1, data.getvalue(i));
                        }
                    }//End of if( (data.get(i)).getprice() == lowestPrice)
                }//End of for(int i = 0 ; i < count ; i ++)
                //main();
            //initialize();
                break;
            }
        case 3:
            {
                outfile.open("output.csv");
                if(! outfile)
                {
                    cout << "Can not open outfile" << endl;
                    exit(1);
                }
                cout << "Data processing" << endl;
                outfile << fixed << showpoint << setprecision(2);
                outfile << "Date,Start time,Price of share,Volume of shares traded,Total value of shares traded" << endl;
                price1 = data.getvalue(counter-1).getprice();//get price for the last row
                double nVolumeOfTrades = data.getvalue(counter-1).getvolume();
                double ntotalValueOfShares = data.getvalue(counter-1).getvalue();
                // Get Date of trading
                data.getvalue(counter-1).getdate(date1,data.getvalue(counter-1));
                // Get Start time
                data.getvalue(counter-1).gettime(time1,data.getvalue(counter-1));

                for(int i = counter-2; i > -1 ; i --)
                {
                    price2 = data.getvalue(i).getprice();
                    if(price2 != 0 && price1 != price2)
                    {
                        // Write values to file.
                        outfile << date1 << "," << time1 << "," << price1 << "," << nVolumeOfTrades << "," << ntotalValueOfShares << endl;

                        // Get Date of trading
                        data.getvalue(i).getdate(date1,data.getvalue(i));
                        // Get Start time
                        data.getvalue(i).gettime(time1,data.getvalue(i));

                        price1 = data.getvalue(i).getprice();
                        nVolumeOfTrades = 0;
                        ntotalValueOfShares = 0;
                    }
                    nVolumeOfTrades += data.getvalue(i).getvolume();
                    ntotalValueOfShares += data.getvalue(i).getvalue();
                }
                cout << "Data processed" << endl;
                outfile.close();
                //initialize();

                //main();
                break;
            }
        case 4:
            {
                break;
            }
        default:
            {
                cout << "Invalid option" << endl;
                cout<<"Choose from options 1 to 4: "<<endl;
                cout << "Enter 1 to get the highest stock price & time:" << endl;
                cout << "Enter 2 to get the lowest stock price & time:" << endl;
                cout << "Enter 3 to output the csv file: " << endl;
                cout << "Enter 4 to exit from the program:" << endl;
                cin >> option;
                break;
            }
        }

        if(option==4)
        {
            break;
        }

        cout << "\n\n" << endl;
    }


    while(1);

    return 0;
}

void initializing()
{
  // Present the user with Input options
        cout<<"Enter the code of transaction:" <<endl;
        while(! codeindex.eof()){

            getline(codeindex,record);
            cout<<record<<endl;
        }
        cin>>sXCode;
        codeindex.clear();
        codeindex.seekg(0,ios::beg);
        while(sXCode!="IAG" && sXCode!="CBA" && sXCode!="NAB"){
            cout<<"Wrong input .. Please enter again \n";
            cin>>sXCode;

        }

        // Get code file name.
        if(sXCode=="IAG")
        {
            if(IAGsales.is_open()==true){

            IAGsales.close();
            }
            IAGsales.open("Datafolder/IAG/sales_index.txt");

            if(!IAGsales)
            {
                cout << IAGsales<<" :File not found!!" << endl;
                system("PAUSE");
                exit(1);
            }

            // Read IAG file names.
            while(!IAGsales.eof())
            {
                getline(IAGsales, sFileName);
                if(sFileName.size() > 0)
                { //cout<<"before: "<< sFilePath <<endl;
                    string sFilePath = "Datafolder/IAG/";
                    sFilePath = sFilePath.append(sFileName);
                    cout<<"after append: "<< sFilePath <<endl;
                    // Read the csv file
                    infile.open(sFilePath);
                    if(! infile)
                    {
                        cout << sFileName<<": File not found!!" << endl;
                        exit(1);
                    }

                    getline(infile, record);//first line
                    getline(infile, record);//second line

                    while(! infile.eof())
                    {
                        getline(infile, record);
                        if(record.size() > 0)
                        {
                            S1.readfile(record, S1);
                            data.insert(S1);
                            counter ++;
                        }
                    }//while(! infile.eof())
                    infile.close();

                    // Insert to Map
                    mapIAG.insert(pair<string,Vector<Stock>>(sFileName,data));
                }

            }






            IAGsales.clear();
            IAGsales.seekg(0,ios::beg);
            Tempsales = &IAGsales;
            //cout<<"test1";
            //IAGsales.close();
        }
        else if(sXCode=="CBA")
        {

            if(CBAsales.is_open()==true){

            CBAsales.close();
            }

            CBAsales.open("Datafolder/CBA/sales_index.txt");
            if(!CBAsales)
            {
                cout << CBAsales<<" : File not found!!" << endl;
                system("PAUSE");
                exit(1);
            }

            // Read IAG file names.
            while(!CBAsales.eof())
            {
                getline(CBAsales, sFileName);
                if(sFileName.size() > 0)
                {
                    string sFilePath = "Datafolder/CBA/";
                    sFilePath = sFilePath.append(sFileName);
                    // Read the csv file
                    infile.open(sFilePath);
                    if(! infile)
                    {
                        cout << sFileName<<": File not foud!!!" << endl;
                        exit(1);
                    }

                    getline(infile, record);//first line
                    getline(infile, record);//second line

                    while(! infile.eof())
                    {
                        getline(infile, record);
                        if(record.size() > 0)
                        {
                            S1.readfile(record, S1);
                            data.insert(S1);
                            counter ++;
                        }
                    }//while(! infile.eof())
                    infile.close();

                    // Insert to Map
                    mapIAG.insert(pair<string,Vector<Stock>>(sFileName,data));
                }
            }






            CBAsales.clear();
            CBAsales.seekg(0,ios::beg);
            Tempsales = &CBAsales;
            //cout<<"test2";
        }
        else 
        {

            if(NABsales.is_open()==true){

            NABsales.close();
            }

            NABsales.open("Datafolder/NAB/sales_index.txt");
            if(!NABsales)
            {
                cout << NABsales<<" : File not found!!!!" << endl;
                system("PAUSE");
                exit(1);
            }

            // Read IAG file names.
            while(!NABsales.eof())
            {
                getline(NABsales, sFileName);
                if(sFileName.size() > 0)
                {
                    string sFilePath = "Datafolder/NAB/";
                    sFilePath = sFilePath.append(sFileName);
                    // Read the csv file
                    infile.open(sFilePath);
                    if(! infile)
                    {
                        cout << sFileName<<": File not foud!!" << endl;
                        exit(1);
                    }

                    getline(infile, record);//first line
                    getline(infile, record);//second line

                    while(! infile.eof())
                    {
                        getline(infile, record);
                        if(record.size() > 0)
                        {
                            S1.readfile(record, S1);
                            data.insert(S1);
                            counter ++;
                        }
                    }//while(! infile.eof())
                    infile.close();

                    // Insert to Map
                    mapIAG.insert(pair<string,Vector<Stock>>(sFileName,data));
                }
            }   
            NABsales.clear();
            NABsales.seekg(0,ios::beg);
            Tempsales = &NABsales;
            //cout<<"test3";

        }


         highestPrice = (data.getvalue(0)).getprice();//Initialise highest price
    lowestPrice = (data.getvalue(0)).getprice();//Initialise lowest price
    (data.getvalue(0)).gettime(time1, data.getvalue(0));//Initialise time1


        cout<<"Enter the date of transaction:" <<endl;
        while(!Tempsales->eof()){
            getline(*Tempsales,record);
            cout<<record<<endl;
        }
        cin>>sInputDate;

        cout<<"Choose from options 1 to 4: "<<endl;
        cout << "Enter 1 to get the highest stock price & time:" << endl;
        cout << "Enter 2 to get the lowest stock price & time:" << endl;
        cout << "Enter 3 to output the csv file: " << endl;
        cout << "Enter 4 to exit from the program:" << endl;
        cin >> option;

        // Get the vector from Map based on Date.
        if(sXCode=="IAG")
        {
            it = mapIAG.find(sInputDate);
            data = it->second;
        }
        else if(sXCode=="CBA")
        {
            it = mapIAG.find(sInputDate);
            data = it->second;
        }
        else
        {
            it = mapIAG.find(sInputDate);
            data = it->second;
        }


}

股票是矢量。

0 个答案:

没有答案