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

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

Выделение цифр из строки.

Ответ
Поиск в этой теме
Непрочитано 08.12.2008, 15:15 #1
Выделение цифр из строки.
Holon
 
CNC
 
Israel
Регистрация: 07.07.2007
Сообщений: 302

Есть задача выделить цифры из строки,
к примеру из строки
"Маленькие раки 10 Х 300 руб. большие раки 10 х 500 руб."
получить "10" "300" "10" "500"
Пытался решить примерно так:
Код:
[Выделить все]
(defun c:te (/ a b d c result)
(setq a "iuyiuy 100X100 jggjgh" b(strlen a) d 1 )
 (while (<= d b)
   (progn
  (if(>(atoi(substr a d 1))0)(progn (setq c(substr a d 1) result (append result(list c)))))
  (setq d (1+ d))
   ))
(print result)
   (princ)
)
но к моему великому сожелению
Код:
и
Код:
возвращает одно и тоже.
Просмотров: 5609
 
Автор темы   Непрочитано 08.12.2008, 15:43
#2
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Продвинулся еще на несколько шагов, осталость только
разделить числа между собой.

Код:
[Выделить все]
(defun c:te (/ a b d c result)
(setq a "iuyiuy 100X100 jggjgh" b(strlen a) d 1 )
 (while (<= d b)
   (progn
  (if
    (or
      (=(ascii (substr a d 1))48)(>(atoi(substr a d 1))0))
    (progn (setq c(substr a d 1) result (append result(list c)))))
  (setq d (1+ d))
   ))
(print result)
   (princ)
)
Holon вне форума  
 
Непрочитано 08.12.2008, 16:09
#3
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Есть такая функция
http://forum.dwg.ru/showpost.php?p=285510&postcount=2
разделяет строку на список текстовых и цифровых составляющих

Если её применить, то прога получится такой:
Код:
[Выделить все]
(defun test (_str / lst)
  (foreach item	(_dwgru-str->list _str)
    (if	(/= (type item) 'STR)
      (setq lst (append lst (list item)))
    )
  )
  lst
)
Проверка:
Цитата:
_$ (test "Маленькие раки 10 Х 300 руб. большие раки 10 х 500 руб.")
(10 300 10 500)
_$
Makswell вне форума  
 
Непрочитано 08.12.2008, 16:54
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


И еще пару вариантов
Как Извлечь из строки числа
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.12.2008, 16:55
#5
Красин


 
Регистрация: 05.09.2008
Сообщений: 24


В автолиспе нет функций для работы с регулярными выражениями, и от этого всё зло. В принципе есть возможность добавить эти функции при помощи Object ARX или .NET, только это никому не надо
Красин вне форума  
 
Непрочитано 08.12.2008, 20:16
#6
Кулик Алексей aka kpblc
Moderator

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


Красин, что значит "нет функций"? Точнее, что ты понимаешь под регулярными выражениями?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.12.2008, 21:33
#7
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Нет- потому что "это никому не надо", чтобы включать в штатный набор. А кому надо - делают, и для этого совсем не надо Object ARX или .NET.
ShaggyDoc вне форума  
 
Непрочитано 10.12.2008, 12:13
#8
Красин


 
Регистрация: 05.09.2008
Сообщений: 24


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Красин, что значит "нет функций"? Точнее, что ты понимаешь под регулярными выражениями?
Вот статья из энциклопедии
Я имел в виду такие, как в Perl. В стандартную библиотеку Python-а они включены, и задача из первого поста решается очень просто:
Код:
[Выделить все]
import re
print re.findall(r'\d+', 'Маленькие раки 10 Х 300 руб. большие раки 10 х 500 руб.')
Красин вне форума  
 
Непрочитано 10.12.2008, 13:48
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Ну и в LISP есть стандартная функция wcmatch c кучей паттернов для поиска, в том числе в разных сочетаниях.

Спору нет, в Perl работа с регулярными выражениями неимоверно мощнее. Так язык на это заточен. А LISP - на списки. Задача-то решаемая в любом случае, и использование прикладным программистом функции (пусть не стандартной) с названием наподобие список_чисел_из_строки не представляет сложности.

Зачем зайцу стоп-сигнал? Только потому, что он у мотоцикла есть?
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выделение цифр из строки.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) Red Nova LISP 5021 вчера 17:50
Извлечение текстовой строки из примитива ShaggyDoc Программирование 6 14.12.2008 17:02
Как Извлечь из строки числа Kostinok Программирование 7 12.08.2008 08:00
Как снять выделение с объекта оап AutoCAD 2 02.07.2008 01:36