getline将行的所有内容从CSV打印到一个变量

问题描述 投票:0回答:1

我需要将每个CSV值输入到我拥有的变量和getter中,但是getline因为某些原因将它们全部放入'date'变量中。你可以告诉Noob C ++编码器。

尝试做多个getline并将lineResults作为不同的变量。

StockList.cpp

#include "pch.h"
#include "StockList.h"
#include <math.h>

using namespace std;
StockList::StockList(string filePath)
{
    ifstream stockFile(filePath);
    string lineResults;
    while (!stockFile.eof()) {
        getline(stockFile, lineResults);
        Stocks s(lineResults);
        stocks.push_back(s);
        /*lineResults = stockFi

Stocks.h

#include <string>
#include <sstream>
#pragma once
class Stocks
{
public:
    Stocks(std::string stockInfo);
    std::string getDate();
    std::string getOpen();
    std::string getHigh();
    std::string getLow();
    std::string getClose();
    std::string getAdj();
    std::string getVolume();
    std::string getPercentChange();

private:
    std::string date;
    std::string open;
    std::string high;
    std::string low;
    std::string close;
    std::string adjClose;
    std::string volume;
    std::string PercentChange;

};

StockList.h

#include <string>
#include <vector>
#include "Stocks.h"
#include <fstream>
#include <algorithm>

#pragma once
class StockList
{
public:
    StockList(std::string filePath);

//private:
    std::vector<Stocks> stocks;
};

Stocks.cpp

#include "pch.h"
#include "Stocks.h"

using namespace std;


Stocks::Stocks(string stockInfo)
{
    stringstream stockStream(stockInfo);
    stockStream >> date;
    stockStream >> open;
    stockStream >> high;
    stockStream >> low;
    stockStream >> close;
    stockStream >> adjClose;
    stockStream >> volume;
}
string Stocks::getDate()
{
    return date;
}
string Stocks::getOpen()
{
    return open;
}
string Stocks::getHigh()
{
    return high;
}
string Stocks::getLow()
{
    return low;
}
string Stocks::getClose()
{
    return close;
}
string Stocks::getAdj()
{
    return adjClose;
}
string Stocks::getVolume()
{
    return volume;
}
/*string Stocks::getPercentChange()
{
    return (adjClose - open) / open * 100;
}*/

ConsoleApp.cpp

#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include "Stocks.h"
#include "StockList.h"
using namespace std;

void printStocks(Stocks stocks) {
    cout << "Date: " << stocks.getDate() << endl;
    cout << "Open: " << stocks.getOpen() << endl;
    cout << "High: " << stocks.getHigh() << endl;
    cout << "Low: " << stocks.getLow() << endl;
    cout << "Close: " << stocks.getClose() << endl;
    cout << "Adj Close: " << stocks.getAdj() << endl;
    cout << "Volume: " << stocks.getVolume() << endl;
}

int main()
{
    StockList list("stocks.csv");
    for (Stocks s : list.stocks)
        printStocks(s);

}

日期,开盘价,最高价,最低价,收盘价,收盘价,成交量2019-03-18,116.169998,117.610001,116.050003,117.570000,117.570000,31207600 2019-03-19,118.089996,118.440002,116.989998,117.650002,117.650002,37588700 2019-03-20,117.389999, 118.750000,116.709999,117.519997,117.519997,28113300 2019-03-21,117.139999,120.820000,117.089996,120.220001,120.220001,29854400 2019-03-22,119.500000,119.589996,117.040001,117.050003,117.050003,33624500 2019-03-25,116.559998,118.010002,116.320000,117.660004 ,117.660004,27067100 2019-03-26,118.620003,118.709999,116.849998,117.910004,117.910004,26097700 2019-03-27,117.879997,118.209999,115.519997,116.769997,116.769997,22733400 2019-03-28,117.440002,117.580002,116.129997,116.930000,116.930000,18334800 2019 -03-29,118.070000,118.320000,116.959999,117.940002,117.940002,25399800 2019-04-01,118.949997,119.110001,118.099998,119.019997,119.019997,22789100 2019-04-02,119.059998,119.480003,118.519997,119.190002,119.190002,18142300 2019-04-03,119.860001, 120.430000,119.150002,119.970001,119 .970001,22860700 2019-04-04,120.099998,120.230003,118.379997,119.360001,119.360001,20112800 2019-04-05,119.389999,120.230003,119.370003,119.889999,119.889999,15826200 2019-04-08,119.809998,120.019997,118.639999,119.930000,119.930000,15116200 2019 -04-09,118.629997,119.540001,118.580002,119.279999,119.279999,17612000 2019-04-10,119.760002,120.349998,119.540001,120.190002,120.190002,16477200 2019-04-11,120.540001,120.849998,119.919998,120.330002,120.330002,14209100 2019-04-12,120.639999, 120.980003,120.370003,120.949997,120.949997,19745100 2019-04-15,120.940002,121.580002,120.570000,121.050003,121.050003,15526700 2019-04-16,121.639999,121.650002,120.099998,120.769997,120.769997,12315624

c++ getline
1个回答
0
投票

它不是getline,你在构造函数中使用stringstream,它必须将空格视为分隔符。

尝试类似的东西:

Stocks::Stocks(const string& stockInfo)
{
    istringstream ss(stockInfo);

    getline(ss, date, ',');
    getline(ss, open, ',');
    getline(ss, high, ',');
    getline(ss, low, ',');
    getline(ss, close, ',');
    getline(ss, adjClose, ',');
    getline(ss, volume, ',');
}

顺便说一句,也许getter很好,但你可以将这些值存储在某种容器中,如std::map<std::string, std::string>(以便数据标题成为键)或至少std::list<std::string>(这样你就可以使用循环而不是凌乱的代码出版)。

自己检查代码,但问题是关于分隔符,这是肯定的。

© www.soinside.com 2019 - 2024. All rights reserved.