|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Поиск данных в файле |
|
C/C++ - [решено] Поиск данных в файле
|
Новый участник Сообщения: 44 |
Профиль | Отправить PM | Цитировать
Всем доброго времени суток!
У метя тут возникла не большая проблема, помогите, пожалуйста, с ней разобраться. Задача: Необходимо добавлять и находить данные о пользователях, при этом эти данные должны храниться в файле. Проблема: Не могу разобраться с поиском в файле, нахожу только последнюю запись. Как должна работать программа: Данные о пользователе хранятся в виде структуры. struct user { char name[16]; //имя пользователя - строка в стиле Си (массив символов) unsigned int len; //длина пароля char pass[16]; //пароль пользователя - массив символов bool block; //признак блокировки учетной записи unsigned int opt; //признак включения ограничений на выбираемые пароли }; Необходима функция добавления новых пользователей в файл. Также необходима функция поиска среди существующих пользователей по их логину и паролю в созданном файле. Как получилось: Получилось все, кроме поиска пользователей в файле. Точней она находит запись по пользователю, только если эта запись в конце файла, а остольные пропускает. Вот листинг этой функции: using namespace std; if(FileExists("MyFile.dat")) //проверяем наличие файла { //открываем файл на чтение fstream fs( "MyFile.dat", ios::in|ios::binary); if(!fs.is_open()) stderr; struct user uu; //структура для хранения данных Label5->Caption="FALSE"; //fs.seekg(0); bool exit=false; //флаг выхода из цикла while(!exit) { //читаем файл и копируем текущие данные в структуру fs.read((char *)&uu, sizeof(uu)); //если то что ввели совпало с тем что в структуре if((Edit3->Text==uu.name) && (Edit4->Text==uu.pass)) { Label5->Caption="OK"; //говорим OK exit=true; //ставим флаг на выход } else{ fs.seekg(sizeof(uu),ios::cur); //смещаемся к следующей структуре в файле if(!fs.eof()) exit=true; //если конец файла ставим флаг на выход } } fs.close(); } else Label5->Caption="ERROR! File not faund"; Также прикрепляю к этому посту исходники всего проекта. Проект создан на C++ Builder 6. |
|
Отправлено: 11:24, 03-11-2008 |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать На вскидку.
Не правильно оргаеизован цикл while(!exit) { //читаем файл и копируем текущие данные в структуру fs.read((char *)&uu, sizeof(uu)); //если то что ввели совпало с тем что в структуре if((Edit3->Text==uu.name) && (Edit4->Text==uu.pass)) { Label5->Caption="OK"; //говорим OK exit=true; //ставим флаг на выход } else{ fs.seekg(sizeof(uu),ios::cur); //смещаемся к следующей структуре в файле if(!fs.eof()) exit=true; //если конец файла ставим флаг на выход } } т.к прочитав в структуру, сверяешь данные и если они не совпадают, перескакиваешь через одну и читаещь следующую. Вряд ли "Так надо". |
Отправлено: 11:50, 03-11-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Цитата ___oj:
Убрал fs.seekg, но все равно, это не помогла... |
|
Отправлено: 11:59, 03-11-2008 | #3 |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:06, 03-11-2008 | #4 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 03:07, 05-11-2008 | #5 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Вот еще решил выложить готовые исходники этой программы. Может кому в качестве примера работы с файлами пригодится.
Программа обрабатывает данные о пользователях сохраненных в файле, реализовано следующие: - добавление новых пользователей, с проверкой их существования; - вывод в список всех пользователей из файла; - редактирования пользователей в списке на выбор. Программа написана на C++ Builder 6. P.S. Это пока пробная версия программы, что мне нужно написать, так что я еще возможно вернусь с новыми вопросами P.P.S. Просьба модераторам закрыть тему, т.к. данная задача решена полностью. |
Последний раз редактировалось Luzuk, 05-11-2008 в 05:50. Причина: добавил просьбу модератору Отправлено: 04:04, 05-11-2008 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Строковый поиск в бинарном файле | kt626 | Скриптовые языки администрирования Windows | 1 | 15-10-2009 06:45 | |
[решено] Повторяющийся текст в файле. | HORRIBLE | AutoIt | 3 | 14-08-2009 00:31 | |
CMD/BAT - [решено] Изменение текста в файле | tarasov.evgeny | Скриптовые языки администрирования Windows | 5 | 12-08-2009 16:21 | |
MySQL - [решено] сохранение данных в базе данных Mysql | TigerZaka | Программирование и базы данных | 4 | 24-08-2008 15:48 | |
Delphi - Delphi | Ресурсы и поиск в файле | Borislav | Программирование и базы данных | 1 | 10-02-2005 09:30 |
|