Пример кода №1
#include <conio.h> // для задержки программы (getch)
#include <Windows.h> // для руссификации программы
//---------------------------------------------------
// посимвольный вывод на экран текстового файла
// pnameFile - имя текстового файла
//---------------------------------------------------
void PrintTextFile(const char pnameFile[])
{
FILE* f; // связь с текстовым файлом
char currentChar; // текущий считанный файловый символ
f = fopen(pnameFile, "r"); // открываем файл в режиме чтения данных
// пока не будут прочитаны все данные текстового файла
while(!feof(f))
{
currentChar = fgetc(f); // читаем очередной символ
// если данный символ является не признаком конца файла, то
if(!feof(f))
printf("%c", currentChar); // выводим текущий символ на экран
}
fclose(f); // разрываем связь с текстовым файлом
}
//---------------------------------------------------
// главная функция программы (точка входа)
//---------------------------------------------------
int main(void)
{
#define SYMBOL_IN_STRING 60 // максимальное количество символов/литер в 1-й строке выходного файла
#define MAX_LEN_STR 100 // предельная длина строковых данных
#define TMP_NAME_FILE "tmp.txt" // имя временного текстового файла
#define POINT '.' // разделитель предложений - точка
#define NEW_STRING '\n' // переход на новую строку
char nameFile[MAX_LEN_STR]; // имя входного текстового файла
char currentChar; // текущий символ, считанный из входного файла
FILE* inFile; // указатель на входной текстовый файл
FILE* outFile; // указатель на временный отформатированный текстовый файл
int countCharInCurrentString; // количество символов в текущей строке
// настройка руссификации в программе
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
// печатаем условие задачи на экран пользователя
printf("Имеется текстовый файл. Составить программу, которая, игнорируя исходное деление файла на строки,\n");
printf("переформатирует его, разбивая на строки так, чтобы каждая строка оканчивалась точкой либо\n");
printf("содержала ровно 60 литер (литера - это буква), если среди них нет точки.\n\n");
// запрашиваем имя входного текстового файла вводом с клавиатуры
printf("Введите имя входного текстового файла: ");
gets(nameFile);
inFile = fopen(nameFile, "r"); // пытаемся открыть входной файл в режиме для чтения данных
// если входной текстовый файл не удалось открыть, то заканчиваем работу программы
if(inFile == NULL)
{
printf("\nВозникла непредвиденная ошибка открытия текстового файла! Программа закрывается!");
getch();
exit(0);
}
fclose(inFile);
// выводим содержимое входного файла на экран
printf("\nСодержимое входного файла \'%s\' имеет вид:\n\n", nameFile);
PrintTextFile(nameFile);
// начинаем переписывать информацию из входного файла во временный файл
inFile = fopen(nameFile, "r"); // повторно открываем входной файл для чтения данных
outFile = fopen(TMP_NAME_FILE, "w"); // создаем временный текстовый результирующий файл
countCharInCurrentString = 0;
// считываем посимвольно все данные из входного файла, пока не достигнем конца файла
while(!feof(inFile))
{
currentChar = fgetc(inFile); // считали из входного текстового файла очередной символ
if(!feof(inFile)) // если был считан не "признак конца файла", то обрабатываем его
{
// если считанный символ - переход на новую строку, то просто пропускаем его
if(currentChar == NEW_STRING)
continue;
countCharInCurrentString++; // учтем считанный символ
fputc(currentChar, outFile); // пишем текущий символ в выходной файл
// если считанный символ - "." или накопилось 60 символов, то переходим на новую строку
if((currentChar == POINT) || (countCharInCurrentString == SYMBOL_IN_STRING))
{
fputc(NEW_STRING, outFile); // переход на новую строку в выходном файле
countCharInCurrentString = 0; // началась новая строка (нет ни одного символа)
}
}
}
// закрываем файловые потоки
fclose(inFile);
fclose(outFile);
remove(nameFile); // удаляем исходный текстовый файл
rename(TMP_NAME_FILE, nameFile); // переименовываем временный файл в исходный
// выводим на экран отформатированный текстовый файл
printf("\n\n\nСодержимое отформатированного входного файла \'%s\' имеет вид:\n\n", nameFile);
PrintTextFile(nameFile);
printf("\nДля завершения работы программы нажмите клавишу ENTER...");
getch(); // задержка программы, чтобы можно было просмотреть результаты
return 0; // завершение программы и передача управления в ОС
}
//---------------------------------------------------
Пример кода №2
#include <Windows.h> // для руссификации программы
//---------------------------------------------------
// посимвольный вывод на экран текстового файла
// pnameFile - имя текстового файла
//-------------------------------