![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите функцию [D6, Win2k]
Андрусь © (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.