|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Пока СВ размышляет над исправлением #512 хочу напомнить остальным про мою просьбу написать фильтр подобных позиций.
Допустим имеем такой список. Код:
А. Проверить есть ли в одном из списков запятая. Если есть, то надо удалить все, которые запятой не содержат, если ни один элемент не содержит запятых, то ничего не удаляем. На данном этапе получим Код:
Получим Код:
__________________
Блог |
||||
![]() |
|
||||
CB,
Спасибо. То о чем я говорил исправленно, но заметил, что при испытании не вошли в список следующие выноски ("а1" "-10х100х200") ("а2" "-10х100х300")
__________________
Блог |
||||
![]() |
|
||||
CB, Спасибо. Теперь заработало. Правда я тебя не собираюсь оставлять в покое.
![]() Соеденив твой код с сортирующим кодом от VVA я получил Код:
Теперь очередная просьба: 1. Во первых я кое о чем забыл. В самом начале фильтрации списка нужно удалить первые и последние пробелы элементов подсписка, если таковые есть, на пример ("1 " " -10х100x100"), тут после позиции и до знака – есть такие пробелы. Часто бывает поставишь лишний пробел, а он потом не виден. Не хотелось бы из за этого терять некоторые позиции. Удаление лишних пробелов нам понадобится еще раз, но чуть позже. 2. Следующим шагом я наметил раздел списка на три части. Напомню что вторая строка некоторых позиций содержит запятую. На пример ("7" "-4х50, L=1000") А некоторые позиции запятой не содержат вовсе. Нужно определить содержит ли вторая строка запятую, если да, то надо взять все то что идет после запятой, и записать в новый, третий элемент подсписка. Если вторая строка не содержит запятых, то нужно записать в новый, третий элемент подсписка знак – Пример. Имеем. (("7" "-4х50х1000") ("8" "Уголок 50х5, L=1000")) Получим (("7" "-4х50х1000" "-") ("8" "Уголок 50х5" " L=1000")) 3. К полученному тройному списку опять применяем функцию удаление лишних пробелов.
__________________
Блог |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Выход: 1.Не использовать " (заменить, например, буквами) 2. Вместо " использовать '' (два символа ') По п.1 Этот фрагмент Код:
Код:
По п.2,3 Дополнительны ф-ции Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 04.10.2008 в 19:46. Причина: Изменение аглоритма |
|||
![]() |
|
||||
VVA, Спасибо. Сделал так как ты говоришь.
Код получился такой Код:
1. Третий элемент подсписка создается, но только для тех позиций, которые содержат запятую. Нужно чтобы и для элементов без запятой создавался третий элемент, с минусом в содержании "-". Хотя может и без этого дальше можно обойтись, но лучше чтобы это было реализовано на этом этапе. Добавлено. Знак “-” должен приписываться третьим элементом только для позиций, вторая строка которых начинается на “-” “Лист” “Фл” Для остальных позиций третьим элементом должно приписываться “L=” 2. К сожелению некоторые фильтры перестали работать. Вот например не отфильтровались данные позиции. ("АС" "Двутавр") ("Торец" "фрезеровать") ("1АС" "Швеллер") Добавлено Обнаружил, что указанные в пункте 2 неполадки появились когда я в #525 пытался скрестить код от СВ с кодом сортировки от VVA, опять напортачил ...
__________________
Блог Последний раз редактировалось Red Nova, 04.10.2008 в 19:11. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Red Nova, А что будет, если ни в одной строке не будет запятой? Мне кажется, что минус не нужет. Признаком отсутствия третьего элемента может быть длина списка или nil при попытке вдять третий элемент списка.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
VVA,
Цитата:
Цитата:
__________________
Блог |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Red Nova, Обновил #526 Выделил синим
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
VVA, Обновил #527
Теперь для всех элементов не содержащих информации о длине создается третий элемент “-”. 1. А можно удовлетворить и это требование Цитата:
Цитата:
__________________
Блог |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
По п.1. изменил #526
по п.2 нет времени, еду в командировку.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
VVA,
Спасибо, Приятного времяпровождения All Кто знает как правильно соединить код от CB c #524 и код сортировки списка от VVA c #518? Я в #527 пытался это сделать, чета напортачил, и лисп перестал работать корректно.
__________________
Блог |
||||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
>Red Nova
Окончательная сортировка сделана по тому же алгориту, что и у VVA #518, только по другому реализовано, соответственно остались и те же недостатки... Код:
Последний раз редактировалось CB, 06.10.2008 в 11:21. |
|||
![]() |
|
||||
CB, Как всегда большое спасибо
![]() Почти все работает корректно. 1. Один только баг нашел. Выноски с содержанием типа (“a2” “-10x100x100”) (“a3” “-10x100x200”) не попадают в список. Хотя (“a1” “-10x100x300”) попадает. То есть проблема с выбором позиций, у которых в первой строке после буквы идет цифра отличная от единицы. 2. Еще одна просьба. Я похоже не учел еще один необходимый фильтр. Часто во второй строке позиции после запятой пишут не длину профиля, а его шаг. К примеру (“1” “12 АIII, шаг 200”). Нашими имеющимися фильтрами эта строка может пройти в спецификацию. А она там не нужна. Чтобы это исправить нужен вот какой фильтр. В том месте, когда мы уже отфильтровали все выноски, получили парный список, но еще не удалили подобные позиции нужно вклинить такой алгоритм. Проверяем есть ли во второй строке запятая. Если нет, то ничего не делаем. Если запятая есть, то проверяем что идет после запятой (Пробелы не учитываем). Если после запятой написано (L=…..) или (\\U+03A3L=…..), где \\U+03A3 – это знак сигма, то позицию оставляем в покое, если после запятой идет что-то другое, то удаляем все что идет после запятой вместе с ней же. В (\\U+03A3L=…..) и (L=…..) между буквани добускается ставить пробелы.
__________________
Блог |
||||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
>Red Nova
По первому пункту - совершенно не понятно что у тебя за списки (“a2” “-10x100x100”) (“a3” “-10x100x200”) - чего это у тебя кавычки в разные стороны Проверил нормальный список - все корректно: Код:
|
|||
![]() |
|
||||
На кавычки не обращай внимания, это от шрифта в котором я набирал сообщение. Я то проверял на выносках а не на готовом списке. Вообще что-то странное. На работе все заработало корректно, а дома a2, a3 не вписывались. Ну да ладно. Потом проверю опять. Пока забудем это.
__________________
Блог |
||||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
По п.2.
Цитата:
Код:
Короче, если "камень преткновения" это слово "шаг", все можно было бы сделать гораздо проще: Код:
|
|||
![]() |
|
||||
В принципе так тоже пойдет, если только шаг брать в расчет. Но тогда нужно кроме "шаг" добавить и "ш.".
Моим алгоритмом отфильтровалось бы все лишнее, если кто-то написал бы после запятой любое свое примечание. К примеру ("4" "Швеллер 12, сверху") ("4" "Швеллер 12, шаг 1000")... Цитата:
("2" "Швеллер 12, L=1000") Но ты прав, я описал принцип не очень точно. Нужно проверить есть ли во второй строчке запятые. Если есть, то смотрим что идет за первой запятой, если это не (L=…..) или (\\U+03A3L=…..), то все что идет после первой запятой удаляем вместе с ней. Таким образом если список такой (setq lst '(("2" "Швеллер 12, L=1000, шаг 1000") ("3" "Швеллер 12, L=1000") ("4" "Швеллер 12, шаг 1000") ("5" "Швеллер 12"))) то станет таким (setq lst '(("2" "Швеллер 12, L=1000, шаг 1000") ("3" "Швеллер 12, L=1000") ("4" "Швеллер 12,") ("5" "Швеллер 12"))) А далше уже будут работать ранее написанные фильтры. Если надумаешь написать этот алгоритм, то внедри его пожалйста сразу в основной лисп, а-то я опять перепутаю куда его сувать .
__________________
Блог Последний раз редактировалось Red Nova, 06.10.2008 в 10:40. |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |