首页 > 解决方案 > 如何打印出包含关键字的 CSV 文件的整行?

问题描述

我试图找出如何从包含特定关键字的 CSV 中打印出整行。例如,我试图只从 CSV 文件中抓取包含“Back Bay”的行。这是代码

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream myfile("cabs.csv");

    while (myfile.good())
    {
        string line;
        string find = "Back Bay";
        getline(myfile, line, ',');
        if (strstr(line.c_str(),find.c_str()))
        {
            cout << line << endl;
        }
        
    }
}

这是 CSV 文件的片段:

2.61,Lyft,1543428487883,South Station,Back Bay,27.5,1.0,2cccac4a-57dc-4dbe-b531-bb529335e898,lyft_lux,Lux Black
2.61,Lyft,1543428487883,South Station,Back Bay,7,1.0,38504f2f-300c-4e1b-bff4-4b44c3b4b842,lyft_line,Shared
2.61,Lyft,1543428487883,South Station,Back Bay,10.5,1.0,3ec303ac-a8b2-4fb8-add2-c83b61c627b5,lyft,Lyft
2.07,Lyft,1543428487883,North End,Beacon Hill,16.5,1.0,7b0c4e8d-21fc-4350-9972-f8dace1177ad,lyft_premier,Lux
2.07,Lyft,1543428487883,North End,Beacon Hill,10.5,1.0,9df49a6e-662d-4ac9-b003-34e3f146a209,lyft,Lyft
2.07,Lyft,1543428487883,North End,Beacon Hill,22.5,1.0,b7d55026-7809-4b7a-b275-27648f79cb8a,lyft_lux,Lux Black

到目前为止,我的输出只打印出文本“Back Bay”(无论它出现多少次),但我希望它也能返回整行值。=>

由此:

Back Bay
Back Bay
Back Bay

对此:

2.61,Lyft,1543428487883,South Station,Back Bay,32.5,1.0,e1f1d1e3-f66a-4c12-94a6-62f59aff739b,lyft_luxsuv,Lux Black XL
2.61,Lyft,1543428487883,South Station,Back Bay,22.5,1.0,ed7e441e-8318-4c89-9499-8d4737bad7b5,lyft_premier,Lux
3.45,Uber,1543474677639,South Station,Back Bay,,1.0,09ede7b3-2e9b-43b4-8837-a58efb2e4d7a,8cf7e821-f0d3-49c6-8eba-e679c0ebcf6a,Taxi

标签: c++csv

解决方案


getline(myfile, line, ','); 不会读取整行,而只会读取“,”之间的值,因此您只打印“Back Bay”。如果“后湾”的位置无关紧要,可以使用:

std::ifstream input("cabs.csv" );

for( std::string line; getline( input, line ); )
{
   if (line.find("Back Bay") != std::string::npos) {
      std::cout << line << endl;
   }
}

推荐阅读