Вопрос № 53334: Привет всем!!!
У меня проблемка я только начинаю в Delphi
Нужно очень быстро написать прогу конвертор данных
Данные в 16 ричном файле каждый байт отвечает за конкретные данные
Формат данных примерно такой
1блок (размер 1байт)...Вопрос № 53345: R1, R2: HRgn;
что за тип переменных?...Вопрос № 53354: Сдраствуйте уважаемые эксперты. У меня есть один вопрос. Я делаю тест. Есть таблица вопросов(База Access)/ Как можно рамдомно выбирать запись без повторений? Заранеее блогодарен....
Вопрос № 53.334
Привет всем!!!
У меня проблемка я только начинаю в Delphi
Нужно очень быстро написать прогу конвертор данных
Данные в 16 ричном файле каждый байт отвечает за конкретные данные
Формат данных примерно такой
1блок (размер 1байт) день
2блок (2байта) кол-во людей 1 отдел
3блок (2байта) кол-во покупок 1 отдел
4блок (2байта) кол-во людей 2 отдел
5блок (2байта) кол-во покупок 2 отдел
Всего 13 отделов
Следующий блок 16 байт бонус
Файл имеет накопительную суточную структуру 69 байт 1 + 52 + 16
Т.е дальше снова день и т.д. на целый месяц
Все это нужно забить в базу … как сделать не подскажете?
Отправлен: 26.08.2006, 13:10
Вопрос задал: Domex (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: sir henry
Здравствуйте, Domex!
Создайте структуру, которая структуре данных за один день. К сожалению, я не совсем понял Ваше описание, поэтому приведу пример по тому, что понял:
Type
OneDay = record
Day: byte;
otdel1: Word;
otdel2: Word;
...
otdel13: Word;
bonus: array[0..15] of byte;
End;
Я не понял, что "за накопительная суточная структура", но если она тоже включается в данные за день, то ее нужно включить в структуру.
Далее, Вы открываете файл, как файловый поток (TFileStream) и с помощью метода Read() в цикле читаете поблочно информацию оттуда с помощью переменной этой структуры и заносите в таблицу базы данных.
Т.е. все довольно просто.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 26.08.2006, 14:05
Вопрос № 53.345
R1, R2: HRgn;
что за тип переменных?
Отправлен: 26.08.2006, 15:24
Вопрос задал: Gwest (статус: 2-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Савенко Вадим Иванович
Здравствуйте, Gwest!
Это дескриптор региона, используется при создании окон непрямоугольной
формы. Регион - это часть окна, воспринимаемая именно как окно.
Ответ отправил: Савенко Вадим Иванович (статус: 9-ый класс)
Ответ отправлен: 26.08.2006, 15:50
Отвечает: Mexes
Здравствуйте, Gwest!
Дескриптор региона. См. мой ответ на вопрос 53189 (http://rusfaq.ru/info/Question/53189) или обзор работы с регионами (http://club.shelek.com/print.php?id=98).
Не знаю, стоит ли объяснять, что такое дескриптор, в общем, идентификатор объекта операционной системы.
Ответ отправил: Mexes (статус: 2-ой класс)
Ответ отправлен: 26.08.2006, 16:24
Вопрос № 53.354
Сдраствуйте уважаемые эксперты. У меня есть один вопрос. Я делаю тест. Есть таблица вопросов(База Access)/ Как можно рамдомно выбирать запись без повторений? Заранеее блогодарен.
Отвечает: Томша Павел
Здравствуйте, Болотов Алексей Борисович!
Делаете базу уже полученных рандомных чисел (если для приложения без перезапуска, то Set of Word, а если с перезапуском, то File) и сравниваете новое рандомное число с уже полученныит ранее(н-р в приложении)
Приложение:
Ответ отправил: Томша Павел (статус: 1-ый класс)
Ответ отправлен: 26.08.2006, 17:52
Отвечает: sir henry
Здравствуйте, Болотов Алексей Борисович!
Заведите в той-же базе таблицу уже сгенерированых номеров вопросов и после рандома, но перед поиском самого вопроса, поискать в этой табличке номер. если номера нет, значит это очередной вопрос теста, заносим номер в табличку и предъявляем вопрос, если есть, то генерируем номер, пока не попадется свободный.
Randomize
{Генерируем номер до тех пор, пока не найдем отсутствующий}
Repeat
Nomer:=Random(Общее_количество_вопросов);
Until not ТаблицаСгенерированыхНомеров.Locate('Номера', Nomer, []);
{Добавляем сгенерированый номер, чтобы потом он опять не генерировался}
ТаблицаСгенерированыхНомеров.AppendRecord(Nomer);
{Фиксируем изменение в таблице}
ТаблицаСгенерированыхНомеров.Post;
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 26.08.2006, 18:21 Оценка за ответ: 5
Отвечает: Morgen_krsk
Здравствуйте, Алексей Борисович!
Зависит от обстоятельств. Если число вибираемых вопросов очень мало, то лучше пользоваться одной из методик предложенных выше. В противном случае, лучше выбрать другой ...
var
Asks : array [0...1000] of Integer;
Ask_Count : Integer;
... // инициализируем массив
Ask_Count := 100;
for i := 0 to Ask_Count-1 do Asks[i] := i;
.. // последовательно выбираем новые элементы
repeat
j := random(Ask_Count);
NextAsk := Asks[j];
for i := j+1 to Ask_Count-1 do Ask[i-1] := Ask[i];
dec(Ask_Count);
until Ask_Count < ...;
Ответ отправил: Morgen_krsk (статус: 2-ой класс)
Ответ отправлен: 27.08.2006, 06:18