Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Прочие языки программирования > Прочее...
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.10.2012, 23:51
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию Глюки массивов в Delphi 2009

Всем привет.
Нужно было сравнить два массива, в которых хранятся String значения.
Дык вот.
Создал два динамических массива.
Задал их размеры.
Думаю ну понеслась.
При нахождении одинаковых значений смещаю их в конец используя
алгоритм
Код:
for I := 0 to LenGth(Bufer1) do
    Bufer1[i]:=Bufer1[i+1];
И сразу обрезаю
Код:
 SetLenGth(Bufer1,LenGth(Bufer1)-1);
Но вот беда.
Эта паскуда убирая последнюю ячейку, стирает значение ячейки которая идёт перед ней превращая её из 'Данные' в ' '.

Вывожу данные в листбокс.
Иполучается

Было:
a 0
b 1
c 2
d 3
e 4
f 5

А в итоге

b 0
c 1
d 2
3

Тобишь ячейка 3 осталась, а значение String в ячейке 3 просто потёрлось. И что посоветуете делать ?

Последний раз редактировалось lmikle, 22.10.2012 в 01:28.
Ответить с цитированием
  #2  
Старый 22.10.2012, 01:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Последняя ячейка имеет индекс Length()-1 или High(). Т.е. в твоем коде грубая ошибка - выход за пределы массива.
2. При смешении ты смещаешь все ячейка, что явно не правльно. Тебе надо начинать с той, которую ты нашел.
3. Не совсем понятно, что тебе надо в итоге получить. Впечатление, что ты делаешь что-то не то. Предположим, тебе надо получить список значений в первом массиве (A), которых нет во втором (B). тогда примерно так:
Код:
var
  A, B : Array Of String;
  I, J, K : Integer;
begin
  ... // Здесь заполнение массивов
  For I := High(A) DownTo Low(A) Do
    For J := Low(B) To High(B) Do
      If A[i] = B[J] Then
        Begin
          F := True;
          For K := I To High(A)-1 Do A[K] := A[K+1];
          SetLength(A,Length(A)-1);
          Break;
        End;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter