【问题标题】:How to search in a file the best, easiest way?如何以最好、最简单的方式在文件中搜索?
【发布时间】:2012-01-22 16:01:34
【问题描述】:

有人能告诉我这是否是通过 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;
}

【问题讨论】:

标签: c++ search file-io


【解决方案1】:

好吧,这可行,但它会很慢...取决于您的文件有多大,以及您的程序运行多长时间(即,它是在后台运行的持久程序还是某种类型的服务),最好对文件进行内存映射,和/或将整个文件读入std::stringstream,然后扫描内存中存储的文件。同样,这完全取决于您的文件有多大,以及阅读程序的持久性如何。如果它是一个巨大的文件,并且您的程序只运行一次然后退出,那么是的,您当前的方法是可以的。

【讨论】:

    【解决方案2】:

    您可以通过更改 for 循环来提高效率。实际上,即使您找到了帐号,您也似乎浏览了整个文件。假设没有重复的号码,您应该将其设置为如果找到号码则终止。

    【讨论】:

    • 太棒了。除此之外,此方法应该适合您。但是您的文件是如何组织的?如果不是随机的,其他搜索方法会更好。
    • 我有一个二进制文件(account.dat),其中存储了有关帐户(银行帐户)的所有信息。我不知道它是如何组织的)。这些搜索方法是什么?
    • 没关系,对不起。我不知道我在说什么,而且很困惑。可能有,我会在下面查看 Jason 的帖子。
    【解决方案3】:

    根据您的用例,您最好使用诸如sqlite 之类的数据库引擎并让它为您处理搜索。 Sqlite 以 C++ 库的形式存在,您可以在程序中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多