Как записать в текстовый файл результат работы программы

Завершим главу, посвященную интерполяции и регрессии, реализации в Mathcad функции ввода/вывода во внешние файлы, поскольку, как правило, анализ данных чаще всего связан с их импортом из внешних источников (например, результатов эксперимента из текстовых или графических файлов) и экспортом на внешние носители. В большинстве случаев ввод внешних данных в документы Mathcad применяется чаще вывода, поскольку Mathcad имеет гораздо лучшие возможности представления результатов расчетов, чем многие пользовательские программы. Для общения с внешними файлами данных в Mathcad имеет несколько разных способов, причем в новой 12-й версии добавлены новые, намного более удобные опции импорта.

Перечислим встроенные функции для работы с текстовыми файлами, которые имеются в Mathcad 2001-12.

Примечание
В Mathcad 12 имеется дополнительная универсальная встроенная функция READFILE, значительно облегчающая процесс импорта данных.

  • READPRN(«fiie») – чтение данных в матрицу из текстового файла.
  • WRITEPRN(«file») – запись данных в текстовый файл.
  • APPENDPRN («file») – дозапись данных в существующий текстовый файл:
  • file – путь к файлу.

Примечание

LabView. Ввод/вывод в текстовые файлы (Text File I/O)


Можно задавать как полный путь к файлу, например, С:Мои документы, так и относительный, имея в виду, что он будет отсчитываться от папки, в которой находится файл с документом Mathcad. Если вы задаете в качестве аргумента просто имя файла (как в листингах 13.16-13.17), то файл будет записан или прочитан из той папки, в которой находится сам документ Mathcad.

Примеры использования встроенных функций иллюстрируются, листингами 13.16-13.18. Результат действия листингов 13.16 и 13.18 можно понять, просмотрев получающиеся текстовые файлы, например, с помощью Блокнота Windows (рис. 13.20 и 13.21 соответственно).

Листинг 13.16. Запись матрицы в текстовый файл:

Рис. 13.20. Файл, созданный листингом 13.16

Листинг 13.17. Чтение данных из текстового файла в матрицу:

Листинг 13.18. Дозапись вектора k в существующий текстовый файл:

Рис. 13.21. Файл, созданный листингами 13.16 и 13.18

Обратите внимание, что, если вы выводите данные в файл, пользуясь встроенной функцией WRITEPRN, то в любом случае создается новый текстовый файл. Если даже до записи данных файл с таким именем существовал, то его содержимое будет уничтожено, заменившись новыми данными. Если вы хотите сохранить прежнее содержимое текстового файла с данными, пользуйтесь функцией APPENDPRN. Эта встроенная функция может применяться и для создания нового файла. Иными словами, если файла с заданным именем не существовало, то он будет создан и наполнен теми данными, которые вами определены в документе.

Примечание
Создание нового файла путем использования функции APPENDPRN добавлено разработчиками только в версии Mathcad 11. В прежних версиях программы попытка добавить данные к несуществующему файлу при помощи этой функции вызовет сообщение об ошибке.

Работа с файлами в Python. Создание, чтение, запись, удаление. Конструкция WITH-AS | Базовый курс

Источник: samoychiteli.ru

Запись результата вычисления в текстовый файл

Здравствуйте, хотел узнать, как записать результат вычислений в текстовый файл.

Вот мой примитивный калькулятор:

#include #include #include using namespace std; int main() < setlocale(LC_ALL,»RUS»); double a=0,b=0,c=0; char d; printf («Введите выражение»); cin>>a>>d>>b; switch (d) < case ‘+’: c=a+b; cout return 0; >

Подскажите пожалуйста ещё кое что:

  1. как записать переменные и результат вычислений в одномерный массив?
  2. как можно введённое в консоль выражение, например: (54-3*6)/2
Читайте также:
Основные элементы программы access

Как тут распознать символы и определить их автоматически, что бы потом можно было просто вычислить?

Я думал может быть записать введённую строку в массив, а потом вывести с распознанными символами Double и char. Стоит ли записывать знаки в символьный вид, или они в отдельную категорию входят?

Спасибо за внимание.

Будет лучше если вводить будем строку а не по символу.
a) d[1] = c; //example
b) (54 — 3 * 6) / 2, тут надо проверить все if’ом, прочитать целиком строку, и найти доминирующее выражение(В данном случае скобки, а в скобках умножение, затем только деление)
с) Насколько я знаю, строку в массив не запихнуть, строка это string.

#include #include #include #include using namespace std; int main() < setlocale(LC_ALL,»RUS»); double a=0,b=0,c=0; char d; printf («Введите выражение»); cin>>a >>d >>b; switch (d) < case ‘+’: c=a+b; cout return 0; >

  • Кажется не работает. Вставил в новый файл, скомпилировал, запустил, файл с записью не создаётся, создал вручную в той же папке 123.txt, и снова ничего.

b) (54 — 3 * 6) / 2, тут надо проверить все if’ом, прочитать целиком строку, и найти доминирующее выражение(В данном случае скобки, а в скобках умножение, затем только деление)

  • Можно по подробнее, как это прочитать строку. Я помню про Scanf(), но с помощью него можно прочесть только выражения заранее предсказанной длинны и конструкции. Я же хотел бы вне зависимости от количества символов в выражении смочь прочесть её.

с) Насколько я знаю, строку в массив не запихнуть, строка это string.

  • Можно ли тогда разделить строку посимвольно и запихнуть в массив или вектор, если вас не затруднит по подробнее расскажите.
    Извините я ещё зелен в с++, чуток совсем знаю)

поправил, извините за мультипост

Насколько я знаю, строку в массив не запихнуть, строка это string.

Любая строка, на низком уровне языка, есть массив символов. Класс string просто облегчает нам работу со строками. Но не суть.

как можно введённое в консоль выражение, например: (54-3*6)/2

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

Вот пример парсера для систем уравнений, который умеет подобные слагаемые 🙂

Записать что-то в файл можно через Сишную функцию fputs, или через std::fstream .

Скопировал код, при запуске пишет «нет доступа к файлу!» Ни создаёт ни записывает при созданном файле.

Покажите, как вы пишете данные в файл.

#include #include using namespace std; int main() < setlocale(0,»»); char * fileName = «C:\Games\example.txt»; FILE * file = fopen(fileName, «w»); if (file) < char * str = «I Like The Coding!»; bool result = fputs(str, file); if (!result) cout else cout

Просто копирую со страницы с уроком.

Eskel, судя по имени файла, ты сидишь под Виндой, и скорее всего это W7 или W8. От Висты и выше операционки очень ревностно относятся к записи файла «не туда». Особенно это касается диска C. Если у тебя система установлена с настройками по умолчанию, попробуй указать имя файла либо вообще без пути, тогда файл должен быть записан в каталог запуска программы (например в тот, где лежит исполняемый файл), либо указать такой путь для файла, который явно разрешён для твоей учётной записи (например c:users\Documents. ).

Читайте также:
Как в программе видеомонтаж добавить музыку

Ещё пара уточнений по программе.

(1) Вызов fclose(file) лучше перенести в блок if (file) , поскольку если файл не открыт, то и закрывать его не надо. В данном случае это не особо важно, поскольку fclose() не возбуждает исключение, если закрываемый файл не открыт, но лучше писать аккуратно.

char * str = «I Like The Coding!»;

теперь deprecated, т.е. «не рекомендуемый». Что бы компилятор не давал предупреждений надо писать так:

char str1[] = «I Like The Coding!»; // для строк, которые предполагается модифицировать char *c = str1; // работает нормально: символы строки можно читать и записывать // или так: const char *str2 = «I Like The Coding!»; // для константных строк char *c = str2; // компилятор даёт ошибку «неправильное преобразование указателя» // однако явное преобразование типа указателя char *c = (char *)str2; // компилятор пропускает, // но содержимое строки доступно только для чтения // при попытке записи возбуждается исключение

Спасибо за предложенные варианты.
У меня семёрка, попробовал как вы сказали, но всё равно нет доступа к файлу(

Вот как я ввёл первый вариант:

#include #include using namespace std; int main() < setlocale(0,»»); char * fileName = «C:Gamesexample.txt»; FILE * file = fopen(fileName, «w»); if (file) < char str1[] = «I Like The Coding!»; char *c = str1; bool result = fputs(str1, file); if (!result) < cout > else cout
#include #include using namespace std; int main() < setlocale(0,»»); // бэкслэши в данном случае должны быть сдвоенными! // char fileName[] = «C:\Games\example.txt»; char fileName[] = «example.txt»; FILE * file = fopen(fileName, «w»); if (file) < char str1[] = «I Like The Coding!»; bool result = fputs(str1, file); if (!result) < cout fclose(file); > else cout

Благодарю, теперь получается записать, но только если указывать не путь к файлу а только название, то есть:

char fileName[] = «example.txt»;

При указании адреса файла, по прежнему не записывает.

Либо (1) пытаешься записать файл в запрещённое, с точки зрения Винды, место, либо (2) не правильно указываешь путь, например с одиночными бэкслэшами, как в твоём посте от 15.12.13.

Есть вопрос немного не по теме, хочу сделать что то типа калькулятора, с помощью борланд билдера, поставил на форму Edit1, Button1 и Label1. Пишу код в кнопку:

#include #include #pragma hdrstop #include «Unit1.h» //——————————————————— ——————- #pragma package(smart_init) #pragma resource «*.dfm» TForm1 *Form1; //————————————————————————— __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) < >//————————————————————————— void __fastcall TForm1::Button1Click(TObject *Sender) < int x, y; y=Edit1->Text.ToDouble(); x=y; Label1->Caption=x; > //—————————————————————————

Предполагаю, что записанное в Эдит1 выражение, хотя бы 2+2, должно рассчитываться как если бы я вставил туда переменные для уравнения, то есть за место переменных я пытаюсь ввести всё уравнение, но выдаётся ошибка:
«is not a valid floating point value», то есть «не является допустимым значением с плавающей точкой», хотя я по умолчанию забыл все переменные как «double», но выражение с плавающей точкой это же float? Помогите мне доделать программу и пожалуйста разъясните что именно я сделал не так.

Борланд Билдер, в свою очередь, предполагает, что в Эдит1 пользователем введена строка. И он, на самом деле, прав.

Почему ты считаешь, что выражение, введённое в Эдит1 вообще должно как-то интерпретироваться?

Читайте также:
Как изменить картинку в программе paint

Если ты вводишь в поле число (возможно с десятичной точкой), то метод ToDouble() вернёт тебе число с плавающей точкой двойной точности (которое ты присваиваешь переменной целого(!) типа). Кстати, заметь, что этот метод принадлежит свойству Text, что подсказывает, что данные там хранятся в виде строки. Если метод ToDouble() не может обработать строку как число с плавающей точкой, то выдаёт ошибку, которую ты и наблюдаешь. Всё законно.

float — тип числа с плавающей точкой одинарной точности.
double — тип числа с плавающей точкой двойной точности.

Если ты хочешь получать от строки ввода (TEdit) результат вычисления выражения, то надо от TEdit унаследовать новый класс и добавить в него недостающую функциональность. Т.е. в первую очередь парсер арифметических выражений и, видимо, ещё кой-какую обвязку. Но я бы, наверное, сделал это отдельно от TEdit, получая на вход строку из поля ввода и возвращая результат или флаг ошибки.

PS. С Borland C++ Builder очень давно не работал, поэтому в каких-то деталях могу быть неточным.

Запись в текстовый файл.

Из прошых уроков мы научились открывать файл для чтения с помощью процедуры Reset. Однако текстовый файл можно открывать не только для чтения, но и для записи в него информации. Для записи информации в файл используется процедура Rewrite.

Запись в текстовый файл.

Program file6; Uses crt; var fl:text; str:string; begin clrscr; assign (fl, ‘programstext.txt’); rewrite (fl); read (str); write (fl,str); close(fl); end.

В строке №8 записываем процедуру Rewrite. Данная процедура открывает файл, указанный в скобках после слова Rewrite, для записи в него информации. В нашем случае в скобках после слова Rewrite стоит переменная «fl», которая связана с текстовым файлом «text.txt» с помощью процедуры Assign (строка №7). Поэтому этот текстовый файл и будет открыт для записи.

Строка №9. Процедура Read обеспечивает ввод строковой информации (после слова Read в круглых скобках стоит строковая переменная str). Благодаря этой процедуре мы сможем вводить с клавиатуры различные слова. Эти слова будут записаны в строковую переменную «str»

Строка №10. Процедура Write обеспечивает запись информации в текстовый файл. Запись в строке №10 означает, что в текстовый файл («fl») будет записана информация из переменной «str» (т.е. та информация, которую мы введем с клавиатуры).

zapisj v tekstovihyj fayjl

После запуска программы введите какое-нибудь слово (например, «programmirovanie») и нажмите Enter.

zapisj v tekstovihyj fayjl.

Теперь посмотрим наш текстовый файл «text.txt» (C:FPC2.2.2bini386-win32Programs). Если вы помните, то после прошлого урока там были записаны слова «pascal», «admin» и «turbo». Теперь в файле «text.txt» записано слово «programmirovanie»

zapisj v tekstovihyj fayjl..

Это означает, что процедура Rewrite позволяет записывать информация в файл, но при этом удаляет всю старую информацию (Rewrite с англ. «перезаписывать»).

Дополнение к материалу.

Попробуйте удалить файл «text.txt» из директории C:FPC2.2.2bini386-win32Programs. Теперь запустите программу из этого урока. Как видите, программа работает, хотя самого файла не существует. Теперь зайдите в директорию C:FPC2.2.2bini386-win32Programs. Наш файл «text.txt» находится в том месте, откуда мы его удалили.

Дело в том, что если файла не существует, то при использовании процедуры Rewrite он будет создан автоматически (имя файла и его расположение указывается в процедуре Assign).

Источник: mojainformatika.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru