Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите функцию [D6, Win2k]


Страницы:   1 2

Андрусь ©   (2002-08-21 12:10:00) 

Привет всем! Такая вот проблемка:работаю с динамическими массивами,объявленными как array of ....Есть ли функция удаления i-го элемента массива(память до этого элемента не трогать,а начиная с данного сдвинуть все элементы на sizeof(type))байт влево.Зараннее всем большое спасибо!


Андрусь   (2002-08-21 12:51:00) [21]

>Alx2 © (21.08.02 12:27)
Вариант красив,но Val © (21.08.02 12:41) - настораживает.Будет ли корректно работать,если элемент - класс.

Задача,в принципе излагалась уже.Но повторюсь:нужна процедура, удаляющая элемент из динамического массива. Словами тип не известен,я хотел сказать,что элементами массива являются в основном определённые мной типы. Т.е. процедуру пишу сейчас,а типы не известны.


Alx2   (2002-08-21 12:48:00) [22]

>может, использовать Variant? неплхо бы знать задачу.

описание array of ... уже подразумевает, что элементы массива будут однотипными (пусть, даже, и variant)


Alx2   (2002-08-21 12:46:00) [23]

>Val © (21.08.02 12:41)
Тогда достаточно научится корректно работать с адресами. А при перемещении символов в строке помнить, что первый элемент имеет индекс 1, и использование просто S вместо S[1] в таких вещах некорректно.


Val   (2002-08-21 12:41:00) [24]

>Alx2 © (21.08.02 12:27)
потеря данных конечно, при переносе. подробнее не скажу, поскольку слышал где-то краем уха, просто увидел ваш пример и вспомнил(по-моему при копировании record, которая содержит элемент типа строка). возможно связано с некоректным определением их длины и получения вместо нее длины указателя? не знаю, просто хотел спросить, может встречались, с какими особенностями move, где надо быть предельно внимательным?
>Андрусь © (21.08.02 12:28)
все типы в общ. случае не известны
может, использовать Variant? неплхо бы знать задачу.


Alx2   (2002-08-21 12:33:00) [25]

>Андрусь © (21.08.02 12:28)
А что в моем варианте не нравится?


Андрусь   (2002-08-21 12:28:00) [26]

Вы хотели сказать:скопировал в новую перем до,после,переприсоил старой и порядок,эт понятно.
Тут немного я не договорил. Мне нужна ф-я для дин.массивов разл.типа(все типы в общ. случае не известны(варианты с перебором мне не нравятся)).


Alx2   (2002-08-21 12:27:00) [27]

>Val © (21.08.02 12:22)
А подробнее? Что за проблему?


Val   (2002-08-21 12:22:00) [28]

>Alx2 © (21.08.02 12:18)
слышал, что используя move можно получить проблему при работе со строками, не просвятите конктретнее?


Alx2   (2002-08-21 12:20:00) [29]

>Alx2 © (21.08.02 12:18)
Так и есть. Осекся малость.
move(a[i+1],a[i],(length(a)-i-1)*sizeof(a[i]));
а потом:
setlength(a,length(a)-1);


Alx2   (2002-08-21 12:18:00) [30]

Но надо проверить - не уверен за количество :)
move(a[i+1],a[i],(length(a)-i)*sizeof(a[i]));


Val   (2002-08-21 12:15:00) [31]

To truncate a dynamic array, pass it to the Copy function and assign the result back to the array variable. For example, if A is a dynamic array, A := Copy(A, 0, 20) truncates all but the first 20 elements of A.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо