2017-06-15 21 views
0

record.txtという名前のファイルでlook_forという文字列を検索する必要がありますが、コードは機能しません。ファイル内の文字列を検索し、その文字列を含む行を出力する方法は?

私はそれをlook_forする値を与えるたびに、それはレコードが

string look_for, line; 
    in.open("record.txt"); 
    cout<<"what is registration no of student ?"; 
    cin>>look_for; 
    while(getline(in,line)) 
    { 
     if(line.find(look_for)!= string::npos) 
     { 
      cout<<" record found "<<endl<<endl; 
      break; 
     } 
     else cout<<"record not found "; 
    } 
+4

[mcve]を投稿してください。 –

+5

...短いサンプルファイルと 'look_for'値を含める必要があります。 – Rook

+2

(最初にチェックしてください: 'in'は' open'を呼び出した後でも有効です。) – Rook

答えて

0

あなたのコードは正常に動作しますが、ファイルが実際に開くことができたかどうかをチェックしませんが見つかりませんと言うファイルに存在しています。

は、このようにコードを変更します。

... 
    in.open("record.txt"); 

    if (!in.is_open()) 
    { 
    cout << "Could not open file" << endl; 
    return 1; 
    } 

    cout << "what is registration no of student ?"; 
    ... 

ファイルを開くことができませんでした理由が挙げられる:

  • ファイルは、ファイルがディレクトリにない
  • 存在しません。実行可能ファイルが実行される場所
+0

私はそれを試して、ファイルが正常に開かれていると確信しています.... –

+2

再生できません。投稿する[mcve](既に尋ねられている)。たぶん、問題はあなたが表示していないコードにあります(ここはいつも起こっています)。 –

+0

string look_for、line、line2; in.open( "record.txt"); cout << "学生の登録番号は何ですか?"; cin >> look_for; if(!in_is_open()) { cout << "ファイルを開くことができませんでした" "endl; }ながら()ラインでのgetline(){ IF(!line.find(look_for)=文字列::のNPO) {COUTは<< "レコードが見つかった" << ENDL << ENDL。 休憩。 } else cout << "レコードが見つかりません"; } –

0

ファイルが開かれていることと、戻り値がgetlineので正しい値であることと、ファイルにUTF-8エンコーディングがあることも確認してください。

+0

正しい値が何であり、どのようにutf 8エンコーディングをチェックするか –

-1
#include <iostream> 
#include <fstream> 
#include <string>` 
using namespace std; 

int main() 
{ 
    string look_for, line; 
    int lineNumber = 0; 
    ifstream in("record.txt"); 
    if (!in.is_open()) 
    { 
     cout << "Couldn't open file" << endl; 
     return -1; 
    } 

    cout << "what is registration no of student ?\t"; 
    cin >> look_for; 
    while (getline(in, line)) 
    { 
     if (line.find(look_for) != string::npos) 
     { 
      cout << "Line:\t" << lineNumber << "\t[ " << look_for << " ] found in line [ " << line << " ]" << endl; 
      lineNumber = 0; 
      break; 
     } 
     lineNumber++; 
    } 

    if (lineNumber != 0) 
     cout << "[ " << look_for << " ] not found" << endl; 

    return 0; 
} 
関連する問題