Цвинтарный Иван 362-1 Лабораторная работа 8
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра промышленной электроники (ПрЭ)
ОТЧЁТ
по результатам лабораторной работы №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. Закрепил навыки работы со строками. Научился открывать файлы для записи и чтения, создавать и уничтожать файлы, определять конец файла.