Форум программистов, компьютерный форум, киберфорум
Наши страницы
AutoLISP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Prosto Dante
0 / 0 / 1
Регистрация: 01.12.2011
Сообщений: 11
1

Удаление пробелов из введенного текста

07.10.2015, 19:41. Просмотров 868. Ответов 12
Метки нет (Все метки)

Была дана задача выполнить удаление пробелов с введенного текста, помогите плиз кто шарит в автолиспе, расписать эту функцию надо примерно так:

Lisp
1
2
3
4
5
6
7
(defun Del (str1 str2)
  (cond
    ((= str1 " ") str2)
    ((= (substr str1 1 1)
    ((= (strcat str2 (substr str1 1 1)) ( Del ((substr str1 2) str2)))
      (t ( strcat str2 (substr str1 1 1)) ( Del ((substr str1 2) str2)))
      )))))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2015, 19:41
Ответы с готовыми решениями:

Удаление пробелов с введенного текста
Программа удаляет пробелы с введенного текста. Main Proc far push...

Удаление из текста лишних пробелов.
Текст задается с клавиатуры. Текст обязательно должен заканчиваться точкой...

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

Удаление из текста лишних пробелов
Задание: Удалить из текста повторяющиеся знаки пробела и те пробелы, которые...

Считывание текста и удаление в нем пробелов
нужно, чтобы при вводе с клавиатуры текста удалялись пробелы, и на выходе был...

12
Catstail
Модератор
24159 / 12148 / 2178
Регистрация: 12.02.2012
Сообщений: 19,730
08.10.2015, 11:48 2
Мне кажется, должно быть что-то вроде:

Lisp
1
2
3
4
5
(defun Del (str1 str2)
  (cond
    ((= str1 "") str2)
    ((/= (substr str1 1 1) " ") (Del (substr str1 2) (strcat str2 (substr str1 1 1))))
    (t (Del (substr str1 2) str2))))
1
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
08.10.2015, 18:30 3
Цитата Сообщение от Catstail Посмотреть сообщение
Мне кажется, должно быть что-то вроде:
неа )
Lisp
1
2
Команда: (del " 123 " " abc")
" abc123"
0
Catstail
Модератор
24159 / 12148 / 2178
Регистрация: 12.02.2012
Сообщений: 19,730
08.10.2015, 21:16 4
Lambdik, так при запуске надо указывать str2 = ""
0
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
08.10.2015, 21:36 5
Цитата Сообщение от Catstail Посмотреть сообщение
так при запуске надо указывать str2 = ""
Да вроде нет, извините не понял. Вообще зачем две строки, убрать пробелы из одной, потом из второй, сколько бы их там не было. Что-то под вечер туго соображаю.
0
vlisp
500 / 474 / 111
Регистрация: 10.08.2015
Сообщений: 1,661
Завершенные тесты: 1
08.10.2015, 23:51 6
Lisp
1
2
3
4
5
6
7
(defun i-string-removespaces (str)
;;; (i-string-removespaces " baa  baaba ab  ") 
  (if (vl-string-search "  " str)
    (i-string-removespaces (vl-string-subst " " "  " str))
    (vl-string-trim " " str)
  )
)
1
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
09.10.2015, 08:48 7
vlisp Ну не работает же.
0
vlisp
500 / 474 / 111
Регистрация: 10.08.2015
Сообщений: 1,661
Завершенные тесты: 1
09.10.2015, 17:08 8
Цитата Сообщение от Lambdik Посмотреть сообщение
Ну не работает же.
Что именно у вас не работает?
0
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
09.10.2015, 17:22 9
Цитата Сообщение от vlisp Посмотреть сообщение
Что именно у вас не работает?
Это у Вас не работает. Как уберутся пробелы, если их менять subst-ом? Одни пробелы заменяются другими пробелами.

Я тут поразмыслил, и считаю корректным постановку задачи: удалить из строки второй аргумент. Например (del "abc def 123 " " ") => "abcdef123"

Просто объявляется новая пустая строка, и заполняется всем кроме указанного лишнего. Хорошая новость в том, что при этом не нужно мерять длину строки, так как выход за границы даёт "".
1
vlisp
500 / 474 / 111
Регистрация: 10.08.2015
Сообщений: 1,661
Завершенные тесты: 1
09.10.2015, 19:48 10
Цитата Сообщение от Lambdik Посмотреть сообщение
Как уберутся пробелы, если их менять subst-ом? Одни пробелы заменяются другими пробелами.
В автокаде нельзя так просто взять и ввести строку с пробелами, автокад воспринимает ввод только до первого пробела. Даже если вы исхитритесь ввести строку с пробелами, то вряд ли вам нужно будет избавляться от всех пробелов сразу, но если вы совсем уперлись рогом, то можно использовать простую конструкцию типа:
Lisp
1
(vl-list->string (vl-remove 32 (vl-string->list str)))
В результате получится несъедобная каша из символов, которую вы вряд ли переварите.
Функция, которую я выложил имеет практический смысл, она удаляет лишние повторяющиеся пробелы из строки. Это полезно, например, при импорте текстового файла в в автокад.
1
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
09.10.2015, 20:20 11
vlisp Как Вы дерзок.
Цитата Сообщение от vlisp Посмотреть сообщение
В автокаде нельзя так просто взять и ввести строку с пробелами, автокад воспринимает ввод только до первого пробела.
Ввожу строку с пробелами:
Lisp
1
2
3
Команда: (read-line)
1   2 3
"1   2 3 "
Цитата Сообщение от vlisp Посмотреть сообщение
В результате получится несъедобная каша из символов, которую вы вряд ли переварите.
При чём здесь я, это указано в задании.
Цитата Сообщение от vlisp Посмотреть сообщение
Функция, которую я выложил имеет практический смысл, она удаляет лишние повторяющиеся пробелы из строки. Это полезно, например, при импорте текстового файла в в автокад.
Спасибо!
0
vlisp
500 / 474 / 111
Регистрация: 10.08.2015
Сообщений: 1,661
Завершенные тесты: 1
09.10.2015, 21:20 12
Цитата Сообщение от Lambdik Посмотреть сообщение
Команда: (read-line)
Эта функция обычно не применяется при вводе данных из командной строки, так как заметно уступает в гибкости getstring
0
VH
423 / 252 / 22
Регистрация: 23.11.2010
Сообщений: 278
10.10.2015, 08:42 13
(getstring [cr] [prompt])
<Необязательный> аргумент cr (carriage return - VH) если присутствует и не nil, позволяет в ответ на <необязательный> запрос prompt вводить пробелы. Ввод завершается при нахатии клавиши Enter.
Умоляю - внимательно изучайте справочники.
1
10.10.2015, 08:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2015, 08:42

Удаление абзацев от разрыва страницы до разрыва страницы, если кроме пробелов нет текста
Доброго дня... Как реализовать удаление абзацев и разрыва страницы если между...

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно...

Удаление пробелов
Нужна программа , которая удаляет все пробелы в строке! Помогите пожалуйста!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru