Основы программирования

подсчет числа символов и строк в текстовом файле


В качестве содержательного примера использования рассмотренных выше функций файлового ввода приведем программу, которая подсчитывает число символов и строк в текстовом файле. Программа сначала вводит имя файла с клавиатуры. Для этого используется функция scanf ввода по формату из входного потока, для ввода строки применяется формат "%s. Затем файл открывается на чтение как бинарный (это означает, что при чтении не будет происходить никакого преобразования разделителей строк). Используя в цикле функцию чтения fread, мы считываем содержимое файла порциями по 512 байтов, каждый раз увеличивая суммарное число прочитанных символов. После чтения очередной порции сканируется массив прочитанных символов и подсчитывается число символов "\n" продергивания бумаги, которые записаны в концах строк текстовых файлов как в системе Unix, так и в MS DOS или MS Windows. В конце закрывается файл и печатается результат.

// // Файл "wc.cpp" // Подсчет числа символов и строк в текстовом файле // #include <stdio.h> // Описания функций ввода-вывода #include <stdlib.h> // Описание функции exit

int main() { char fileName[256]; // Путь к файлу FILE *f; // Структура, описывающая файл char buff[512]; // Массив для ввода символов size_t num; // Число прочитанных символов int numChars = 0; // Суммарное число символов := 0 int numLines = 0; // Суммарное число строк := 0 int i; // Переменная цикла

printf("Введите имя файла: "); scanf("%s", fileName);

f = fopen(fileName, "rb"); // Открываем файл на чтение if (f == 0) { // При ошибке открытия файла // Напечатать сообщение об ошибке perror("Не могу открыть файл для чтения"); exit(1); // закончить работу программы с кодом 1 // ошибочного завершения }

while ((num = fread(buff, 1, 512, f)) > 0) { // Читаем // блок из 512 символов. num -- число реально // прочитанных символов. Цикл продолжается, пока // num > 0

numChars += num; // Увеличиваем число символов

// Подсчитываем число символов перевода строки for (i = 0; i < num; ++i) { if (buff[i] == '\n') { ++numLines; // Увеличиваем число строк } } }

fclose(f);

// Печатаем результат printf("Число символов в файле = %d\n", numChars); printf("Число строк в файле = %d\n", numLines);

return 0; // Возвращаем код успешного завершения }

Пример выполнения программы: она применяется к собственному тексту, записанному в файле "wc.cpp.

Введите имя файла: wc.cpp Число символов в файле = 1635 Число строк в файле = 50



Содержание раздела