Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Обработка текстовой и графической информации

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
ГЛАВА 1
ОБРАБОТКА ТЕКСТОВОЙ
ИНФОРМАЦИИ
Обработка текстовой информации стала актуальной всвязи сразвитием сетевых технологий. Программы поиска файлов, текстов, ключевых слов нашли широкое применение. Обработка, сравнение и сортировка текстовых данных не являются типичными задачами, решаемыми сред­ствами языка FORTRAN. Однако это не означает, что он не позволяет решать подобные задачи. При желании программиста перечисленные процедуры могут быть реализованы ина FORTRANе. Это можно проде­монстрировать на следующих примерах.
Пример 1. Сортировка строк текста
(в данном случае списка литературы)
character (40) namein
cОткрыливыходнойфайл2сименем"SpisokLiteratuti.res" OPEN(UNIT=2,FILE='SpisokLiteratuti.res')
cОткрыливходнойфайл5(списоклитературы)сименем"5.txt" namein='5.txt' open(unit=5,le=namein,status='old',iostat=iche) if(iche.eq.0)write(2,*)'Найденфайл',namein if(iche.ne.0)write(2,*)'Stop!Ненайденфайл',namein cЕслифайлненайден,тоидемнавыход if(iche.ne.0)goto1000
cОткрыливыходнойфайл6сименем"6.txt" OPEN(UNIT=6,FILE='6.txt')
12 Глава 1. Обработка текстовой информации
cВызвалиподпрограммусортировкитекста callSortText
cВыходизпрограммы 1000continue stop end
cПодпрограммасортировкитекста
subroutineSortText cВыделилимассивыдляобработкитекста c(до2000строкпо1000символов) character(1)text(2000,1000) character(1)stroka(1000) character(1)probel,bukwa1,bukwa2 cЗадализначениесимвольнойпеременнойprobel dataprobel/""/ cОграничиличислостроктекста nstrok=2000 cСчитываниетекстаизфайла(впримереизфайла№5) cПереборстрокданных do50i=1,nstrok cСчитываниеоднойстрокиизфайладанных(5). cПоочередносчитываемсимволыстроки. read *(5,'(1000a1)',advance='no',end=5557,err=101,iostat=iche) *(stroka(j),j=1,1000) 101continue
cВслучае,есликоличествосимволоввстрокеменьшезаданной cвеличины(вданномслучае1000),выходимизцикла cсчитываниясимволовиидемкоператору(101continue). cВслучае,есливфайлечислострокменьшезаданногозначения, cвыходимизцикласчитываниястрокиидемкоператору c(5557continue).
Пример 1. Сортировка строк текста (вданном случае списка литературы)
cОпределилидлинусчитаннойстрокиjstr jstr=j
cЗаписалисчитаннуюстрокувмассивtext(i,j) do2j=1,jstr 2text(i,j)=stroka(j) cОчистили"хвост"строкиотпостороннихсимволов c(заполнилипробелами) jstrp1=jstr+1 do22j=jstrp1,1000 22text(i,j)=probel
cРаспечаталисчитаннуюстрокутекставфайле2(дляконтроля) write(2,*)(text(i,j),j=1,jstr) 50continue cКонецсчитываниятекстаизфайла(5)
5557continue nst=i-1 write(2,*) write(2,*)'Числостроктекста=',nst write(2,*)
13
cСортировкатекста nstrokm1=nst-1 cПерваястрока(stroka1).Переборпервыхстрок do3i=1,nstrokm1 ip1=i+1
cВтораястрока(stroka2).Переборвторыхстрок, cрасположенныхнижепервойстроки do103i1=ip1,nst
cПереборпервых10столбцовстроки№1(пример). cПропускаемцифры(старыйномерстроки№1
14 Глава 1. Обработка текстовой информации
cвспискелитературы). cИщемномерпозициипервойбуквывтекстовойстроке j1=0 do14j=1,10 bukwa1=text(i,j) callkodd(bukwa1,kod1) if(kod1.ge.1)j1=j if(kod1.ge.1)goto114 14continue 114continue if(j1.eq.0)goto3
j2=0 cПереборпервых20столбцовстроки№2. cПропускаемстарыйномерстроки№2вспискелитературы. cИщемпервуюбукву do15j=1,20 bukwa2=text(i1,j) callkodd(bukwa2,kod2) if(kod2.ge.1)j2=j if(kod2.ge.1)goto115 15continue 115continue if(j2.eq.0)goto103
cЗадаемметкуповторениястрок metkapowt=0 cСравниваемсодержаниястрок№1и№2. cПоследовательноперебираембуквывстроках c(впримерепроверяемпервые500символов) do4j=1,500 bukwa1=text(i,j+j1-1) bukwa2=text(i1,j+j2-1) callkodd(bukwa1,kod1) callkodd(bukwa2,kod2)
Пример 1. Сортировка строк текста (вданном случае списка литературы)
cЕслибуквыстрокразные,меняемметкуповторениястрок if(kod1.ne.kod2)metkapowt=metkapowt+1
cСравниваембуквы(пономерамихкодов). cИдемнаперестановкустрокместами, cеслисравниваемыебуквырасположеныневзаданномпорядке if(kod1.gt.kod2)goto5 cОбнаруженыодинаковыебуквы,переходимнасравнение cследующихбуквстрок if(kod1.eq.kod2)goto4 cСтрокирасположенывправильномпорядке, cпереходимксравнениюследующейстроки c(беремследующуюстроку№2) goto13 4continue cПереходимксравнениюследующейстроки c(беремследующуюстроку№2) goto13
15
cперестановкастрокместами(переставляемсимволы) 5continue cwrite(2,*)'Переставляемстроки' cwrite(2,*)(text(i,jj),jj=1,100) cwrite(2,*)(text(i1,jj),jj=1,100) cwrite(2,*) do6j=1,1000 bukwa1=text(i,j) text(i,j)=text(i1,j) text(i1,j)=bukwa1 6continue cwrite(2,*)'Строкипослеперестановки' cwrite(2,*)(text(i,jj),jj=1,100) cwrite(2,*)(text(i1,jj),jj=1,100) cwrite(2,*) cКонецперестановкистрок
16 Глава 1. Обработка текстовой информации
goto103
13continue cЗаполняемпробеламиповторяющуюсякопиюстроки if(metkapowt.ne.0)goto103 do16j=1,1000 text(i1,j)=probel 16continue
103continue cКонецпереборастрок№2 3continue cКонецпереборастрок№1
write(2,*) write(2,*) write(2,*)'Результатсортировки' write(2,*)
cПереборстрокданных(впримерезаписьрезультатавфайл№6) nomer=0 do60i=1,nst cПропускаемстарыйномерстроки j1=0 cПроверяемпервые10символовстроки do1240j=1,10 bukwa1=text(i,j) callkodd(bukwa1,kod1) if(kod1.ge.1)j1=j if(kod1.ge.1)goto1214 cСтираемстарыйномерстрокитекста(заполняемпробелами) text(i,j)=probel 1240continue 1214continue
Пример 1. Сортировка строк текста (вданном случае списка литературы)
if(j1.le.0)j1=1 jk=0 kod1sum=0 cПеребираемсимволыстроки do61j=j1,1000 bukwa1=text(i,j) cОпределяемкодсимвола callkodd(bukwa1,kod1) if(kod1.ne.0)jk=j if(kod1.ne.0)kod1sum=kod1sum+1 61continue cКоличествосимволоввстрокебезучетапробелов(kod1sum) if(kod1sum.le.0)goto60 cНовыйномерстрокивспискелитературы(nomer) nomer=nomer+1 cДлинастрокиjk(увеличилидлинустрокина10 cсцельюучетавозможногоналичиядругих cнеучтенныхсимволоввтексте) jk=jk+10 cПечатаемполученныйсписок(безномеровстрок)вфайл2 write(2,*)(text(i,j),j=1,jk) cЗаписываемстроку(сновымномеромстроки)вфайл6 write(6,'(i3,a2,1000a1)')nomer,'.',(text(i,j),j=j1,jk) 60continue cКонецзаписитекставфайл6.txt
17
5000continue stop end
Заметим, что всовременных версиях FORTRANа имеются процеду-
ры, спомощью которых можно создать другие варианты программы, ре­шающей поставленную задачу. Впредставленных примерах реализова­ны наиболее простые средства, которые используют традиционные
18 Глава 1. Обработка текстовой информации
формы языка. Применение расширенных версий языка минимизирова­но всвязи стем, что они чаще подвержены изменениям ииногда разли­чаются упроизводителей программного обеспечения.
cПодпрограммаопределенияпорядковогономерасимвола c(дляпроведениясравненийтекстовиопределенияочередности cрасстановкистрокзадаемкаждомусимволусвойномер) subroutinekodd(bukwa,kod) character(1)bukwa kod=0 cКириллица if(bukwa.eq.'а')kod=1 if(bukwa.eq.'б')kod=2 if(bukwa.eq.'в')kod=3 if(bukwa.eq.'г')kod=4 if(bukwa.eq.'д')kod=5 if(bukwa.eq.'е')kod=6 if(bukwa.eq.'ж')kod=7 if(bukwa.eq.'з')kod=8 if(bukwa.eq.'и')kod=9 if(bukwa.eq.'й')kod=10 if(bukwa.eq.'к')kod=11 if(bukwa.eq.'л')kod=12 if(bukwa.eq.'м')kod=13 if(bukwa.eq.'н')kod=14 if(bukwa.eq.'о')kod=15 if(bukwa.eq.'п')kod=16 if(bukwa.eq.'р')kod=17 if(bukwa.eq.'с')kod=18 if(bukwa.eq.'т')kod=19 if(bukwa.eq.'у')kod=20 if(bukwa.eq.'ф')kod=21 if(bukwa.eq.'х')kod=22 if(bukwa.eq.'ц')kod=23
Пример 1. Сортировка строк текста (вданном случае списка литературы)
if(bukwa.eq.'ч')kod=24 if(bukwa.eq.'ш')kod=25 if(bukwa.eq.'щ')kod=26 if(bukwa.eq.'ъ')kod=27 if(bukwa.eq.'ы')kod=28 if(bukwa.eq.'ь')kod=29 if(bukwa.eq.'э')kod=30 if(bukwa.eq.'ю')kod=31 if(bukwa.eq.'я')kod=32
if(bukwa.eq.'А')kod=1 if(bukwa.eq.'Б')kod=2 if(bukwa.eq.'В')kod=3 if(bukwa.eq.'Г')kod=4 if(bukwa.eq.'Д')kod=5 if(bukwa.eq.'Е')kod=6 if(bukwa.eq.'Ж')kod=7 if(bukwa.eq.'З')kod=8 if(bukwa.eq.'И')kod=9 if(bukwa.eq.'Й')kod=10 if(bukwa.eq.'К')kod=11 if(bukwa.eq.'Л')kod=12 if(bukwa.eq.'М')kod=13 if(bukwa.eq.'Н')kod=14 if(bukwa.eq.'О')kod=15 if(bukwa.eq.'П')kod=16 if(bukwa.eq.'Р')kod=17 if(bukwa.eq.'С')kod=18 if(bukwa.eq.'Т')kod=19 if(bukwa.eq.'У')kod=20 if(bukwa.eq.'Ф')kod=21 if(bukwa.eq.'Х')kod=22 if(bukwa.eq.'Ц')kod=23 if(bukwa.eq.'Ч')kod=24 if(bukwa.eq.'Ш')kod=25
19
20 Глава 1. Обработка текстовой информации
if(bukwa.eq.'Щ')kod=26 if(bukwa.eq.'Ъ')kod=27 if(bukwa.eq.'Ы')kod=28 if(bukwa.eq.'Ь')kod=29 if(bukwa.eq.'Э')kod=30 if(bukwa.eq.'Ю')kod=31 if(bukwa.eq.'Я')kod=32
cЛатинскийалфавит if(bukwa.eq.'a')kod=33 if(bukwa.eq.'b')kod=34 if(bukwa.eq.'c')kod=35 if(bukwa.eq.'d')kod=36 if(bukwa.eq.'e')kod=37 if(bukwa.eq.'f')kod=38 if(bukwa.eq.'g')kod=39 if(bukwa.eq.'h')kod=40 if(bukwa.eq.'i')kod=41 if(bukwa.eq.'j')kod=42 if(bukwa.eq.'k')kod=43 if(bukwa.eq.'l')kod=44 if(bukwa.eq.'m')kod=45 if(bukwa.eq.'n')kod=46 if(bukwa.eq.'o')kod=47 if(bukwa.eq.'p')kod=48 if(bukwa.eq.'q')kod=49 if(bukwa.eq.'r')kod=50 if(bukwa.eq.'s')kod=51 if(bukwa.eq.'t')kod=52 if(bukwa.eq.'u')kod=53 if(bukwa.eq.'v')kod=54 if(bukwa.eq.'w')kod=55 if(bukwa.eq.'x')kod=56 if(bukwa.eq.'y')kod=57 if(bukwa.eq.'z')kod=58
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]