Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2008, 00:44   #1
borzoni
 
Регистрация: 28.05.2008
Сообщений: 3
По умолчанию Разбить файл на 4 части

Здравствуйте!
Такая вот проблема:
дан файл типа куча (нетипизированный) для базы данных студентов
при вводе записи смотрим ключ(номер студента) и в соответствии с ним
по формуле -n mod 4- записываем в 4 разных места файла, смысл? -Чтобы проще искать по ключу.
Ну так вот вопрос в том, как записывать в 4 разных места? вообще не имею представления...

Заранее благодарен.

Последний раз редактировалось borzoni; 28.05.2008 в 00:55.
borzoni вне форума Ответить с цитированием
Старый 28.05.2008, 15:31   #2
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

я не уверен но возможно функцыя seek(файл, позицыя) - перемещает курсор в определённую позицию в файле, а потом можно дописывать в ту позицыю шотО)
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 28.05.2008, 15:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
дан файл типа куча (нетипизированный)
Не вижу выгоды. СУБД как раз любят с типированными файлами работать, я даже ни одной из них не знаю которая бы работала с бесструктурной базой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2008, 21:21   #4
borzoni
 
Регистрация: 28.05.2008
Сообщений: 3
По умолчанию

Неважно какой файл, даже если типизированный...Немного коряво объяснил...
Тупо я ввожу запись нового студента и ставлю код, далее делю код на 4 и в соответствии от остатка нахожу куда его записать.
Т.е если один - отправляю его в одно место файла,если два- в другое,если 5(т.е остаток 1)-ставлю ссылку с раннее введенной 1 записи(с кодом 1) на эту новую запись(код 5), соответственно так со всеми записями. Тупо получаются 4 колонки (но только в воображении - на самом деле как были записи в файле одна за другой, так и будут, но ссылки разбивают их на 4 цепочки). А фишка в том, что когда я ввожу к примеру 17 (код студента) я получаю 1(как остаток) и ищу не во всем файле, а только в цепочке, ответственной за остаток один...
Весь вопрос как мне запомнить адреса самых первых записей, чтобы я мог пустить поиск с этой записи до nil. Т.е как запоминать адресс записи родителя цепочки, так чтобы открывая приложение заново, все сохранялось. Вот так вот... Думаю теперь более понятно, по моему это еще называется хэш-функцией, но могу ошибаться...
borzoni вне форума Ответить с цитированием
Старый 28.05.2008, 22:13   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от borzoni Посмотреть сообщение
Неважно какой файл, даже если типизированный...Немного коряво объяснил...
Тупо я ввожу запись нового студента и ставлю код, далее делю код на 4 и в соответствии от остатка нахожу куда его записать.
Т.е если один - отправляю его в одно место файла,если два- в другое,если 5(т.е остаток 1)-ставлю ссылку с раннее введенной 1 записи(с кодом 1) на эту новую запись(код 5), соответственно так со всеми записями. Тупо получаются 4 колонки (но только в воображении - на самом деле как были записи в файле одна за другой, так и будут, но ссылки разбивают их на 4 цепочки). А фишка в том, что когда я ввожу к примеру 17 (код студента) я получаю 1(как остаток) и ищу не во всем файле, а только в цепочке, ответственной за остаток один...
Весь вопрос как мне запомнить адреса самых первых записей, чтобы я мог пустить поиск с этой записи до nil. Т.е как запоминать адресс записи родителя цепочки, так чтобы открывая приложение заново, все сохранялось. Вот так вот... Думаю теперь более понятно, по моему это еще называется хэш-функцией, но могу ошибаться...
Сохранять можно в начале файла - записываем 4 integer - адреса первых записей. При открытии файла читаем их и с ними как-то работаем.

Только зачем так усложнять. Не достаточно будет одной "колонки" ?
Есть уникальный номер записи от 0 до count. Умножаем номер на длину записи - получаем позицию в файле. С этой позиции читаем запись.
По длине файла можно определить количество записей.
alexBlack вне форума Ответить с цитированием
Старый 28.05.2008, 23:53   #6
borzoni
 
Регистрация: 28.05.2008
Сообщений: 3
По умолчанию

тогда как быть если я ввожу студента с 17 кодом вторым?
Ведь 17 позиции еще нет в файле, или с помощью Seek это можно сделать?Сразу прыгнуть на место 17?
Нужен всё таки типизированный файл...
И из типизированного файла как можно считать эти четыре integer?
Я думаю это невозможно, тупо получаеться нужно их хранить в другом месте?
borzoni вне форума Ответить с цитированием
Старый 29.05.2008, 01:37   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от borzoni Посмотреть сообщение
Ведь 17 позиции еще нет в файле, или с помощью Seek это можно сделать?Сразу прыгнуть на место 17?
Да, можно. А вообще, в частности для этих вещей предназначены индексы в БД. Подумайте, может стоит создать ещё один файл с ними.
B_N вне форума Ответить с цитированием
Старый 31.05.2008, 10:51   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

выделить первые четыре записи под пустые записи НАЧАЛО цепочки.

а не проще ли будет загрузить ВЕСЬ файл в отсортированный массив record и искать записи в нем.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разбить строку Ceprey Общие вопросы C/C++ 10 24.12.2009 20:47
Как разбить число по числам? maxim_ov Microsoft Office Excel 3 04.08.2008 16:23
Разбить список на части fotobra Microsoft Office Excel 1 23.02.2008 03:13
как разбить таблицу при копировании StasSv Microsoft Office Excel 3 11.02.2008 10:23
разбить ячейку и ивписать тхт Axe_L Помощь студентам 2 22.10.2007 14:50