Текст в список слов. VLisp.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Текст в список слов. VLisp.

Текст в список слов. VLisp.

Ответ
Поиск в этой теме
Непрочитано 04.04.2013, 09:24 #1
Текст в список слов. VLisp.
Yura Agafonov
 
Инженер.
 
Minsk
Регистрация: 04.05.2012
Сообщений: 95

Имеется текст с четным количеством слов. Из него нужно получить список точечных пар этих слов.
ПРИМЕР:
Дано:
Код:
[Выделить все]
 "слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 "
Результат:
Код:
[Выделить все]
 (list ("слово1" . "слово2") ("слово3" . "слово4") ("слово5" . "слово6") ("слово7" . "слово8"))
Просмотров: 2230
 
Непрочитано 04.04.2013, 09:29
1 | #2
Do$

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


Выглядит, как задание...
Тогда еще надо сроки озвучить
Do$ вне форума  
 
Автор темы   Непрочитано 04.04.2013, 09:37
#3
Yura Agafonov

Инженер.
 
Регистрация: 04.05.2012
Minsk
Сообщений: 95
Отправить сообщение для Yura Agafonov с помощью Skype™


Задание? эээ...
А строки произвольные, то есть число слов любое но всегда четное, слова любые...
Yura Agafonov вне форума  
 
Непрочитано 04.04.2013, 09:44
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,405


Код:
[Выделить все]
 (defun test (/ _kpblc-conv-string-to-list str fun)

  (defun _kpblc-conv-string-to-list (string separator / i)
    (cond
      ((= string "") nil)
      ((vl-string-search separator string)
       ((lambda (/ pos res)
          (while (setq pos (vl-string-search separator string))
            (setq res    (cons (substr string 1 pos) res)
                  string (substr string (+ (strlen separator) 1 pos))
                  ) ;_ end of setq
            ) ;_ end of while
          (reverse (cons string res))
          ) ;_ end of lambda
        )
       )
      ((wcmatch (strcase string) (strcat "*" (strcase separator) "*"))
       ((lambda (/ pos res _str prev)
          (setq pos  1
                prev 1
                _str (substr string pos)
                ) ;_ end of setq
          (while (<= pos (1+ (- (strlen string) (strlen separator))))
            (if (wcmatch (strcase (substr string pos (strlen separator))) (strcase separator))
              (setq res    (cons (substr string 1 (1- pos)) res)
                    string (substr string (+ (strlen separator) pos))
                    pos    0
                    ) ;_ end of setq
              ) ;_ end of if
            (setq pos (1+ pos))
            ) ;_ end of while
          (if (< (strlen string) (strlen separator))
            (setq res (cons string res))
            ) ;_ end of if
          (if (or (not res) (= _str string))
            (setq res (list string))
            (reverse res)
            ) ;_ end of if
          ) ;_ end of lambda
        )
       )
      (t (list string))
      ) ;_ end of cond
    ) ;_ end of defun

  (defun fun (lst)
    (cond
      ((and (listp lst) (= (length lst) 2))
       (list (cons (car lst) (cadr lst)))
       )
      ((and (listp lst) (= (length lst) 1)) (list (car lst)))
      (t
       (append (list (cons (car lst) (cadr lst))) (fun (cddr lst)))
       )
      ) ;_ end of cond
    ) ;_ end of defun
(setq str "слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 ")
  (fun (_kpblc-conv-string-to-list (vl-string-trim " " str) " "))
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.04.2013, 10:02
#5
Yura Agafonov

Инженер.
 
Регистрация: 04.05.2012
Minsk
Сообщений: 95
Отправить сообщение для Yura Agafonov с помощью Skype™


вот спасибо. Кулик как всегда спасает
Yura Agafonov вне форума  
 
Непрочитано 17.09.2013, 17:15
#6
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


И немножко попроще.

Код:
[Выделить все]
 
(defun es_lstsort (lst)
  (if (> (length lst) 1)
    (cons (cons (car lst) (cadr lst)) (es_lstsort (cddr lst)))
  )
)

Код:
[Выделить все]
 
(es_lstsort(mapcar 'vl-symbol-name(read(strcat "("  "слово1 слово2 слово3 слово4 слово5 слово6 слово7 слово8 " ")"))))
Эдуард вне форума  
 
Непрочитано 17.09.2013, 18:40
#7
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Блеск, Эдуард!
Я бы добавил проверку на четность типа
Код:
[Выделить все]
(defun es_lstsort (lst)
  (if (zerop (rem (length lst) 2))
  (if (> (length lst) 1)
    (cons (cons (car lst) (cadr lst)) (es_lstsort (cddr lst)))
  )
    (alert "Добавь / убавь членов...")
)
  )
Олег (jr.) вне форума  
 
Непрочитано 17.09.2013, 21:03
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: Как-то я тему эту пропустил - ибо Алексей здесь явно намудрил.
По примеру Эдуарда (if (> (length lst) 1)...) - это ихмо некошерно - (if (cdr lst)...)
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 17.09.2013 в 21:46.
Дима_ вне форума  
 
Непрочитано 17.09.2013, 21:11
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


покажите мн пример, когда безопасные массивы в автокаде не кратны трем? а то что здесь обсуждается это от верблюда...
gomer вне форума  
 
Непрочитано 17.09.2013, 21:38
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,405


(setq aa(vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) '(1. 2.)))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.09.2013, 23:17
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


kpblc, это в другую сторону верблюда. я говорю об извлечении списка из б/масива, полученного из стандартной лисп-функции, точнее из х-метода или х-свойства
gomer вне форума  
 
Непрочитано 18.09.2013, 00:08
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,405


Нарисуй обычную LWPolyline и дальше:
Код:
[Выделить все]
(setq ent (vlax-ename->vla-object (entlast)))
(vlax-safearray->list (vlax-variant-value (vla-get-coordinate ent 0)))
То?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2013, 21:04
#13
Мансур

Инженер САПР
 
Регистрация: 12.11.2004
Тюмень
Сообщений: 36
<phrase 1=


Для упрощения полагаем, что по краям пробелов нет, а внутри слова разделены четко одинарными пробелами.
Предполагаю, мой вариант один из самых быстрых, еще можно вложенный defun убрать (привет матерым лисперам
Код:
[Выделить все]
 
(defun parsewords (text / len pos pos1 pos2 lst word words)
  (defun word (start end) 
    (substr text (+ 2 start) (if end (- end start 1))) )
  (setq len (strlen text)
    pos -1
    lst pos )
  (while pos
    (if (setq pos1 (vl-string-position 32 text (1+ pos)))
      (setq pos2 (vl-string-position 32 text (1+ pos1))
;        words (cons (cons (substr text (+ 2 pos) (- pos1 pos 1))
;                      (substr text (+ 2 pos1) (if pos2 (- pos2 pos1 1))))
;                    words)
         words (cons (cons (word pos pos1) (word pos1 pos2)) words)
        pos pos2)
    )
  )
  (reverse words)
)

Мансур вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Текст в список слов. VLisp.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выучить английский язык? ФАХВЕРК Разное 225 28.06.2018 20:44
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
Как передать функции (getkword) Список ключевых слов из списка? Kostinok Программирование 31 31.05.2012 13:08
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47