Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Цвинтарный Иван 362-1 Лабораторная работа 8

.docx
Скачиваний:
2
Добавлен:
21.06.2023
Размер:
101.1 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра промышленной электроники (ПрЭ)

ОТЧЁТ

по результатам лабораторной работы №8

по дисциплине «Информатика»

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

Выполнил

Студент гр. 362-1

________ Цвинтарный И.В.

«___» __________

Проверил

Преподаватель

_____________ Савин Д.А.

«___»__________

Томск 2022

Оглавление

Введение 3

1. Ход работы 4

2. Индивидуальное задание 5

3. Программный код – текст программы 5

4. Результаты работы программы 8

Заключение 10

Введение

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

1. Ход работы

1. Написать, отладить и протестировать программу, выполняющую операции с текстовыми файлами в соответствии со своим вариантом. Продемонстрировать использование при этом файловых функций из библиотек «fstream.h» и «stdio.h».

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

3. Результат работы программы выводить на экран и обязательно сохранять в файл результатов.

4. Производимые над строками текстового файла операции оформить в виде подпрограмм. В теле подпрограмм допускается использование функций стандартных библиотек работы со строками «string.h»

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

2. Индивидуальное задание

Вариант индивидуального задания – 23.

Рисунок 2.1 – Формулировка задания

3. Программный код – текст программы

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <fstream>

#include <stdio.h>

using namespace std;

void convert(char* str);

void read(const char* file_in);

void readwrite(const char* file_in, const char* file_out);

int main()

{

setlocale(LC_ALL, "RUS");

readwrite("file_in.txt", "file_out.txt");

}

void read(const char* file_in)

{

FILE* f = fopen(file_in, "rt");

if (f == NULL)

{

cout << "Не удалось открыть файл " << file_in << endl;

return;

}

while (!feof(f))

{

char buff[100];

buff[0] = 0;

fgets(buff, 100, f);

if (strlen(buff) > 0)

{

cout << buff;

}

}

fclose(f);

}

void readwrite(const char* file_in, const char* file_out)

{

FILE* f = fopen(file_in, "rt");

if (f == NULL)

{

cout << "Не удалось открыть файл " << file_in << endl;

return;

}

ofstream fo;

fo.open(file_out);

if (!fo.is_open())

{

cout << "Не удалось открыть файл " << file_out << endl;

fclose(f);

return;

}

while (!feof(f))

{

char buff[100];

buff[0] = 0;

fgets(buff, 100, f);

if (strlen(buff) > 0)

{

convert(buff);

cout << buff;

fo << buff;

}

}

fclose(f);

fo.close();

}

void convert(char* str)

{

// Заменить . на ТЧК

char* pos = str; // указатель на текущую позицию в строке

while ((pos = strchr(pos, '.')) != nullptr) { // поиск первого вхождения символа . в строке, начиная с текущей позиции

*pos++ = 'Т'; // заменить . на Т

if (*pos != '\0') { // если есть еще символы после замененного символа

char* end = pos;

while (*end != '\0') end++; // найти конец строки

for (char* i = end; i > pos; i--) { // сдвинуть оставшуюся часть строки на 1 позицию вправо

*(i + 1) = *i;

}

*(pos + 1) = ' '; // вставить пробел в следующую позицию после замененного символа

}

*pos++ = 'Ч'; // заменить следующий символ на Ч

*pos++ = 'К'; // заменить следующий символ на К

}

// Заменить . на ЗПТ

pos = str;

while ((pos = strchr(pos, ',')) != nullptr) { // поиск первого вхождения символа . в строке, начиная с текущей позиции

*pos++ = 'З'; // заменить . на Т

if (*pos != '\0') { // если есть еще символы после замененного символа

char* end = pos;

while (*end != '\0') end++; // найти конец строки

for (char* i = end; i > pos; i--) { // сдвинуть оставшуюся часть строки на 1 позицию вправо

*(i + 1) = *i;

}

*(pos + 1) = ' '; // вставить пробел в следующую позицию после замененного символа

}

*pos++ = 'П'; // заменить следующий символ на Ч

*pos++ = 'Т'; // заменить следующий символ на К

}

// Заменить ! на ВСК

char* pos = str; // указатель на текущую позицию в строке

while ((pos = strchr(pos, '.')) != nullptr) { // поиск первого вхождения символа . в строке, начиная с текущей позиции

*pos++ = 'В'; // заменить ! на В

if (*pos != '\0') { // если есть еще символы после замененного символа

char* end = pos;

while (*end != '\0') end++; // найти конец строки

for (char* i = end; i > pos; i--) { // сдвинуть оставшуюся часть строки на 1 позицию вправо

*(i + 1) = *i;

}

*(pos + 1) = ' '; // вставить пробел в следующую позицию после замененного символа

}

*pos++ = 'С'; // заменить следующий символ на С

*pos++ = 'К'; // заменить следующий символ на К

}

while (*str)

{

_strupr(str);

str++;

}

}

4. Результаты работы программы

Рисунок 4.1 – Результат работы программы

Рисунок 4.2 – Результат выходного файла

Заключение

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