Как открыть файл?

Форум пользователей пакета Maple

Модератор: Admin

Lesha
Сообщения: 195
Зарегистрирован: Пт май 02, 2003 9:04 pm

Как открыть файл?

Сообщение Lesha » Сб апр 04, 2009 4:01 am

На диске D лежит текстовый файл 1.txt, в котором записаны две строки: Т1:=[цифры через запятую]: Т2:=[цифры через запятую]: Цифр - гигантское количество. Где-то 30 тысяч.

Пытаюсь открыть файл стандартной командой: fopen( "D:\\1.txt" );
Но выдается ошибка:
Error, (in fopen) fopen uses a 2nd argument, mode (of type symbol), which is missing
Ума не приложу что не так. Вроде всё написал как в мыйпловском примере. Не в курсе ли кто-нибудь как с этим "бороться"? Пишет о каком-то втором аргументе. Тогда как в примере никакого второго аргумента не вижу. Предположил, что перед запуском открытия файла нужно запустить ещё какую-то процедуру. Но, вроде, в хэлпе ничего такого нет. "Чудеса" какие-то прям! И что ему не "нравится"?

Заранее спасибо.

Семен
Сообщения: 73
Зарегистрирован: Пн сен 08, 2008 10:24 am

Сообщение Семен » Сб апр 04, 2009 11:46 am

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

http://www.aladjev-maple-book.narod.ru
http://get.freesoft.ru/?id=62046

Lesha
Сообщения: 195
Зарегистрирован: Пт май 02, 2003 9:04 pm

Сообщение Lesha » Пн апр 06, 2009 3:07 am

"См. в справке команды работы с файлами".

А как эта команда называется?
Просмотрел уже справке по словам file, fopen, read, но без особых результатов.
Впрочем, файл открыть у меня получилось: > fopen("D:\\1.txt", READ);
Но не пойму как теперь из него извлечь строки. Команда T1 (как и T2); ничего не выдает.
Есть ли в мэйпле что-либо для этого готовое, встроенное (у меня - 7-я версия) наподобие команды read, только для чтения не мэйпловских файлов, а, хотя бы, текстовых?
Попробовал использовать команду readline, но она считывает только строки из текстового файла. А у меня в текстовом файле там мэйпловская строка представлена в виде столбца:

T1:=[a1,
a2,
...
...
an]:

(В такой форме было удобно создать файл, преобразовав его из аксиса, а т.к. элементов просто гигантское количество - перевести их в форму строки нецелесообразно)
Попытался найти нужную функцию по выше приводимому учебнику (параграфы 6.3.Базовые средства Maple-языка для обеспечения
доступа к внешним файлам данных TEXT-типа
и 6.3. Базовые средства Maple-языка для обеспечения
доступа к внешним файлам данных TEXT-
). Потыкался с рядом приводящих там функций, например, readstat, wsread, но что-то безуспешно.

Не подскажете какой-то конкретный пример чтения из текстового файла строки (которя представлена в виде столбца)?
Или таких готовых, встроенных в мэйпл функций нет?

aar
Сообщения: 100
Зарегистрирован: Чт авг 10, 2006 11:27 am

Сообщение aar » Пн апр 06, 2009 9:01 am

Должно работать

> read "D:\\1.txt";


Что Maple говорит?

Семен
Сообщения: 73
Зарегистрирован: Пн сен 08, 2008 10:24 am

Сообщение Семен » Пн апр 06, 2009 9:38 am

Коменды read & save служат, гдавным обрвзом, для работы с файлами типов {.m.., .mws, .mw}. Здесь же более уместны команды readline, readbytes и др. Смм в справке, там все прекоасно изложено. А коли в мправе не можете найти, то ничем помочь не могу. Могу лишь подсказать

?readline
?reafbytes
?file

Там найдете массу других полезныъ ссылок.

Lesha
Сообщения: 195
Зарегистрирован: Пт май 02, 2003 9:04 pm

Сообщение Lesha » Ср апр 08, 2009 3:51 am

aar
Должно работать
> read "D:\\1.txt";
Что Maple говорит?

Говорит, что
on line 8193, syntax error, unexpected number:

523.6 ,
^
Error, while reading `D:\1.txt`

Семен
Смотрел я справки.
Readline читает в файле "линии", а мэйпловские строки, записанные в виде столбца не читает, судя по всему.
Reafbytes возвращает размер в байтах, а непосредственную информацию не считывает.
В справке по file ничего по поводу поставленной задачи, похоже, нет.
Судя по тому, что Вы пишите Вы сами не знаете как её решить и не знаете можно ли её решить вообще.

aar
Сообщения: 100
Зарегистрирован: Чт авг 10, 2006 11:27 am

Сообщение aar » Ср апр 08, 2009 9:06 am

Надо смотреть, что записано в строках 8191, 8192 и 8193. Может быть, еще раньше ошибка.
Можно попробовать сократить файл до строки 8192, закрыть список -- ]:, и прочитать read.

CALGARI
Сообщения: 14
Зарегистрирован: Ср ноя 12, 2008 9:06 pm

Сообщение CALGARI » Ср апр 08, 2009 1:34 pm

зачем так голову себе замарачивать?
______________
спортивное питание

Семен
Сообщения: 73
Зарегистрирован: Пн сен 08, 2008 10:24 am

Сообщение Семен » Ср апр 08, 2009 4:29 pm

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

Семен
Сообщения: 73
Зарегистрирован: Пн сен 08, 2008 10:24 am

Сообщение Семен » Пт апр 10, 2009 1:51 pm

Прежде всего, хочу заметить, что по целому ряду параметров доступ к файлам данных в Мапл отличен от принятого в других системах программирования, требуя приличного владения предметом на уровне программирования (см. команды доступа в справке). В случае работы с большими файлами данных целесообразно в ряде случаев оформлять их в виде таблиц/матриц/векторов и сохранять их единым объектом по save в m-формате. В других случаях целесообразно сохранять в виде вектора-строки/столбца, т.к. список имеет ограничения по числу элементов (см. книги Аладьева).

При таком подходе можно впоследствии (по read) считывать такой объект и адресно обращаться к содержащимся в нем данным. При последовательной же организации можно создавать записи файла по writeline, для последующего доступа используя readline. Правда, при больших файлах здесь могут быть проблемы – ограниченная длина строк.

Можно предложить ряд интересных подходов к решению задачи, используя полезные процедуры из б-ки Аладьева. Остановимся на подходе в предположении, что имеем дело с файлами большого размера (допускаемого внешними ЗУ) и у нас нет указанной б-ки. Для этого приведем очень усеченный и упрощенный вариант подпроцедуры из процедуры rdf Аладьева. Такой подход обусловлен тем, что в последней версии б-ки я ее не нашел, а давать исходник большой процедуры из конспекта его мастер-класса считаю некорректным. Раз не включил в официальную версию б-ки, были на то причины.

Моя версия предполагает в качестве файла F текстовый файл любого допустимого размера, в котором данные представлены в виде name:=n1,n2,n3, …, nh. В качестве параметра р используется разделитель данных, например, «,». Процедура возвращает таблицу, чьи входы – номера данных в файле и выходы – соответствующие им данные.

На базе данной процедуры можно строить различные варианты под конкретные условия. Разобравшись в процедуре, это уже не составит особого труда. Нужно лишь продумать алгоритм своей задачи и не ограничиваться чисто справкой – многие задачи требуют владения языком Мапл. Это для тех, кто не хочет использовать пакет лишь на уровне «высоко интеллектуального калькулятора» (со слов проф. Аладьева).

Можно было бы дать исчерпывающее решение предложенной задачи, однако не в моих правилах решать задачи за других – и своих выше крыши. А халява – она и есть халява.

В прикрепленном файле можно найти исходник процедуры с примером ее применения к файлу следующего содержания:

Z:=45,67,34,78,89,45,567,-456,890,12345,890,12,56,67,67,56.46,42/47,0.067,56,67,2009,-7/7,sqrt(2),Pi,4.09

В заключении рекомендую для продвижения в Мапл поработать с книгами и б-кой проф. Аладьева. По себе знаю, что это требует определенных усилий, умений и пр., но труд окупится сторицей. На мой взгляд, более глубоких книг по Мапл у нас я не встречал. На время покидаю сей приятный форум – командировка в ун-т Гейдельберга, а там завершение универа и появление новых интересов.

wispad
Сообщения: 1
Зарегистрирован: Ср апр 22, 2009 3:45 pm

Сообщение wispad » Ср апр 22, 2009 3:48 pm

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