- Информация раздела AutoLISP. Рекомендуем [Компьютер | Рефераты]


Союз образовательных сайтов

AutoCAD

Проектирование
AutoLISP и VisualLISP
VBA
Delphi

Autodesk Inventor

Проектирование
Программирование

Разное

Программирование в Delphi
Статьи

Студенту

Лекции
Лабораторные работы

Скачать

Документация
Программы
Разное

Контакты

Rambler's Top100  

 

<< Назад

Работа файлами подробностях


Чтение из файла

Для осуществления чтения из файла, необходимо, чтобы файл-источник информации находился в текущем каталоге. Текущий каталог - это каталог, в котором сохранен файл чертежа, с которым Вы работаете. Это означает, что перед запуском своей программы необходимо удостовериться, сохранен ли файл чертежа.

Для открытия файла необходимо его найти. Этим занимается функция (Findfile "filename"). Она возвращает путь в к файлу, который уже можно использовать в программе для открытия файла.
;строка для открытия существующего файла

(setq f (open (findfile "filename") "r"))

Или nil - свидетельствует об отсутствии упомянутого файла. Поэтому перед открытием файла для чтения необходимо проверять его наличие.

(if (/= (findfile "filename") nil)
(progn
(setq f (open (findfile "filename") "r"))
...
...
(close f)
)
;(вывод надписи, что нет такого файла)
)

Для того, чтобы осуществить чтение из файла, необходимо знать его структуру.
Если данные в файле расположены столбиком (по одному в строке), то можно обойтись простым оператором read-line. С выполнением каждого оператора read-line, производится переход на следующую строку в файле.

; чтение одной строки из файла, открытого по дескриптору файла f.
(read-line f)

В результате мы получим некое строковое выражение. Его можно обработать с помощью операторов atoi или atof для получения целого или вещественного значений соответственно.

; извлекаем вещественное значение
(setq a (atof(read-line f)))

Если строка сложная - то сначала придется разделить ее на составляющие части. Разделить строку на подстроки можно с помощью оператора substr:

(setq a(read-line f))
; выделение первых семи позиций строки
(setq b(substr a 1 7))

После отделения необходимой части строки, можно ее обработать с помощью тех-же операторов-обработчиков для получения целых или вещественных значений.

В таблице представлена обработка строк файла - получение целого, вещественного, строкового значений, выделение подстроки и ее обработка. Слева вы видите пример файла с некоторой информацией, а справа - четыре варианта обработки строк файла и результаты обработки*.


* Для наглядности представления, знак пробела в подстроках помечен как "_".

Запись в файл

Для создания файла необходимо воспользоваться оператором (open "filename" "w"). Если filename - просто имя файла с расширением, то файл создастся в текущем каталоге. Если это путь вида:

Диск:\\каталог\\каталог\\имя.файла

то файл создастся в указанном каталоге.

Для записи в текстовый файл наиболее удобно использовать оператор write-line. Он позволяет записывать информацию в файл построчно.

(write-line "Test" f)

Для вывода в файл все данные должны быть преобразованы в строки. Целые - itoa, вещественные - rtos, объединение строк - strcat. В приведенном ниже примере производится формирование строки для вывода информации о точке.

;; функция для преобразование точки в строку
;; (использованы координаты Х и У)
(defun pt_to_str(pt)
(strcat "(" (rtos (nth 0 pt)) "," (rtos (nth 0 pt)) ")" )
)

Таким образом, в результате этого кода вы получите описание координат точки в виде "(x,y)".

При запуске: (pt_to_str (list 3.45 80))
Получим: "(3.45,80)"

Преобразуя и соединяя необходимые строки, можно организовать вывод информации в файл.

Работа с файлом, количество строк которого неизвестно

Чтение строк файла можно производить в цикле. Наиболее подходит для этого цикл while.

(while (условие)
(setq a (read-line f))
...
; обработка данных
...
)

Условием цикла необходимо задать (/= a nil) - неравенство прочитанной строки концу файла.
Кроме того, для проверки и первой строки, необходимо произвести чтение первой строки до проверки, а внутри цикла чтение сделать последней операцией:

(setq a (read-line f))
; цикл с проверкой конца файла
(while (/=a nil)
...
; обработка данных
...
(setq a (read-line f))
)

Тогда такая конструкция будет стабильно работать при неизвестном количестве строк в обрабатываемом файле.


Чтобы быть в курсе всех событий, получения необходимой и интересной информации, подпишись на рассылку "Создание САПР на базе продуктов Autodesk"

 

 
BESTHOSTING - хостинг от 6 уе за 1000 Мб места на диске, домен - бесплатно!
Домой | AutoCAD | Autodesk Inventor | Разное | Студенту | Скачать | Контакты |                                              Каталог

(с) 2004 Калугин Сергей Сергеевич
Сайт управляется системой uCoz