Для реализации выбора файла разместите на форме компонент OpenDialogкатегории Dialogs. Измените значение свойства Name этого компонента наOpen1.
Разместите на форме четыре компонента Label и присвойте их свойству Caption значения Слов, Символов, Пробелов и Строк. Расположите эти метки одну над другой вдоль левого края формы и установите свойства шрифта согласно табл. 3.2.
Таблица 3.2. Свойства шрифта компонентов Label
Свойство |
Значение |
Пояснение |
Font.Name |
Courier New |
Шрифт надписи |
Font.Size |
12 |
Размер шрифта надписи |
Font.Style |
[fsBold] |
Стиль шрифта — полужирный |
Разместите на форме справа от каждого предыдущих четырех меток еще четыре компонента Label и присвойте им имена (свойство Name) words, symbols, spaces и lines. Присвойте значения свойствам этих меток согласно табл. 3.3.
Таблица 3.3. Свойства компонентов words, symbols, spaces и lines
Свойство |
Значение |
Пояснение |
Caption |
0 |
Надпись метки |
Font.Color |
clRed |
Цвет надписи — красный |
Font.Name |
Courier New |
Шрифт надписи |
Font.Size |
12 |
Размер шрифта надписи |
Font.Style |
[fsBold] |
Стиль шрифта — полужирный |
Left |
112 |
Отступ слева |
В правом нижнем углу формы разметим кнопку (компонент Button), по нажатию которой будут выполняться расчёты и выводиться все данные. Свойству Caption этой кнопки присвоим значение Статистика. На этом разработка формы завершена. Полученный результат должен примерно соответствовать рис. 3.1
Рис. 3.1. Форма Статистика
Разработка программного кода
В этой программе следует обработать только два события: нажатие кнопки Обзори нажатие кнопки Статистика. Сначала — о кнопке Обзор:
procedure TForm1.Button1Click(Sender: TObject);
begin
//начинаем обзор с текущей папки
Open1.InitialDir:= GetCurrentDir;
if Open1.Execute then Edit1.Text:= Open1.FileName//открываем диалоговое окно выбора файла
else ShowMessage('Файл не выбран!');
end;
Начинаем обзор с каталога, в котором в данный момент находится программа. Затем следует стандартная проверка: если файл не был выбран, то сообщаем об этом пользователю, иначе отображаем путь к файлу в поле Edit1.
При нажатии кнопки Статистикавыполняется подсчет и отображение данных о выбранном файле:
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;
Сначала мы проверяем, существует ли файл, статистику которого будем определять. Если все нормально, то начинаем считывать из этого файла по одному символу и проверять по коду, что это за символ. Если код символа равен 32, то это — пробел, и мы пополняем счетчик пробелов. Если код считанного символа равен 13, то это — символ перевода строки, и мы пополняем счетчик строк. Если считанный символ не является пробелом или символом перевода строки, то это — обычный символ и следует пополнить счетчик символов. Для того чтобы подсчитать количество слов, мы выполняем следующую проверку: если считан пробел или символ перевода строки, то проверяем, является ли предыдущий символ пробелом или символом перевода строки, и если это так, пополняем счетчик слов.
Читать дальше