По работе мне достаточно часто приходится работать с текстовыми файлами, содержащими строки в виде массивов ASCII, где значения отдельных символов разделены точкой с запятой. Что-то типа "118;50;48;49;54;49;50;50;57". Разумеется, хотелось бы увидеть эту информацию в более комфортном для человека виде, как то "v20161229", откорректировать и преобразовать обратно в массив ASCII. Так как с текстом я почти всегда работаю в emacs, то самым логичным решением было бы написать пару функций на emacs lisp. Тем более, что пользоваться какими-то приложениями, таская текст из редактора в буфер, потом в специальный конвертер, потом опять в буфер и, наконец, обратно в редактор, ну вообще не вариант.
Код функций получился вот таким.
Код функций получился вот таким.
(defun pa23-ascii2text (start end)
"Convert ASCII codes to text."
(interactive "r")
(let ((text))
(progn
(setq line (buffer-substring-no-properties start end))
(setq ascii (split-string line ";"))
(mapc
(lambda (code)
(push (string-to-number code) text)
)
ascii )
)
(delete-region start end)
(insert (apply 'string (reverse text)))
)
)
(defun pa23-text2ascii (start end)
"Convert text to ASCII codes."
(interactive "r")
(let ((temp) (ascii))
(progn
(setq temp (string-to-list (buffer-substring-no-properties start end)))
(mapc
(lambda (code)
(setq ascii (concat ascii (number-to-string code) ";"))
)
temp )
)
(delete-region start end)
(insert (substring ascii 0 -1))
)
)
Работа с функциями выглядит следующим образом: выделяем нужный текст, вызываем соответствующую функцию, выделенный текст будет заменен выхлопом функции.
Комментариев нет:
Отправить комментарий