Поиск одинаковых строк
Модераторы: m0p3e, edward_K, Модераторы
Поиск одинаковых строк
Всем Доброго времени суток!!!перейду, непосредственно, к делу: есть код который выгружает данные из экселевского файла в прайс. Всё работает нормально, однако столкнулся с проблемой, что если есть совпадения по загруженным материалам, то неправильно считает конечную цену на товар. Попросили сделать так: после формирования отчета выводить сообщение о повторяющихся элементах. например:"В списке присутствуют Эмаль белая 3 раза, Эмаль зелёная -7 раз". пробовал вывести сообщение после алгоритма расчета и записи, он переберает все пункты. Может кто подскажет как написать функцию такую функцию сравнения или счета? заменять одинаковые не нужно просто посчитать сколько раз встречаются. заранее спасибо
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Re: Поиск одинаковых строк
Мутно описано, но если правильно понял, то необходимо массив строк проверить на дубликаты.
Нагляднее сделать через временную табличку
При обработке строки вызываем процедуру
В конце обработки
Есть более изящные решения, но это универсальное и несложное.
Таблицу не забываем очищать вначале.
Нагляднее сделать через временную табличку
Код: Выделить всё
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
//Тут уже формируем отчет или чего там душе угодно
Таблицу не забываем очищать вначале.
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 //Тут уже формируем отчет или чего там душе угодно
Таблицу не забываем очищать вначале.
Часть кода при вызове проц-ы
Код: Выделить всё
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-продолжить ] :
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Поиск одинаковых строк
Вы задавали вопрос что нужно сделать для переноса из fcom в VIP.обратное тоже справедливо
Re: Поиск одинаковых строк
спасибо прочитано понятоedward_K писал(а):Вы задавали вопрос что нужно сделать для переноса из fcom в VIP.обратное тоже справедливо
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!