dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Функции работы со строками

DwgRuLispLib: Функции работы со строками

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 06.12.2007, 19:14 #1
DwgRuLispLib: Функции работы со строками
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,542
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™

VVA вне форума Вставить имя

Здесь немного "причесанные" в смысле коментариев и оформления функции, любезно предоставленные Сергеем Зуевым (ShaggyDoc)
Описание функций:

_dwgru-string-align - выравнивает строку string до указанной длины str_len символом sym слева или справа
(_dwgru-string-align "121" 20 "0" T) ;_Результат "00000000000000000121"
(_dwgru-string-align "121" 20 "0" NIL) ;_Результат "12100000000000000000"

dwgru-string-align-to-left - выравнивает строку string до длины str_len символом sym слева
(dwgru-string-align-to-left "123" 10 "0") ;_Результат "0000000123"

dwgru-string-align-to-right - выравнивает строку string до длины str_len символом sym справа
(dwgru-string-align-to-right "123" 10 "0");_Результат "1230000000"

_dwgru-string-some-part - возвращает левую или правуючасть переданной строки с указанным разделителем
(_dwgru-string-some-part " M1:=100" "=" T) ;_Результат " M1:"
(_dwgru-string-some-part " M1:=100" "=" NIL) ;_Результат "100"

dwgru-string-left-part - возврат левой половины строки до разделителя delim_char
(dwgru-string-left-part " M= M1:=100" "=") ;_Результат " М"

dwgru-string-right-part - возврат правой половины строки после разделителя
(dwgru-string-right-part " M= M1:=100" "=") ;_Результат "100"
dwgru-string-replace - Функция замены вхождений подстроки (old_substr) в исходную строку (string) на новые (new_substr).
Регистрозависимо
(dwgru-string-replace "Здесь были ВаВася и ВаВаВаня. Вася" "Ва" "Бу") ;_Результат "Здесь были БуБуся и БуБуБуня. Буся"

dwgru-string-to-list - Возврат списка подстрок строки str с разделителем delimiter
(dwgru-string-to-list "М:1=100" "=") ;_Результат ("М:1" "100")

Версия от 06.12.2007
Версия от 29.05.2012

Вложения
Тип файла: rar DwgRuLispLib-string.rar (5.3 Кб, 197 просмотров)

__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 31.05.2012 в 14:18. Причина: - 3 года в версии
Просмотров: 12112
 
Непрочитано 12.09.2008, 14:45
#2
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,440
Отправить сообщение для Елпанов Евгений с помощью Skype™


еще одна программа, для работы со строками...
Код:
[Выделить все]
 (defun _dwgru-str->list (s)
                 ;|
***************************************************************************************
*
* Программа разделяет строку на список текстовых и цифровых составляющих.
* Запятая между цифрами, зменяется на точечный разделитель дробной части.
* 
**************************************************************************************
*
* Написал Елпанов Евгений       (ElpanovEvgeniy)
*
* дата создания (13/10/2007 a 11:42)
* написано во время конкурса на форуме:
* http://www.cadxp.com/XForum+viewthread-fid-101-tid-16943-page-2.html
***************************************************************************************
* Пример использования и результатов работы:
* (_dwgru-str->list "point.25.4cm.")           => ("point." 25.4 "cm.")
* (_dwgru-str->list "point.25,4cm.")           => ("point." 25.4 "cm.")
* (_dwgru-str->list "point.3/8cm.")            => ("point." 0.375 "cm.")
* (_dwgru-str->list "qvf12qsdf125 5sf 56dfv2") => ("qvf" 12 "qsdf" 125 " " 5 "sf " 56 "dfv" 2)
***************************************************************************************
 |;
 (defun str->list1 (a b f)
  (cond
   ((null b)
    (list (if f
           (cond ((vl-position 46 a) (atof (vl-list->string (reverse a))))
                 ((vl-position 47 a) (distof (vl-list->string (reverse a))))
                 ((vl-position 44 a) (atof (vl-list->string (subst 46 44 (reverse a)))))
                 (t (atoi (vl-list->string (reverse a))))
           ) ;_ cond
           (vl-list->string (reverse a))
          ) ;_ if
    ) ;_ list
   )
   (f
    (if (or (= (car b) 44) (< 45 (car b) 58))
     (str->list1 (cons (car b) a) (cdr b) f)
     (cons (cond ((vl-position 46 a) (atof (vl-list->string (reverse a))))
                 ((vl-position 47 a) (distof (vl-list->string (reverse a))))
                 ((vl-position 44 a) (atof (vl-list->string (subst 46 44 (reverse a)))))
                 (t (atoi (vl-list->string (reverse a))))
           ) ;_ cond
           (str->list1 (list (car b)) (cdr b) nil)
     ) ;_ cons
    ) ;_ if
   )
   (t
    (if (< 47 (car b) 58)
     (cons (vl-list->string (reverse a)) (str->list1 (list (car b)) (cdr b) t))
     (str->list1 (cons (car b) a) (cdr b) nil)
    ) ;_ if
   )
  ) ;_ cond
 ) ;_ defun
 (setq s (vl-string->list s))
 (str->list1 (list (car s))
             (cdr s)
             (if (or (= (car s) 44) (< 45 (car s) 58))
              t
             ) ;_ if
 )
)

Последний раз редактировалось Елпанов Евгений, 03.02.2011 в 15:41.
Елпанов Евгений вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 12.09.2008, 15:55
#3
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 773


Цитата:
Сообщение от VVA Посмотреть сообщение
dwgru-string-replace - Функция замены вхождений подстроки (old_substr) в исходную строку (string) на новые (new_substr).
Регистрозависимо
(dwgru-string-replace "Здесь были ВаВася и ВаВаВаня. Вася" "Ва" "Бу") ;_Результат "Здесь были БуБуся и БуБуБуня. Буся"
Добавлю один неочевидный момент - данная функция сначала проводит замену строк неперекрывющимся способом, т.е. обнаруженная старая строка исключается из дальнейшего поиска, а по достижении конца строки и после обратной сборки изменённой строки цикл поиска запускается вновь. В случае, если замена старой строки на новую может образовать новые вхождения старой строки, замена будет проведена повторно, с неочевидным резульатом.
Пример:
Код:
[Выделить все]
_$ (dwgru-string-replace "Проба ----замены подстроки" "--" "+-")
"Проба +-+-замены подстроки"
_$ (dwgru-string-replace "Проба -----замены подстроки" "--" "+-")
"Проба +-++-замены подстроки"
По логике работы эту функцию можно представить как набор двух функций одна из которых циклично вызывает другую.
Alaspher вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 26.04.2012, 16:52
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,627
Отправить сообщение для Do$ с помощью Skype™


Поделюсь своей библиотечной функцией, она сделана так, что в ней нет того, о чем говорится в #3.
Код:
[Выделить все]
 (defun _dwgru-string-substr-all (new-pat old-pat str / pos rez)
  ;|
(_dwgru-string-substr-all "::" ":" "ghh:rghhyhyh:rgrgthth::rggtht:")
|;
  (setq rez "")
  (while (/= str "")
    (if	(setq pos (vl-string-search old-pat str))
      (progn
	(setq rez (strcat rez (substr str 1 pos) new-pat)
	      str (substr str
			  (+ 1 (strlen old-pat) pos)
		  ) ;_ end of substr
	) ;_ end of setq
      ) ;_ end of progn
      (setq rez	(strcat rez str)
	    str	""
      ) ;_ end of setq
    ) ;_ end of if
  ) ;_ end of while
  rez
) ;_ end of defun
Do$ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 28.05.2012, 11:27
#5
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 569


Не знаю, может я не ту версию скачал?
VVA, скачал из вложений последнюю версию функций. По-моему, в функции _dwgru-string-align ошибка
Код:
[Выделить все]
 
_$ (_dwgru-string-align "1" 2 "0" nil)
"1" ; а должно быть "10"
$ (_dwgru-string-align "123" 4 "0" nil)
"123" ; а должно быть "1230"
В коде, в первой строке вместо знака ">" нужно поставить ">="
Код:
[Выделить все]
; сейчас
  (if (> (setq
           sym_count (- str_len (strlen string))
         ) ;_ end of setq
         1
      ) ;_ end of >
...
; нужно
  (if (>= (setq
           sym_count (- str_len (strlen string))
         ) ;_ end of setq
         1
      ) ;_ end of >=
...
__________________
А Вы пробовали выключить и снова включить
TararykovDG вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 29.05.2012, 11:00
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,542
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


TararykovDG, Спасибо. Перезалил архив
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 31.05.2012, 13:55
#7
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 569


Цитата:
Сообщение от VVA Посмотреть сообщение
Версия от 06.12.2007
Версия от 29.05.2015
VVA, с годом конечно же перебор
__________________
А Вы пробовали выключить и снова включить
TararykovDG вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 31.05.2012, 14:00
#8
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,440
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
VVA, с годом конечно же перебор
На мой взгляд, все нормально.
Следущая версия через три года...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 31.05.2012, 14:19
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,542
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Версия от 29.05.2015
Должно было быть так
Цитата:
Следующая версия будет от 29.05.2015
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Функции работы со строками

Инженерные консультации
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск работы Perezz!! Разное 46 21.03.2008 12:50
функции для работы с ini-файлами ivspec Программирование 4 08.08.2006 11:43
Особенности работы функции TRANS kp+ Программирование 10 31.05.2006 00:55
Моделирование работы свай p_sh Основания и фундаменты 4 08.08.2005 14:41

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


Размещение рекламы