2017-05-30 53 views
0

我想創建一個程序,它將加載CSV文件,並根據輸入的文字搜索文件並返回任何包含該單詞的行。 CSV文件是微博的海量下載,並具有以下欄目:C++從輸入的字符串搜索CSV文件

  • 日期&創建時間
  • 鳴叫

的微博也被b'TWEET TEXT HERE」,讓周圍會需要從打印出來時刪除b「。我無法改變任何與CSV文件可悲,所以不能手動刪除它。我遇到的問題是:

  1. 清單的程序只是凍結
  2. 去除
  3. else語句導致‘未找到’的鳴叫B」「的文件內鳴叫的總量是不斷印刷

代碼我目前已經返回包含輸入詞的推文,也包含誤報。

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

爲什麼你無條件地運行'cout << token <<「not found」<< endl;'? – NathanOliver

+0

啊,這將解釋它總是打印出來的事實... –

+0

cin >> token; 「\ n」 個;我不確定你在這裏想達到什麼,但這是錯誤的。 – willll

回答

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 """,, 
+0

謝謝你,它刪除了B,但仍然有很多逗號和「我最好也想刪除,目前輸出看起來像這樣[Gyazo捕獲](https://gyazo.com/b300b0a56d3dce221b5250351d9783dc) –

+0

@KaiJones:這就是爲什麼我問輸出線。 – Beta

+0

對不起,我以爲我早先回答了我的錯誤。你有什麼想法爲什麼else循環不斷跑起來應該是什麼時候? –