> //счетчик строк
> if ((str = 32) or (str = 13) or (str = 10)) then
> if ((oldstr<>32) and (oldstr<>10) and (oldstr<>13)) then word:= word + 1; //счетчик слов
> end;
> CloseFile(f); //закрываем файл
> end
> else ShowMessage('Ошибка: Файл не найден!'); {если файл не найден, то выводим сообщение об ошибке}
> //Выводим всю полученную информацию о файле
> symbols.Caption:= IntToStr(symbol);
> spaces.Caption:= IntToStr(space);
> lines.Caption:= IntToStr(line);
> words.Caption := IntToStr(word);
>end;
Сначала мы проверяем, существует ли файл, статистику которого будем определять. Если все нормально, то начинаем считывать из этого файла по одному символу и проверять по коду, что это за символ. Если код символа равен 32, то это — пробел, и мы пополняем счетчик пробелов. Если код считанного символа равен 13, то это — символ перевода строки, и мы пополняем счетчик строк. Если считанный символ не является пробелом или символом перевода строки, то это — обычный символ и следует пополнить счетчик символов. Для того чтобы подсчитать количество слов, мы выполняем следующую проверку: если считан пробел или символ перевода строки, то проверяем, является ли предыдущий символ пробелом или символом перевода строки, и если это так, пополняем счетчик слов.
Результат выполнения программы представлен на рис. 3.2.
Рис. 3.2. Программа Статистика в действии
Полный исходный код модуля
Код модуля программы Статистика представлен в листинге 3.1.
Листинг 3.1. Модуль программы Статистика
>unit Unit1;
>interface
>uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
>type TForm1 = class(TForm)
> Label1: TLabel;
> Label2: TLabel;
> Label3: TLabel;
> Label4: TLabel;
> Label5: TLabel;
> words: TLabel;
> symbols: TLabel;
> spaces: TLabel;
> lines: TLabel;
> Button1: TButton;
> Edit1: TEdit;
> Button2: TButton;
> Open1: TOpenDialog;
> procedure Button1Click(Sender: TObject);
> procedure Button2Click(Sender: TObject);
>private
> { Private declarations }
>public
> { Public declarations }
>end;
>var Form1: TForm1;
>implementation
>{$R *.dfm}
>procedure TForm1.ButtonlClick(Sender: TObject); begin
> //начинаем обзор с текущей папки
> Open1.InitialDir:= GetCurrentDir;
> if Open1.Execute // открываем диалоговое окно выбора файла
> then Edit1.Text:= Open1.FileName
> else ShowMessage('Файл не выбран!');
>end;
>procedure TForm1.Button2Click(Sender: TObject);
>var
> f: file of byte; //Переменная для работы с файлом
> str: byte; //Содержит считанный байт
> oldstr, symbol, word, line, space: Integer;
>begin
> symbol:= 0; //обнуляем предыдущие результаты
> word:= 0;
> space:= 0;
> line:= 0;
> if FileExists(Edit1.Text) //проверяем, существует ли файл
> then begin
> AssignFile(f,Edit1.Text) ; //связываем файл с переменной f
> reset(f); //открываем файл на чтение
> while not eof(f) do
> begin //читаем файл до достижения конца файла
> oldstr:= str;
> Read(f, str); //считываем символ в переменную str
> if ((str <> 32) and (str <> 13) and (str <> 10))
> then symbol := symbol + 1; {пополняем количество символов, если он не является переводом строки, кодом новой строки или пробелом}
> //если считан пробел, пополним счетчик пробелов
> if str = 32 then space:= space + 1;
> if str = 13 then line:= line + 1; //счетчик строк
> if ((str = 32) or (str = 13) or (str = 10)) then
> if ((oldstr<>32) and (oldstr<>10) and (oldstr<>13))
> then word: = word + 1; //счетчик слов
> end;
> CloseFile(f); //закрываем файл
> end
> else ShowMessage('Ошибка: Файл не найден !'); {если файл не найден, то выводим сообщение об ошибке}
> symbols.caption:= IntToStr(symbol); //Выводим всю
> spaces.caption:= IntToStr(space); //полученную
> lines.caption:=IntToStr(line); //информацию о файле
> words.caption:= IntToStr(word);
> end;
>end.
⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter 03.