<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Толком ниче не понял…видимо утро потому что….но за такого рода мысли в кризис + :))
Видать заняться нечем))) Это ж надо было придумать такую задачу гы))) (+) за то что повеселил! Ну а теперь жду комментария – как такое в голову пришло?
Описание в обработке — это круто …
Еще хочу обработку, чтобы делила «столбиком». С распечаткой.
В теме нужно прямо указать , что количество сиволов в исходной строке
ограничено : не более 9. Существенное упрощение.
При 10 символах в строке алгоритм придется менять.
Возможно , логичней также сделать в исходном слове неразличимость по регистру : ИсходноеСлово = ВРег(ИсходноеСлово).
(2) «Крошка сын к отцу пришел и спросила кроха…» как получить все варианты перестановок слова ШКОЛА. — я же написал в описании.
(3) Спасибо. Маленький каприз — это про описание ))),через полчаса будет Вам такая обработка
(4) Нет при 10 символах (еще не сильно придется менять так как, как раз с таким подходом 10 символов и есть 0,1,2,3,4,5,6,7,8,9.
Вот про это я и писал — своеобразный подход к решению задачи (один из вариантов — если не помнишь математику и формулы, но решить нужно)
ИсходноеСлово = ВРег(ИсходноеСлово) — впринципе согласен , так как Ю и ю для программы это разные символы.
А Вы попробуйте предложить другой вариант задачи (на 8-ке проще сделать)
(5) Это не своеобразный подход , а ограничение , которое обычно явно указывают.
На 8-ке не осилю.
(5)прикольно, позновательно
(6) позволь не согласится с тобой
Своебразный подход — заключается в данном случае в том
порядковый номер символа в строке — приравниваем к цифре
(проверяется уникальность символов в строке,лишние отбрасываются)
(да строка длинной 9 знаков и это будет 987 654 321 (макс число))
Например: слово ДОМ = 123
значит что бы найти все варианты
нужно перебрать с 123 по 321
и проверить чтобы не было задвоение символов (типа ДДО)
т.е. в новом слове должны быть все символы по 1 разу.
123 132 213 231 312 321
(идет прирост 9 81 18 81 9) но закономерность не смог вспомнить или вычислить — может кто знает формулу?
(8) Хорошо. Сформулируем иначе.
При объявленном ограничении возможен такой своеобразный подход.
Любопытно. Итак , ряд чисел , упорядоченных по возрастанию.
Кажде число составлено путем перестановок цифр из множества (0.,9).
Известна ли реккурентня формула для определения каждого члена ряда ?
Предположительный ответ : нет.
+9 Исправление :
Кажде число составлено путем перестановок N неповторяющихся цифр из множества (0.,9).
(10) ну… еще чуть — чуть ))) Давай свой алгоритм.
Этот вариант — решен в ЛОБ. Нужен научный подход
Чего чуть — чуть ?
Позиция моя обозначена сразу : не осилю.
(12) я вот помню учил (я имею ввиду про научный подход)…
а где посмотреть не помню (Яндекс тоже меня не понимает)
Яндекс понимает «форум по математике.»
Сформулируй вопрос и вперед.
Функция СтрПерестановок(Строчка, Префикс=»»)
Рез=»»;
лСтр=Строчка;
Дл=СтрДлина(лСтр);
Если Дл=1 Тогда
Рез = Строчка;
Иначе
Для й=1 по Дл Цикл
Сим=Лев(лСтр,1);
Арг=Сред(лСтр,2);
Рез=Рез+Префикс+СтрПерестановок(Арг,Сим);
лСтр=Арг+Сим;
КонеЦикла;
КонецЕсли;
Возврат Рез;
КонецФункции
Останется поделить полученную строку на кусочки требуемой длины..
(15) пока сыровато….не взлетает
Параметр : Слон , «/»
олос
возврат
/слнлосолонснонл/лосонлнонслснсо/онлнсоснслолслн/нсослнлслон
(0) Так можно и довести до возможности играть с компом в балду или как там эта игра называется (из слова слова составлять)? Доработать алгоритм, прикрутить проверку (можно через и-нет) слово ли это, а не просто набор символов и вперед… Уровни сложности там еще забахать и будет игруха ниче так..
(17) Идея хорошая. Но не нова
игра Балда для 1С 7.7. есть — разработчик spirit@kitcom.ru
но там принцип другой — изначально есть словарь (база данных слов)
Теория вроде здесь есть
http://ru.wikipedia.org/wiki/Перестановка
А вот здесь раздел более глобальный
http://ru.wikipedia.org/wiki/Категория:Комбинаторика
Вот еще про комбинаторику
http://combinatorica.narod.ru/third.html
Посмотрел я на эти значки и подмножества… ужос… это как заново изучать… и даже не помню это «высшая математика» или нет?
Перестановки. Факториал
http://mmmf.math.msu.su/archive/19992000/spivak67/s_comb.html
Что обидно 🙁 никто не ставит задачи именно получить все возможные значения. В теории ставят задачу просто посчитать количество возможных вариантов, а это совсем разные вещи.
1. Так что по-моему решать придется в лоб, прямым пересчётом, например от 1234 до 4321 (для 4х элементов).
2. Можно только попробовать откидывать лишние варианты по контрольной сумме, например 1+2+3+4=10 (в любой их комбинации) Возможно, что такая проверка, да еще при большем количестве элементов наоборот, только затормозит процесс???
3. Но этого еще не достаточно. «Подходящий» вариант надо дополнительно проверять на вхождение в него всех элементов, т.к. могут возникать левые числа 0+6+0+4=10, прокатывающие под контрольную сумму :(((
Т.е. выполнять п.3 для всех чисел исключив п.2.
4. Выгрузив результат в таблицу значений, свернуть её, тем самым избавимся от одинаковых вариантов в случае повторяющихся букв.
Очень медленный вариант решения в лоб. Другого пока не вижу.
Нашел !!!! ВАРИАН скорость супер — совсем другое решение
сейчас вылоду. Неограниченная длина строки. Ура=я умничка
(20) Возможно будет ВСЕ ВАРИАНТЫ
(21) Ну таки опишите алгоритм 🙂
Всё таки интересно.
Во как. Я просил в 3 не перестановки, а именно деление чисел. Как в четвертом классе учат…
Вот я и сделал перестановкой. Завтра выложу — сегодня не успеваю уже.
Затык произошел если больше 6 символов — двоится начали (разбираюсь почему)
Обработка под восьмерку. Используется рекурсия.
Всем спасибо ! Особенно (25)
отличный вариант (обработку не буду выкладывать, т.к кто первый встал того и тапки — poppy (с) )
Вот код кому нужно тот поймет:
АВТОР poppy (с)
роцедура Перестановка(Слово, Префикс, ДлинаСлова)
Если ДлинаСлова = 1 Тогда
Ном = Ном+1;
Сообщить(Строка(Ном) + » » + Префикс+Слово);
Возврат;
КонецЕсли;
Для ии = 1 По ДлинаСлова Цикл
НовоеСлово = Лев(Слово, ии-1) + Сред(Слово, ии+1);
Перестановка(НовоеСлово, Префикс + Сред(Слово, ии, 1), ДлинаСлова-1);
КонецЦикла;
КонецПроцедуры
Процедура Проба()
Исходное=СокрЛП(НачальноеСлово);
ДлинаСлова=СтрДлина(Исходное);
Перестановка(Исходное,»»,ДлинаСлова);
КонецПроцедуры
(15,26)
Функция СтрПерестановок(Строчка,Префикс=»»)
Рез=»»;
лСтр=СокрЛП(Строчка);
Дл=СтрДлина(лСтр);
Если Дл=0 Тогда
Рез = Префикс;
Иначе
Для й=1 по Дл Цикл
Сим=Сред(лСтр,й,1);
Арг=Лев(лСтр,й-1)+Сред(лСтр,й+1);
Рез=Рез+СтрПерестановок(Арг,Префикс+Сим);
КонецЦикла;
КонецЕсли;
Возврат Рез;
КонецФункции
//*******************************************
Процедура Сформировать()
Сообщить(СтрПерестановок(тхт));
КонецПроцедуры
Теперь летает… Переставил слово одно…
Посмотрел — одинаково…
Показать полностью
(28,29) Молодцы !!! Спасибо огромное — думаю и вам приятно было решить эту с виду простую задачку. Есть еще одно оригинальное решение — я в описании сразу написал — знаю 3.
(32) И тебе большое спасибо. Вот бы здорово было сравнить твое решение с (25) они оба на 8 у кого скорость быстрее ?
(0) можно использовать простую формулую комбинаторики, расбить строку на символы и юзать…
а вообще какая применяемость даной обработки?
(34) конечно можно.стоит только попробовать самому.
Применяемость?
-решить задачу для сына
-опробовать свои мозги и возможности
-перебор вариантов (подбор пароля)
задача тривиальная, решается достаточно просто рекурсией,
другой вопрос чтобы сделать алгоритм максимально быстрым.
.
На разминку предлагаю другую подобную задачу.
Есть N предметов.
Необходимо выдать все возможные комбинации расположения этих N предметов по кучкам. 1шт — это тоже кучка. Например, 4 предмета:
возможные варианты расположения по кучкам:
— 4
— 3 1
— 2 1 1
— 1 1 1 1
— 2 2
и т.д.
порядок выдачи разбиения на кучки — непринципиален.
это была одна из первых задач, но которой я обломал зубы, будучи молодым и необразованным… 😉 у меня разбиение все время получалось на N кучек по 1 шт.
(36) ты нас тут основами комбинаторики хочешь достать ?
:))
Да я не хочу достать, я могу достать! 😉
нет, принцип не в этом! принцип в эффективности решения.
(35) еще один пункт применяемости:
— генерация внутренних кодов, состоящих из огранич списка ‘допустимых’ символов.
к примеру, у нас:
во избежание разночтений символов (да-да, ‘ноль’ и O, С и S, H и N такое техзадание )) автогенерация кодов на собств продукцию ограничена 0-1..9,ABCEHKLMPTXYZ.
Этого достаточно, чтобы в пятизначке ХХ.YYY обеспечить макс 529 групп товаров с возможными 12167 эл-в в группе (реально 180 групп до 4 тыс.эл. в нескольких группах)
Спасибо за пример применения.
для своей задачи (39) нашел имхо более разумное решение,
http://www.kb.mista.ru/article.php?id=78
использовал ‘перевод чисел в разные системы исчисления’
схитрил чуток, в Функция Из_10_В_Любую() вынес строку в параметр «012..89ABC..Z»
подсовываю свой набор )
разберите слово ОКОЛОТОК
=))
(42) вопрос к кому ?
В описание у автора написано «(а уникальных 40320 , так Е повторяется два раза — по умолчанию буду считать ее за 1 символ т.е варианты ЕЕ=Е)»
так в этом слове ОКОЛОТОК = ОКЛТК
(43) ОКЛТ ;))
(43) а я вот из описания понял что два подряд за один….
т.е. например слово «око» дает 3 варианта
око
ок
ко
дано — около
около-олоко-окло-олко-олк-окл-лко-кло
Беспонт, если слова с двумя или более повторяющимяся символами сокращает убирая повторения. НЕ ИНТЕРЕСНО…
рассчитать количество возможных вариантов для последовательности символов — возвести длину алфавита в степень равную максимальной разрядости (длине последовательности). Всем измвестный пример — байт состоит из 8 бит, возможных значений два — ноль и единица, максимальная длина последовательности — восемь. Итого количество уникальных комбинаций байта — 2#k8SjZc9Dxk8=256 (255 если считать с ноля), то есть 00000000, 00000001, 00000011, 00000111, … 11111111.
Ваш пример: исходное слово — ОКОЛОТОК, уникальных букв 5 (ОКЛТК), то есть длина алфавита равна пяти. Длина слова равна восьми, итого по формуле получается 5#k8SjZc9Dxk8, то есть 390 625 уникальных слов.
да вот арчибальд подсказывает что уникальных букв в слове ОКОЛОТОК всего четыре ОКЛТ. Значет решение будет 4#k8SjZc9Dxk8 = 65536
А то в первый раз я из (43) неправильно буквы скопипастил 🙂
даже не знал что тут есть раздел «Занимательное программирование для 1С» 8)
(35) тогда пора переходить на что-нибудь более серьезное: нейросети на 1С — как звучит 😉
(51) чего тут только нет — и чем разообразнее тем лучше — у кого то может ТОЛЬКО идея возникнет, а кто то ВООДУШИВИТСЯ ею и сделает что-нибудь НАСТОЯЩЕЕ.
Как говорится лучше — «С миру по нитке и голому рубаха (с)»
чем стоять на месте и
«Переливать из пустого в порожнее (с)«
(0) Вопрос…
А зачем переставлять символы? Тем более, так механически?
Было бы интереснее, если бы задача стояла так — сколько правильных слов русского языка можно составить из перествленных символов?
А так это просто математика…
(52) Открою тебе тайну
человек этим и отличается от животного мира
что ОН задает ВОПРОСЫ и ищет на него ОТВЕТЫ
а самое главное НАХОДИТ.
Наша ЖИЗНЬ в ПОИСКЕ.
не было бы интереснее , поверь
вот тебе загадка про РУССКИЙ язык
«Попробуй придумать слово на русском языке из девяти букв, которое содержит в себе шесть других слов»
(53) А я думал, что он разумом отличается, а не тупой перестановкой буковок…
🙂
(54) Думают — люди умные (с)
(54) на загадку в (53) не ДУМАЛ как ответить ?
(55) Снова началось?
А потом скажешь, что пароль пропал или тебя взломали?
Обрати внимание, (52) был корректен. А вот ответ на него — совсем нет.
Тайны мне открывать не надо. Тем более, такие сокровенные… для тебя.
(57) Неужели так трудно признать ….- я не знаю ответ на твою загадку.
а нужно «изобретать ВЕЛОСИПЕД или как переставить символы»
твой ответ не правильный ❗
правильный ответ:
Слово ПРИДУМАТЬ, которое ты уже прочитал не один раз, содержит в себе слова:
ИДУ, ДУМАТЬ, ДУМА, УМ, МАТЬ и МАТ.
я ответил на (52)
(58) я еще загадку не рассматривал
Интересно, а сколько бы ты решал ее, если бы не знал отвтета?
Придумать самому или найти в инете, а потом с гордым видом рассказывать как ты быстро ее решил — это, конечно, круто 🙂
(58) > я ответил на (52)
Нет, условия были другие: сколько правильных слов русского языка можно составить из перествленных символов?
Где слово МИР, например?
(59) ну ты не нашел же ответа (или я быстрее нашел)
«…там где — ты учился , я преподавал » (с)
для (60)
нет, условия были другие (см.53)
там написано, в условии.
«которое СОДЕРЕЖИТ в себе «
а МИР — это опять из области
«зачем изобретать ВЕЛОСИПЕД или как переставить символы«
(61)
1) Я еще и не искал ответ. И не обязан был, что характерно 🙂
Вот так сразу кинуться
2) Ты ответ знал заранее.
3) > нет, условия были другие (см.53)
Не вяжется с (58) > я ответил на (52)
Прочти все внимательнее с (52) поста.
хотел сначала написать так
не буду, напишу просто
И заканчиваем «нарушать — флудить не по теме» Удачных выходных 😀
(63) мда… Неужели СССР (Странник Сети (Советник Разума)) вернулся?! 🙂
(64) Не выдавай ЖЕЛАЕМОЕ, за ДЕЙСТВИТЕЛЬНОЕ. 😀 😀 😀
Altair777 удачных выходных !
» и не м…..» (с) Tatitutu
и тебе того же…
(61)
Как бы тоже не стоит желаемое, за действительное выдавать, вообще то;-) Ну да ладно, пора по домам, поэтому стоит переключиться и заняться темой этой ветки вплотную на практике:http://infostart.ru/forum/forum1/topic28571/messages/
😉