读取文本文件并将数据存储到多个数组C ++中

时间:2017-09-17 19:40:38

标签: c++ arrays string substr

我正在尝试读取数据库文件(作为txt),我想跳过空行并跳过文件中的列标题行并将每个记录存储为数组。我想采取stop_id并适当地找到stop_name。即。

如果我说让我停止17,该计划将获得“Jackson& Kolmar”。

文件格式如下:

17,17,"Jackson & Kolmar","Jackson & Kolmar, Eastbound, Southeast  Corner",41.87685748,-87.73934698,0,,1
18,18,"Jackson & Kilbourn","Jackson & Kilbourn, Eastbound, Southeast Corner",41.87688572,-87.73761421,0,,1
19,19,"Jackson & Kostner","Jackson & Kostner, Eastbound, Southeast Corner",41.87691497,-87.73515882,0,,1

到目前为止,我能够获取stop_id值,但现在我想获取停止名称值,并且对c ++字符串操作相当新

mycode.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string filename;
    filename = "test.txt";
    string data;

    ifstream infile(filename.c_str());

    while(!infile.eof())
    {
        getline(infile,line);
        int comma = line.find(",");
        data = line.substr(0,comma);
        cout << "Line " << count << " "<< "is "<< data << endl;
        count++;
    }
    infile.close();
    string sent = "i,am,the,champion";
 return 0;

}

2 个答案:

答案 0 :(得分:1)

您可以使用string::find 3次搜索逗号的第三次出现,并且必须存储line中找到的最后2次出现的位置,然后将它们用作{{1}的输入数据{1}}并获取搜索到的文字:

string::substr

答案 1 :(得分:0)

您可以将文件的整行读入一个字符串,然后使用stringstream一次一个地为您提供一个,直到和排除逗号。然后你可以填满你的阵列。我假设你想要它自己的数组中的每一行,并且你想要无限的数组。最好的方法是拥有一个数组数组。

std::string Line;
std::array<std::array<string>> Data;
while (std::getline(infile, Line))
{
    std::stringstream ss;
    ss << Line;
    Data.push_back(std::vector<std::string>);
    std::string Temp;
    while (std::getline(ss, Temp, ','))
    {
        Data[Data.size() - 1].push_back(Temp);
    }
}

通过这种方式,您将拥有一个向量,其中包含向量,每个向量都包含该行中所有数据的字符串。要将字符串作为数字访问,可以使用std::stoi(std::string)将字符串转换为整数。