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

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

AutoLISP-два столбика и много строк?????

Ответ
Поиск в этой теме
Непрочитано 11.09.2006, 14:08 #1
AutoLISP-два столбика и много строк?????
drafter2006
 
Aus
Регистрация: 11.09.2006
Сообщений: 5

Добрый день!
Я новичок в LISP-e. У меня вот такая задачка:
есть две колонки по 500-600 строк
1)в первой колонке Single Line Texts:
а=134.98
а=344.908
а=3444.918
а=74.928
а=4534.90128
итд
2) во второй колонке Single Line Texts, все нули, т.е.
0.00000
0.00000
0.00000
0.00000
и.т.д
Можно ли как-то автоматизировать процесс перехода только цифровых значений из первой колонки
(т.е. без букв) на место нулей во второй колонке.
Кажздый раз я делаю copy and paste,
что занимает кучу времени.
Заранее благодарю всех.
Просмотров: 2246
 
Непрочитано 11.09.2006, 15:21
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Программу то написанть несложно. Однако всё решается стандартыми средствами. См. команду _find. Там можно выбрать все тексты с "a=" и убрать это самое "a=" путем замены (с пустой строкой 'Replace with').
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 25.09.2006, 08:23
#3
drafter2006


 
Регистрация: 11.09.2006
Aus
Сообщений: 5


Я на примере етой задачки хотел научитса написать что-то подобное, потому что в моем случае немного все обстоит посложнее, можете ли вы мне помочь
drafter2006 вне форума  
 
Непрочитано 25.09.2006, 09:16
#4
VVA

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


Пусть данные колонок записаны в списках col1 и col2, тогда так
Код:
[Выделить все]
;============ Дополнительные ф-ции Begin===================
;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
;;;================================================================================
;;;Ф-ция изменяет i-й(начиная с 0) элемент списка новым значением
;;; indel - индекс элемента
;;;zn - значение
;;; sps - список
(defun subst-i (indel zn sps / buff i e1)
  (setq	i    0
	buff nil
  ) ;_ End of setq
  (foreach e1 sps
    (if	(= i indel)
      (setq buff (append buff (list zn)))
      (setq buff (append buff (list e1)))
    ) ;_ End of if
    (setq i (1+ i))
  ) ;_ End of foreach
  buff
) ;_ End of defun


;============ Дополнительные ф-ции End ===================

(setq col1 '("а=134.98" "а=344.908" "а=3444.918" "а=74.928" "а=4534.90128"))
(setq col2 '("0.000" "0.000" "0.000" "0.000" "0.000") i '-1)
(mapcar '(lambda (x )(setq col2 (subst-i (setq i (1+ i))(cadr(str-str-lst x "=")) col2))) col1)
(princ "\nНовый список col2=")(princ col2)(princ)
VVA вне форума  
 
Непрочитано 25.09.2006, 09:28
#5
Кулик Алексей aka kpblc
Moderator

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


> VVA : может, это будет проще?
Код:
[Выделить все]
(mapcar '(LAMBDA(x) (substr x (+ 2 (VL-STRING-SEARCH "=" x)))) col1)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.09.2006, 09:45
#6
VVA

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


>kpblc Я сделал как просили
Цитата:
процесс перехода только цифровых значений из первой колонки
(т.е. без букв) на место нулей во второй колонке
Хотя я бы не заменял 0 числами в списке col2, а сформировал его заново.
Если буквы всегда "a=", то тогда так проще. Но я бы оставил str-str-lst, вдруг будет "a = 123"
Код:
[Выделить все]
(setq col1 '("а=134.98" "а=344.908" "а=3444.918" "а=74.928" "а=4534.90128")) 
(setq col2 '("0.000" "0.000" "0.000" "0.000" "0.000")) 
(setq col2 (mapcar '(lambda (x )(cadr(str-str-lst x "="))) col1))
(princ "\nНовый список col2=")(princ col2)(princ)
VVA вне форума  
 
Автор темы   Непрочитано 26.09.2006, 06:00
#7
drafter2006


 
Регистрация: 11.09.2006
Aus
Сообщений: 5


Огромное спасибо всем ответившим.
Буду пробовать, посмотрим что получится.
drafter2006 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLISP-два столбика и много строк?????

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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