Поиск одинаковых строк

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Поиск одинаковых строк

Сообщение Espada »

Всем Доброго времени суток!!!перейду, непосредственно, к делу: есть код который выгружает данные из экселевского файла в прайс. Всё работает нормально, однако столкнулся с проблемой, что если есть совпадения по загруженным материалам, то неправильно считает конечную цену на товар. Попросили сделать так: после формирования отчета выводить сообщение о повторяющихся элементах. например:"В списке присутствуют Эмаль белая 3 раза, Эмаль зелёная -7 раз". пробовал вывести сообщение после алгоритма расчета и записи, он переберает все пункты. Может кто подскажет как написать функцию такую функцию сравнения или счета? заменять одинаковые не нужно просто посчитать сколько раз встречаются. заранее спасибо
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Поиск одинаковых строк

Сообщение m0p3e »

Мутно описано, но если правильно понял, то необходимо массив строк проверить на дубликаты.
Нагляднее сделать через временную табличку

Код: Выделить всё

table struct dubl
(name : string
,kol : Integer
) with index
(dubl0=name,dubl1=kol);
При обработке строки вызываем процедуру

Код: Выделить всё

Procedure PushDubl (n:string);
{
 If GetFirst Dubl Where ((n == name)) <> tsOk
   Insert Dubl set Name:=n,Kol:=1;
  else
   Update Current dubl set kol:=kol+1;
};
В конце обработки

Код: Выделить всё

Delete dubl Where (( 1 << kol));
If RecordsInTable(tnDubl)>0
  //Тут уже формируем отчет или чего там душе угодно
Есть более изящные решения, но это универсальное и несложное.
Таблицу не забываем очищать вначале.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Поиск одинаковых строк

Сообщение Espada »

m0p3e писал(а):Мутно описано, но если правильно понял, то необходимо массив строк проверить на дубликаты.
Нагляднее сделать через временную табличку

Код: Выделить всё

table struct dubl
(name : string
,kol : Integer
) with index
(dubl0=name,dubl1=kol);
При обработке строки вызываем процедуру

Код: Выделить всё

Procedure PushDubl (n:string);
{
 If GetFirst Dubl Where ((n == name)) <> tsOk
   Insert Dubl set Name:=n,Kol:=1;
  else
   Update Current dubl set kol:=kol+1;
};
В конце обработки

Код: Выделить всё

Delete dubl Where (( 1 << kol));
If RecordsInTable(tnDubl)>0
  //Тут уже формируем отчет или чего там душе угодно
Есть более изящные решения, но это универсальное и несложное.
Таблицу не забываем очищать вначале.
Спасибо вроде бы пака всё понятно. Вот только при вызове процедуры ошибка пробовал по разному изменять синтаксис/местоположение, всё равно
Часть кода при вызове проц-ы

Код: Выделить всё

if (priceP_tek = Double(replace(priceP,',','.')) )
{} else if
 (priceP_tek <> Double(replace(priceP,',','.')) )
{
...
  cv_price.update current prices;
};
Procedure PushDubl (n:string);
{
if GetFirst Dubl Where ((n == name)) <> tsOk
   Insert Dubl set Name:=n,Kol:=1;
  else
   Update Current dubl set kol:=kol+1;
};
а вот какую ошибку при компиляции выдаёт

Код: Выделить всё

...\FORMS\11_ПРАЙС_ТОЛЬКО ПРОГНОЗ_ARD_С_ПРОТОКОЛОМ.FRM(129)
 Ошибка: Ожидалась константа, поле, функция, "IF" или "CASE" (стр.129, поз.1 в D
:\GAL810_VIP\FORMS_MAV_2013_01\FORMS\11_ПРАЙС_ТОЛЬКО ПРОГНОЗ_ARD_С_ПРОТОКОЛОМ.FR
M)
Procedure PushDubl (n:string);
^ [ Enter-продолжить ] :
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Поиск одинаковых строк

Сообщение edward_K »

Вы задавали вопрос что нужно сделать для переноса из fcom в VIP.обратное тоже справедливо
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Поиск одинаковых строк

Сообщение Espada »

edward_K писал(а):Вы задавали вопрос что нужно сделать для переноса из fcom в VIP.обратное тоже справедливо
спасибо прочитано понято
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Ответить