Страница: 1 |
Страница: 1 |
Вопрос: поиск в файле
Добавлено: 21.01.09 11:32
Автор вопроса: Artful
Необходимо:
1.проверить файл произвольного доступа, на наличие записей;
2. Организовать поиск записи в файле, притом, что заполненные записи могут идти в перемешку с пустыми, т.е. например запись 2,5 не пустая, а 4 пустая запись.
Заранее спасибо!
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
VβÐ
Вопросов: 15
Ответов: 194
Web-сайт:
Профиль | | #1
Добавлено: 21.01.09 12:13
Ну как как, проверяй размер файла, если больше нуля - записи есть. А назаполненность проверяй запись простой проверкой.
Номер ответа: 2
Автор ответа:
VβÐ
Вопросов: 15
Ответов: 194
Web-сайт:
Профиль | | #2
Добавлено: 21.01.09 12:13
А вообще юзай базы данных
Номер ответа: 3
Автор ответа:
Artful
Вопросов: 4
Ответов: 5
Профиль | | #3
Добавлено: 21.01.09 13:46
я просто новичок и мне так проще... можно пример как проверять размер файла, и как узнать какое количество записей всего в файле?
Номер ответа: 4
Автор ответа:
VβÐ
Вопросов: 15
Ответов: 194
Web-сайт:
Профиль | | #4
Добавлено: 21.01.09 14:07
Функция FileLen(имя файла) возвращает размер файла в байтах.
Что касается определения количества записей. Смотри. В твоем файле X записей, каждая из которой одинаковой длины. Длину записи можно узнать с помощью оператора Len(). У тебя есть файл длиной N байт, каждая запись в нем по B байт - узнать количество просто: N / B.
Номер ответа: 5
Автор ответа:
Imperial Kashak
ICQ: 479713821
Вопросов: 10
Ответов: 57
Профиль | | #5
Добавлено: 21.01.09 14:58
Другой вариант - открыть файл для вывода из него, и те же операции, но оператор такой LOF(#F). Принцип тот же, просто другой подход.
Номер ответа: 6
Автор ответа:
Imperial Kashak
ICQ: 479713821
Вопросов: 10
Ответов: 57
Профиль | | #6
Добавлено: 21.01.09 14:59
ЗЫ F - номер файла, т.е. #3, #N, #failik
Номер ответа: 7
Автор ответа:
Artful
Вопросов: 4
Ответов: 5
Профиль | | #7
Добавлено: 21.01.09 18:49
возникла проблема: есть файл произвольного доступа, в нем записаны кое какие записи, как мне полностью удалить запись под номером 5, например? А то записывая туда "" получается что заменяется только первый символ из этой записи . Есть способ чтобы полностью удалял запись?
Номер ответа: 8
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #8
Добавлено: 21.01.09 20:50
Хотите удалить или "обнулить" запись?
Для удаления записи из FileName1 скорее всего придется использовать временный файл (FileName2).
Удали (Kill) FileName2, если он существует (проверка с помощью ф-ии Dir)
Запиши туда только нужные записи, закрой оба файла, удали (Kill FileName1) исходный, скопируй (FileCopy FileName2, FileName1), удали (Kill) FileName2
Для "обнуления" запиши обычным образом в FileName1 запись со всеми нулями.
Если в записи есть поля типа Rec.S=String * N, задай Rec.S=String(N,char(0))
Номер ответа: 9
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #9
Добавлено: 21.01.09 22:53
Rec.S=String * N -> Type Rec: S As String * 20: End Type (устал, наверно)
char -> Chr (атавизм Pascal-я)
Да, и временный файл не нужен, если все записи исходного файла считать в mArray()as Rec