удалить дубликаты в таблице (язык rexx)

У меня вопрос об удалении дубликатов в таблице (язык rexx). Я использую приложения netphantom, использующие язык rexx.
Мне нужен пример удаления дубликатов в таблице.

У меня есть мысли о том, как это сделать, например, использовать два цикла для этих двух таблиц, A и B, но я не знаком с этим.

Моя ситуация:

rc = PanlistInsertData('A',0,SAMPLE)

ТАБЛИЦА А (эта таблица имеет повторяющиеся данные)

123   
1   
1234   
12   
123   
1234   

Мне нужно отфильтровать эти дубликаты данных в ТАБЛИЦУ B следующим образом:

123   
1234   
1   
12    

person lye yan nian    schedule 20.01.2017    source источник


Ответы (2)


Вы можете использовать lookup stem variables, чтобы проверить, нашли ли вы уже значение. Это должно работать (обратите внимание, что я не проверял, поэтому могут быть синтаксические ошибки)

no=0;
yes=1

lookup. = no   /* initialize the stem to no, not strictly needed */
j=0
do i = 1 to in.0
   v = in.i
   if lookup.v <> yes then do
       j = j + 1
       out.j = v
       lookup.v = yes
   end
end
out.0 = j
person Bruce Martin    schedule 20.01.2017
comment
Это хороший способ использовать идиому Rexx вместо того, чтобы просто писать что-то цикличное, что вы могли бы написать на любом языке. - person Ross Patterson; 21.01.2017
comment
спасибо, Росс, помимо того, что он короче, он должен быть быстрее для большой таблицы (при условии, что поиск по стволу эффективен). Стволовые переменные всегда являются одной из функций Rexx, поэтому их можно использовать. - person Bruce Martin; 22.01.2017

Вы можете удалить дубликаты:

  1. Если первый элемент InStem, переместите элемент в OutStem. В противном случае проверьте все элементы OutStem для текущего элемента InStem.
  2. Если элемент найден, перейдите к следующему элементу InStem. В противном случае добавьте элемент InStem к OutStem.

Фрагмент кода:

/*Input Stem - InStem.
  Output Stem - OutStem.
  Array Counters - I, J, K */

J = 1
DO I = 1 TO InStem.0
   IF I = 1 THEN
      OutStem.I = InStem.I
   ELSE
      DO K = 1 TO J
         IF (InStem.I ?= OutStem.K) & (K = J) THEN
         DO
            J = J + 1
            OutStem.J = InStem.I
         END
         ELSE
         DO
            IF (InStem.I == OutStem.K) THEN
               ITERATE I
         END
      END
END
OutStem.0 = J

Надеюсь это поможет.

person archit    schedule 20.01.2017
comment
Я обновил код. Пожалуйста, проголосуйте, если вы получите ответ. Спасибо - person archit; 20.01.2017