Search code examples
c++arraysstringsubstr

Reading a text file and storing data into multiple arrays C++


I am trying to read a database file (as txt) where I want to skip empty lines and skip the column header line within the file and store each record as an array. I would like to take stop_id and find the stop_name appropriately. i.e.

If i say give me stop 17, the program will get "Jackson & Kolmar".

The file format is as follows:

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

So far I am able to get the stop_id values but now I want to get the stop name values and am fairly new to c++ string manipulation

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;

}

Solution

  • You can use string::find 3 times to search for the third occurrence of the comma, and you must store the positions of the last 2 occurrences found in line, then use them as input data with string::substr and get the searched text:

    std::string line ("17,17,\"Jackson & Kolmar\",\"Jackson & Kolmar, Eastbound, Southeast  Corner\",41.87685748,-87.73934698,0,,1");
    std::size_t found=0, foundBack; 
    int i;
    for(i=0;i<3 && found!=std::string::npos;i++){   
        foundBack = found;
        found=line.find(",",found+1);
    }
    
    std::cout << line.substr(foundBack+1,found-foundBack-1) << std::endl;