Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
современный фортран , Бортеньев.pdf
Скачиваний:
242
Добавлен:
26.03.2015
Размер:
2.34 Mб
Скачать

О. В. Бартеньев. Современный ФОРТРАН

3.8.9. Выделение слов из строки текста

Рассмотрим часто решаемую при работе со строками задачу: выделение слов из заданной строки. Задачу рассмотрим в следующей формулировке: вывести каждое слово текстового файла на отдельной строке, считая, что слова разделяются одним или несколькими пробелами. Такая формулировка является упрощенной, поскольку в общем случае разделителями между словами могут быть сочетания знаков препинания и символов табуляции с пробелами.

Поясним содержание задачи примером. Пусть текстовой файл имеет имя 'c:\a.txt' и содержит текст:

Увы, на разные забавы Я много жизни погубил!

Тогда результатом работы программы будет последовательность слов:

Увы, на разные забавы

Я

...

Идея алгоритма выделения слова проста: найти позицию начала (wb) и конца (we) слова в строке и выделить слово как подстроку: st(wb:we). Данную процедуру повторять до тех пор, пока не будут проанализированы все строки текста.

character(len = 20) words(100)

! Массив слов текста

character(len = 80) st

! Строка текста

integer j, wb, we, nw, lst

 

integer, parameter :: unit = 1

! Номер устройства, к которому

open(unit, file = 'c:\a.txt')

! подсоединяется файл c:\a.txt

! Запишем все слова текста в массив words

nw = 0

! nw - число слов в тексте

do while(.not. eof(unit))

! Цикл обработки строк

read(unit, '(a)') st

! Ввод строки текста

write(*, *) st

! Контрольный вывод

lst = len_trim(st)

! Длина строки без завершающих пробелов

wb = 0

! wb - начало текущего слова в строке

!Просмотрим поочередно все символы строки st.

!Если найден пробел, то возможны случаи:

!а) предыдущий символ отличен от пробела (wb > 0), следовательно,

!выполнен переход с конца слова на промежуток между словами

!и, зная начало (wb) и конец (we) текущего слова,

!мы можем добавить слово в массив words.

!Используем для этого подпрограмму addword.

!После добавления слова устанавливаем в wb нуль (wb = 0);

!б) предыдущим символом является пробел - выполняем переход на

78