Как искать в файле лучший, самый простой способ? - PullRequest
3 голосов
/ 22 января 2012

Может кто-нибудь сказать мне, если это хороший способ поиска учетной записи по идентификатору, и вывести все данные о нем?Если нет, то какой путь лучше?

У меня есть это:

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;
}

Ответы [ 3 ]

2 голосов
/ 22 января 2012

Хорошо, это будет работать, но будет медленно ... в зависимости от размера файла и продолжительности его работы (т. Е. Если это постоянная программа, работающая в фоновом режиме или служба какого-либо типа)), было бы гораздо лучше создать карту памяти файла и / или прочитать весь файл в std::stringstream, а затем просканировать сохраненный файл в памяти.Опять же, все это будет зависеть от того, насколько велик ваш файл и насколько постоянна программа чтения.Если это огромный файл, и ваша программа запускается только один раз, а затем завершается, тогда да, ваш текущий метод в порядке.

1 голос
/ 22 января 2012

В зависимости от вашего варианта использования, вам может быть лучше использовать механизм базы данных, такой как sqlite , и пусть он позаботится о поиске вас. Sqlite существует как библиотека C ++, которую вы можете использовать в своей программе.

1 голос
/ 22 января 2012

Вы можете сделать это намного эффективнее, изменив цикл for. На самом деле, похоже, что вы просматриваете весь файл, даже если вы нашли номер счета. Предполагая, что нет повторяющихся номеров, вы должны настроить его на завершение, если он найдет номер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...