Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизУвеличение размера масива неизвестного типа? Найти похожие ветки
← →
Erik (2003-09-09 14:34) [0]Как это сделать если соблюдается одно условие. Этот масив всегда типа Array of Myrecord; Myrecord - разумеется разный.
Передать можно как Pointer
IncArray(@MyArray);
А как в IncArray его увеличить?
← →
Nikolay M. (2003-09-09 14:35) [1]Через sizeof (Myrecord)?
← →
Skier (2003-09-09 14:36) [2]SetLength(...)
И не парься.
← →
Erik (2003-09-09 15:37) [3]И как мне обявить параметр процедуры?
IncArray(Arr: Pointer)?
И тогда SetLength(Что Arr?!) это небудет работать!
← →
Palladin (2003-09-09 15:39) [4]type
TMyArr=Array of чтото;
procedure IncArray(var Arr:TMyArr);
← →
Erik (2003-09-09 15:46) [5]Блин, а же говорю что тип зарание неизвестен!!!!!!!!!!!!!!!!
Знаю только что это одномерный масив типа record, могу еще длинну передать в IncArray(Arr, SizeOf(MyType));
Есть у кого работающее решение?
← →
Palladin (2003-09-09 16:26) [6]слушай, поизучай-ка основы языка с которым работаешь... Pascal называется и работу с указателями
← →
Erik (2003-09-09 16:58) [7]Palladin
Это ты мне говориш? Ты хоть знаеш сколько я с ним работаю?
Если незнаеш или непонимаеш сути вопроса, то лучше просто промолчать.
← →
Sandman25 (2003-09-09 17:10) [8]Посмотрите DynArraySetLength в System.pas, может вдохновит на что-нибудь.
← →
Sandman25 (2003-09-09 17:10) [9]Даже, наверное, лучше посмотреть _DynArraySetLength
← →
Erik (2003-09-09 17:29) [10]Я и хотел так сделать в начале, но потом подумал может кто уже знает. Лень делать уже известные вещи заного.
← →
Sandman25 (2003-09-09 17:36) [11]Судя по названию процедуры, ее вызов можно заменить на
SetLength(Arr, Length(Arr) + 1) :)
← →
Erik (2003-09-09 17:59) [12]Так приведения типов потребуется, а я его незнаю. Иначе Incompatible types.
Есди бы было так просто я бы неспрашивал.
← →
HolACost! (2003-09-09 19:47) [13]Строй парсер на типа - и передавай строку, отображающую контент записи и запись в виде простого адреса! - и массив делай не от записи, а от Pointer например!
← →
HolACost! (2003-09-09 19:49) [14]Да и кстати - сколькоВЫ с ним работаете?
Вопрос к посту в адрес Palladin`a
← →
Chris (2003-09-09 20:20) [15]SetLength(Arr, High(Arr)+2); инкремент массива
if High(Arr)>-1 then SetLength(Arr,High(Arr)); декремент массива
и никакие привидения (и те и другие) тебе не страшны.
← →
KSergey (2003-09-10 08:36) [16]> Erik
Лучше бы вопрос научился задавать понятно.
Не совсем понятна мне ситуация: увеличение размера массива - самоцель? Или зачем?
Вот почему вопрос.
Хорошо, положим есть некая функция, которая зачем-то увеличивает размер переденного ей массива. Но тп массива - не известен. А что тогда она с ним делает? Читает побайтно?
← →
Erik (2003-09-10 10:26) [17]HolACost
Уже десять лет програмирую или чуток больше, на Delphi меньше. И не один десяток языков знаю.
KSergey
Могу обяснить зачем это надо, есть процедура сканируещая DataSet. Ей передаются DataSet и итератор(адрес процедуры вызываемой на каждую запись). Итератор разумеется разный, в основном заполняет масив с условиями. Масивы тоже разные, чтобы недергать менаджер памяти выделяю память кусками с шагом(по 20 элементов). Моэтому есть стандартная процедура увеличения размера массива. Мне нехочиться делать Copy/Paste, нелюблю такой стиль програмирования. Поэтому и возник вопрос. Но зачам все это описывать, когда вопрос сформулирован продельно ясно в заголовке. Может ты сможеш лучше сформулировать? :)
← →
KSergey (2003-09-10 11:08) [18]делать Copy/Paste, нелюблю
Так это же основной подход! Особенно, если бы еещ платили за кол-во "порожденного" кода ;)
Я тут поразмышлял на тему что же вы не хотите Copy/Past"ить...
- итератор - так он всгда разный (раз разные типы записей в массивах)
- код изменения длины массива? Ну он не получается единым, раз массивы разного типа.
Однако же момент вычисления новой длины - он явно одинаков.
Отсюда предложение6 вынести в отдельную ф-цию не изменение длины, а вычисление нового размера на основе имеющейся.
Тогда вызов
IncArray(@MyArray);
изменится на
SetLength (MyArray, MyCalcNewSize (Length(MyArray))));
Длиннее, конечно, но помятуя о copy/past... ;)
← →
Erik (2003-09-10 13:54) [19]Действительно весьма неплохая конструкция, со стороны всегда лучше видно. А я как всегда модуль к проекту дописываю, подумать времеи нет. :(
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c