2012-01-22 23 views
3

これはIDでアカウントを検索し、彼に関するすべてのデータを出力するよい方法だと誰かに教えてもらえますか?そうでない場合は、どちらが最善の方法ですか?ファイルを検索する方法は、最も簡単で簡単ですか?

私はこれを持っている:

void account::showacc() { 
    ifstream inFile; 
    inFile.open("account.dat",ios::binary|ios::in|ios::app); 
    int accnum1,n; 
    cout<<"Enter account num: "; 
    cin>>accnum1; 
    n=test(); 

    for(int i=0;i<n;i++) 
    { 
    inFile.read((char*)&acc,sizeof(acc)); 
    if(accnum==accnum1) 
    { 
     cout<<"account number is: "<<accnum<<endl; 
     cout<<"The possesor's name is :"<<name; 

    } 
    } 
    inFile.close(); 
} 

そしてtest()は次のとおりです。

int account::test() 
{ 
    ifstream inFile; 
    inFile.open("account.dat",ios::binary|ios::in|ios::app); 
    inFile.seekg(0,ios::end); 
    int n; 
    n=inFile.tellg()/sizeof(acc); 
    inFile.close(); 
    return n; 
} 
+0

これはおそらくこのタイプの質問のために特別に設計されたサイトhttp://codereview.stackexchange.com/で良いでしょう。 – Mat

答えて

2

まあ、これは動作しますが、あなたのファイルがどのように大きなに応じて...遅いことになるだろうあなたのプログラムがどれくらいの期間実行されているか(つまり、バックグラウンドで実行されている永続的なプログラムやある種のサービスの場合)、ファイルをメモリマップしたり、ファイル全体をstd::stringstream保存したファイルをメモリ上でスキャンします。繰り返しますが、これはファイルの大きさと読み取りプログラムの永続性によって異なります。それが巨大なファイルで、あなたのプログラムが一度だけ実行されてから終了するならば、あなたの現在のメソッドは大丈夫です。

1

forループを変更すると、より効率的にすることができます。たとえアカウント番号が見つかったとしても、ファイル全体を通過するように見えます。重複した番号がないと仮定して、番号が見つかると終了するように設定する必要があります。

+0

私は休憩を取った。 if()ステートメント。ありがとう。 – ddacot

+0

それ以外に、この方法はあなたのために働くはずです。しかし、あなたのファイルはどのように組織されていますか他の検索方法は、ランダムでないとうまくいくでしょう。 – CSturgess

+0

私はバイナリファイル(account.dat)を持っています。私はアカウント(銀行口座)に関するすべての情報を保存しています。私はそれがどのように整理されているか分かりません)。これらの検索方法は何ですか? – ddacot

1

ユースケースによっては、sqliteなどのデータベースエンジンを使用する方が良い場合があります。 Sqliteは、プログラムで使用できるC++ライブラリとして存在します。

関連する問題