![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Помогите ответить на вопрос!
Как передать кол-во элементов массива в процессе работы программы. динамический массив в данном случае, как я считаю, не подойдет, так как массив используется в записи, и считка данных в запись происходит по размеру записи, и если сделать массив динамическим, то размер записи будет не правильным - 4 б Последний раз редактировалось Tonyy, 18.10.2010 в 05:12. |
#2
|
||||
|
||||
![]() А теперь еще раз и подробненько, откуда 4кб взялись, какая запись и т.д. Телепатов нема.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Извини страдалец не кило а просто 4 байта.
ситуация примерно такая: Код:
по идее я объявляю переменную, через 4 байтный формат, затем передаю кол-во элементов 1000, ожидаю что моя переменная будет размером 4000байт (так оно и было бы если бы я описал статичный массив), но она всего 4. какие есть еще способы или хитрости передать кол-во элементов массива в ходе выполнения процедуры? может вместе с установкой кол-ва элементов динамического массива можно как то и объем памяти задавать? Последний раз редактировалось Tonyy, 18.10.2010 в 15:17. |
#4
|
||||
|
||||
![]() Код:
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() в моем случае это не работает. все равно размер записи остается 4 байта.
|
#6
|
||||
|
||||
![]() Код:
Пишу программы за еду. __________________ |
#7
|
|||
|
|||
![]() NumLock я ценю Ваше желание мне помочь. но видимо я плохо объяснил задачу. трудность не в том, что мне нужно вывести число определенного порядка. трудность в том, чтобы передать в массив кол-во элементов, и занять для него реальный размер. что бы массив был бы как динамический, но в то же время статичный. возможно ли такое?
|
#8
|
||||
|
||||
![]() значит продолжаю не понимать, что требуется...
Пишу программы за еду. __________________ |
#9
|
|||
|
|||
![]() я хочу чтобы моя запись была бы размером 4000 байт, чтобы считывать в нее сразу 4000 байт. а когда массив в записи динамический, то размер этой записи 4 байт. хочу узнать как сделать так чтобы запись была 4000 байт. и размер этот мог бы устанавливаться динамически
|
#10
|
||||
|
||||
![]() Несколько раз прочитал вашт посты, но все равно непонятно что вы хотите. Как-то неполучается у вас изложить доступным языком.
Если вы хотите читать писать в файл некие структуры каждая из которых может иметь произвольный размер, то забудьте про типизированный файл. Здесь уже придется читать последовательно. Алгоритм такой: 1. Получить размерность описателя структуры. 2. Считать структуру. 3. Получить размерность данных. 4. Считать блок данных полученной размерности. повторять операцию до нужного результата. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
![]() Уважаемый Страдалец, теперь я не смог понять Вас. виной тому
разный уровень мышления и понимания в программировании. У меня он критически низкий у Вас сравним с Вашим опытом. Для того, что бы сдвинуть дело с мертвой точки, я постараюсь еще раз, на этот раз очень подробно объяснить задачу, которую решаю. на прикрепленном файле изображено схематичное представление структуры файла, с которым должна работать программа. прямоугольниками обозначены т. н. заголовки, в первом самом большом - описываются общие для всего файла параметры. параметры обозначены окружностями разной формы, потому что параметры разного формата - 2 байтные и 4 байтные. вслед за большим заголовком, друг за другом, последовательно следуют "трассы". каждая трасса состоит из своего заголовка, в котором даются параметры описывающие трассу, также разного формата. вслед за заголовком идут значения трассы. кол-во этих значений для всего данного файла - одинаково и оно дается в первом большом заголовке. надеюсь теперь со структурой файла все ясно. суть задачи: необходимо значения всех трасс файла, те что на схеме представлены кружочками после маленьких прямоугольников - умножить на 2. в каком виде это реализовано у меня: я считываю большой заголовок, из которого узнаю: число трасс, число значений, которое у каждой трассы в этом файле ,одинаково. затем включаю цикл равный числу трасс, в теле этого цикла я считываю заголовок, затем включаю второй цикл равный числу значений в трассе, начинаю считывать каждое значение, значение умножаю на 2. подобная реализация очень медленная. потому что значений трассы в одном файле может быть 4000, в другом файле 5000, а количество трасс - 100 000. программа будет работать быстрее, если делать ее только для работы с такими файлами, в которых значения трассы например 4000. тогда использую записи и статичные массивы можно считывать не каждое значение, а сразу всю трассу целиком. вот. теперь у меня вопрос как же все-таки сделать так. чтобы можно было считывать не каждое значение в отдельности, а целиком всю трассу, и чтобы программа могла бы работать при этом с файлами, отличающися друг от друга кол-вом значений трасс. |
#12
|
|||
|
|||
![]() А поиском по форуму пройтись? Недавно был подобный вопрос.
Делается это через нетипизированные файлы, через TFileStream. Для более точного ответа нужно знать точную структуру блоков в файле. Вообще, обычно для работы с такими данными/файлами пишут набор классов, которые собственно и реализуют работу с файлом и хранение данных в момент выполнения программы. Однако, если тебе надо только читать, причем не весь файл, а какие-то определенные части, то действительно, можно сделать специальный читатель, который просто пропустит ненужные данные и считает только то, что нужно. Теперь по существу. 1. Тебе надо сделать структуры для чтения заголовков разных типов. 2. Теперь надо открыть файловый поток и считывать данные. Данный класс сам обеспечит кеширование и др. Кстати, тогда можно все-таки попробовать читать в динамический массив. Код:
|