Форум программистов, компьютерный форум, киберфорум
AutoLISP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/58: Рейтинг темы: голосов - 58, средняя оценка - 4.69
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92

Работа с файлом

08.11.2015, 21:43. Показов 12340. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Необходимо реализовать вывод и ввод в файлы. Программа чертит заданную по условию фигуру и проверяет попадает ли точка в заштрихованную область. Пользователь может выбрать вводить ли ему точку самому (с клавиатуры), либо ввести точку из файла (где я и застряла). Точка введённая пользователем с клавиатуры должна быть записана в файл (тут тоже не лучше). В общем не получается у меня с файлами работать(
Вложения
Тип файла: txt tmp.txt (2.0 Кб, 28 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2015, 21:43
Ответы с готовыми решениями:

COM файл в muLISP'e
Доброго дня, товарищи! Подскажите, если кто знает, КАК построить COM-файл с помощью muLISP'a?? если это, конечно, возможно;)

Запись данных типа record в файл
Помогите записать данные тиипа рекорд в типизированный файл записей В следующий раз потрудись написать название темы без ошибок....

Компиляция в исполняемый файл
Скажите, как с помощью GCL или CMUCL или SBCL скомпилировать исходник в исполняемый файл, и где будет точка входа в программу (как функция...

21
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
08.11.2015, 21:53
В чем проблема-то?
0
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
08.11.2015, 21:58  [ТС]
Не видит файл. (чтение)
0
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
08.11.2015, 22:04
Цитата Сообщение от Virviglaz Посмотреть сообщение
Не видит файл
Так покажи, автокад курсы экстрасенсов не проходил, он работает только в каталогах, описанных в путях поддержки, либо при указании абсолютного пути
0
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
08.11.2015, 22:13  [ТС]
Посмотрите для начала мой код. Вы тоже сейчас занимаетесь экстрасенсорикой. Там два варианта вывода из файла. Я бы хотела получить какою-нибудь помощь или пояснение по данному вопросу.
0
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
08.11.2015, 23:17
я не вижу ничего криминального в увиденном в части чтения из файла, по идее должно работать. Ну разве что можно попробовать такой вариант, что он выдаст:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun FileToList (strfrom / f fk aa a )
  (setq f (findfile strfrom))
  (if (null f)
    (alert "Файл не найден")
    (progn
      (setq fk (open strfrom "r")
            aa (list)
            a  (read-line fk)
      )
      (while a
        (setq aa (append aa (list a)))
        (setq a (read-line fk))
      )
      (close fk)
    )
  )
  aa
)
1
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
09.11.2015, 00:32  [ТС]
ошибка: неверный тип аргумента
0
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
09.11.2015, 01:08
Цитата Сообщение от Virviglaz Посмотреть сообщение
ошибка: неверный тип аргумента
Это не вся строка, сложно было скопировать полностью? Как вызываете функцию FileToList?
0
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
09.11.2015, 01:27  [ТС]
Я вызываю весь написанный мною код с самого начала. Вызов делаю через командную строку AutoCAD.
; ошибка: неверный тип аргумента: numberp: nil
и если вызвать вашу функцию отдельно таким же образом:
; ошибка: слишком мало аргументов
0
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
09.11.2015, 01:56
Цитата Сообщение от Virviglaz Посмотреть сообщение
; ошибка: неверный тип аргумента: numberp: nil
эта ошибка означает что в оператор подставляется неинициализированная переменная

Цитата Сообщение от Virviglaz Посмотреть сообщение
; ошибка: слишком мало аргументов
тут вообще все понятно... забыли подставить один или несколько аргументов... нужно быть внимательнее и пользоваться инструментами форматирования кода
0
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
09.11.2015, 02:14  [ТС]
Цитата Сообщение от vlisp Посмотреть сообщение
эта ошибка означает что в оператор подставляется неинициализированная переменная
осталось только понять в каком именно месте. т.к ваша функция верна. в предыдущих вариантах чтения из файла такой ошибки не наблюдалось.
0
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
09.11.2015, 02:20
Если файл пустой, то функция вернет nil, иначе список строк, который все равно еще нужно преобразовывать в список чисел и уже из него брать число для подстановки... используйте средства отладки vlide для отлова ошибок
0
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
09.11.2015, 02:40  [ТС]
А вот такой вопрос, пожалуй его следовало задать сразу: мне не сильно понятен сам код . Если в первом случае фигурирует полный путь к файлу и его наименование, что является для меня привычным, то здесь я ничего такого не вижу.
0
 Аватар для vlisp
1053 / 974 / 153
Регистрация: 10.08.2015
Сообщений: 5,287
09.11.2015, 08:36
Цитата Сообщение от Virviglaz Посмотреть сообщение
Если в первом случае фигурирует полный путь к файлу и его наименование, что является для меня привычным, то здесь я ничего такого не вижу.
настройка путей поддержки избавляет от необходимости использовать абсолютные пути
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
09.11.2015, 23:11
Virviglaz Ну как, получается? Слишком много букв лишних в этой теме.

Важно понимать, что для записи в файл используется два разных механизма, не зависящих друг от друга.
Один механизм, это работа с файлом. А второй, работа с потоком данных.
Ведь можно открыть файл и тут же закрыть его, ничего с ним не делая, не так ли?

Запись в файл сделаем пошагово.
Lisp
1
2
3
4
5
;;; Для начала немного прелюдии.
;; узнать местонахождения файла открытого рисунка
(setq address (getvar "dwgprefix"))
;; создать путь к целевому файлу
(setq file-path (getfiled "Выбрать/Создать файл для записи" address "txt" 1))
Lisp
1
2
3
4
5
6
7
;;; А теперь работаем с файлом.
;; открыть файл на дозапись
(setq descriptor (open file-path "a"))
;; записать координату [используем поток данных]
(prin1 '(5.2 8.1 0.0) descriptor)
;; закрыть файл
(close descriptor)
Lisp
1
2
3
4
5
6
;; можем повторить, только теперь учтём перенос строки
(setq descriptor (open file-path "a"))
;; следующая координата
(print '(4.6 2.9 0.0) descriptor)
;; закрыли
(close descriptor)
Считывание из файла.
Lisp
1
2
3
4
5
6
7
8
;; открыть файл на чтение
(setq descriptor (open file-path "r"))
;; считать строку
(read-line descriptor)
;; считать следующую строку, если её там нет - вернёт nil
(read-line descriptor)
;; закрыть файл
(close descriptor)
Здесь полезная информация.
2
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
10.11.2015, 04:13  [ТС]
Цитата Сообщение от Lambdik Посмотреть сообщение
Ну как, получается?
Пока нет. Большое спасибо за ссылку. Итак,из файла мы считываем строку, которая содержит координаты точки. В дальнейшем, чтобы их использовать мы должны как-то преобразовать строку в список. Из идей только эта: разбить саму строку на подстроки, которые и объединить в список. (Надо/не надо; Верно/ не верно???)
P.S. Ранее хотелось сделать так, чтобы считывалось по одной точке из файла за каждый вызов функции. Ну а то что программа вообще увидела файл будем считать успехом.
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
10.11.2015, 10:34
Цитата Сообщение от Virviglaz Посмотреть сообщение
мы должны как-то преобразовать строку в список. Из идей только эта: разбить саму строку на подстроки, которые и объединить в список.
Функция read читает из строки до первого пробела.
Lisp
1
2
3
(setq coordinate "(5.2 8.1 0.0)")
;; скобки там уже есть, потому просто читаем
(read coordinate)
Функции для работы со строками.
2
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
16.11.2015, 06:00  [ТС]
Lambdik, вы не совсем поняли мой последний вопрос, но для начала я покажу что у меня вообще получилось
Lisp
1
2
3
4
5
6
7
8
(setq p1 (getpoint "Введите координaты любой точки через запятую:"))
    )
;;запись в файл координат, введённых пользователем с клавиатуры
 (progn
(setq FILE (open "d:\\user.txt" "a"))
(prin1 p1   FILE)
(close FILE)
 )
Если с записью всё хорошо, то с выводом будет хуже:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(setq answer (getstring "\n Ввести точку вручную или из файла? <В/Ф>"));ветвление на различные способы ввода
  (if (or (= answer "Ф")(= answer "ф"))
   (progn 
(setq FILE (open "d:\\points.txt"  "r"))
(setq p2 (read-line FILE))
(setq p1 (list))
 
(while (/= p2 nil)
(setq p1 (append p1 (list p2))) ;;попытка что-то сделать с полученной строкой
(setq p2 (read-line FILE))
  )
(close FILE)
Программа видит и читает файл. Загвоздка в условии. Это задача на определение вхождения точки в заштрихованную область. В моём случае областью является круг с центром в начале координат (радиус = 2). В круге есть вертикально расположенный прямоугольник (высота = 2, ширина = 1). Я писала проверку для точки введённой с клавиатуры. Выглядит она так:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(setq x (car p1)) ;; разбиваем нашу точку на отдельные координаты, чтобы подставить в уравнение
  (setq y (cadr p1))
  (setq Rad 4)
  (setq r (+ (expt x 2) (expt y 2)))
    (
     if (and (<= r  Rad) (or (<= x 0) (>= x 1))) ;;уравнение окружности с центром в нач. коорд. + учёт прямоугольн.
      (progn
    (command "_.Color" "61")
    
      (SetVar "PDMODE" 34)
      (SetVar "PDSIZE" 0)
      (command "_.Point" p1 )
    
      (command "_.Text" p1  "0.1" "0" "Попал")
      )
      (progn
       (command "_.Color" "61");; всякая красота для оповещения пользователя
       (SetVar "PDMODE" 34)
       (SetVar "PDSIZE" 0)
      (command "_.Point" p1 )
       (command "_.Text" p1  "0.1" "0" "Не попал")))
Для точки введённой с клавиатуры проверка работает. Как быть с точкой которую мы считали (строку по сути дела)? Ведь для проверки необходимо как-то преобразовать строку в список. Вот на этом я и застряла. Может надо в принципе переписать как-то код?
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
16.11.2015, 22:50
Virviglaz Очень рад что стараетесь учить, это я одобряю. Могу помочь с типами данных.
Преобразуем строку в список:
Lisp
1
2
3
4
(setq string "123.0 45.0 0.0")
(read (strcat "(" string ")"))
 
=> (123.0 45.0 0.0)
То есть если в файле записаны координаты без скобок, а просто числа. То считываем из файла, сцепляем со скобками и применяем read. Всё просто.
А на счёт попадания в область, так это уже геометрия.

Добавлено через 8 часов 36 минут
И ещё, функция command принимает аргументы как списочного, так и строкового типа. Чтобы не делать лишних преобразований.
Lisp
1
2
3
(command "_.line" "0,0,0" "5,7,0" "")
 
(command "_.line" '(0.0 0.0 0.0) '(5.0 -7.0 0.0) "")
1
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
18.11.2015, 00:52  [ТС]
Я сдаюсь
Lisp
1
2
3
(setq FILE (open "d:\\points.txt"  "r"))
(setq p2 (read-line FILE))
(setq p1(read(strcat "(" p2 ")")))
; ошибка: неверный тип аргумента: numberp: nil
и ещё много много много разных вариантов и команд.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2015, 00:52
Помогаю со студенческими работами здесь

Не могу открыть файл в mulisp
захожу в mulisp.com пишу rds 'c:rc мне в ответ - NIL файл rc.lsp создал, кинул в корневую папку С , но не открывается. Что...

Запись в файл строк из координат точек
В файле &quot;points.lsp&quot; записаны построчно 8 чисел. В переменную x считывается первая строка, это координата x, аналогично в переменную y, это...

Средствами текстовых редакторов создать файл данных
Средствами текстовых редакторов создать файл данных, содержащий несколько строк, в каждой из которых по пять произвольных чисел, и написать...

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

Ввод с консоли и запись в файл
Здрасте! Помогите пожалуйста доделать задачку(Функция проверяет, являются ли элементы списка seq натуральными числами. Если элемент...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru