C ++从输入的字符串中搜索CSV文件

时间:2017-05-30 13:18:33

标签: c++ visual-studio csv

我正在尝试创建一个程序,该程序将加载CSV文件并根据输入的单词搜索文件并返回包含该单词的任何行。 CSV文件是推文的大量下载,其中包含以下列:

  • 日期&创造时间
  • The Tweet

这些推文也被b'TWEET TEXT在这里所包围'所以需要从打印出来时删除b''。我遗憾地无法更改与CSV文件有关的任何内容,因此无法手动将其删除。我遇到的问题是:

  1. 列出程序冻结的文件中的推文总数
  2. 从推文中删除b''
  3. else语句导致“未找到”不断打印
  4. Code I目前正在返回包含输入单词但也包含误报的推文。

    The current output when running the below code

    运行以下代码时的当前输出

    #include "stdafx.h"
    #include <cstring>
    #include <fstream>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string token;
        ifstream fin;
        fin.open("sampleTweets.csv");
    
        if (fin.is_open())
        {
            cout << "File opened successfully" << "\n";
        }
        else {
            cout << "Error opening file" << "\n";
        }
    
        cout << "Enter search word: ";
        cin >> token;
        "\n";
    
        string line;
        while (getline(fin, line)) {
            if (line.find(token) != string::npos) {
                cout << line << endl;
            } else {
            cout << token << " not found" << endl;
        }
        }
    
        fin.close();
        char anykey;
        cout << "press any key";
        cin >> anykey;
        return 0;
    
    }
    

    我用来计算总推文的代码

    int count = 0;
    char str[140];
    
    while (!fin.eof())
    {
        fin.getline(str, 140);
        count++;
    }
    
    cout << "Number of lines in file are " << count;
    

    任何有关这方面的帮助都会令人惊讶,因为我对C ++很陌生,不知道从哪里开始!

1 个答案:

答案 0 :(得分:0)

您可以使用"b"删除erase

if (line.find(token) != string::npos){
  int n= line.find(",");
  line.erase(n+1, 3);
  cout << line << endl;
}

你可以计算while循环中的行:

int count = 0;
while (getline(fin, line)) {
  ++count;
  ...
}

编辑:您可以删除多余的引号和逗号,如下所示:

line[n] = ' '; // change comma int space
line.erase(n+1, 4); // remove "b""
line.resize(line.size()-5); // remove trailing """,,