Texnar | Дата: Суббота, 05.01.2008, 21:57 | Сообщение # 1 |
Знакомый
Группа: Пользователи
Сообщений: 16
Статус: Offline
| Code Program Zhivykh_22; Const MaxWr = 20; znaks=':;.,!?-" '; Type str2 = string[255]; simvol=string[1]; slovo=string[30]; mas = Array[1..MaxWr] of slovo; str = string[200];
Procedure ReadNameofFile(var f1,f2,g:text); var nazv1,nazv2,nazv3:str; Begin Writeln('Введите имя файла с текстом: '); readln(nazv1); Writeln('Введите имя файлов со словами: '); Readln(nazv2); Writeln('Введите имя файла куда будет записан результат: '); readln(nazv3); Assign(f1,nazv1); Assign(f2,nazv2); Assign(g,nazv3); {$I-} Reset(f1); Reset(f2); {$I+} end;
procedure schitat_slovo(var f2:text; var sl:slovo); var sim:simvol; begin sl:=''; repeat read(f2,sim); {До тех пор пока не дойдем до запятой} sl:=sl+sim; {считать символ и добавить к слову} until (sim=',') or eoln(f2); if not(eoln(f2)) then {если это было не последнее слово} delete(sl,length(sl),1); {удалить запятую из конца этого слова} end;
Procedure CreateArrays(var f2:text; var zamenyemie,zamenyushie:mas; var kolvo:integer); var mode:byte; sl:slovo; Begin mode:=1; kolvo:=0; while not(eoln(f2)) do {пока не дойдем до конца строки} begin schitat_slovo(f2,sl);{считать слово} if mode=1 then {если это заменяемое слово} begin inc(kolvo); zamenyemie[kolvo]:=sl;{добавить его в массив заменяемых слов} mode:=2; {следующее слово заменяющее} end else {иначе заменяющее слово} begin zamenyushie[kolvo]:=sl; {добавить в массив заменяющих слов} mode:=1; {следующее слово будет заменяемое} end; end; End;
function posznak(s:str; start:integer):integer; {Ищем позицию первого знака начиная с заданой позиции} var i:integer; begin i:=start; while (pos(copy(s,i,1),znaks)=0) and (i<=length(s)) do {пока не достигнут конец строки и не найден знак} i:=i+1;{смотреть следующий символ} posznak:=i;{возвратить позицию} end;
function proverka_na_ne_odni_znaki(s:str):boolean; {проверка на то что в строке не одни знаки} var i:integer; begin proverka_na_ne_odni_znaki:=false; for i:=1 to length(s) do {переберем все символы} if pos(copy(s,i,1),znaks)=0 then {если символ не найден среди знаков} proverka_na_ne_odni_znaki:=true; {вернуть правду} end; 1-ая часть --------------------------------------------- Code function zamenaslov(var s1:str; word1,word2:slovo):str2; var prom:str2; stroka:string[202]; prom2:integer; begin stroka:=' '+s1+' '; prom:=''; while (length(stroka)>0) and proverka_na_ne_odni_znaki(stroka) and (pos(word1,stroka)>0) do {пока строка не пуста и в ней содержатся слова и содержится искомая комбинация(word1)} begin prom2:=pos(word1,stroka);{находим позицию начала совпадения} if pos(copy(stroka,prom2-1,1),znaks)>0 then{предыдущий симво знак(комбинация стоит в начале)} begin if pos(copy(stroka,prom2+length(word1),1),znaks)>0 then { если после комбинации стоит тоже знак( слово стоит в конце)} begin {комбинация отделена знаками справа и слева} delete(stroka,prom2,length(word1));{удаляем слово} insert(word2,stroka,prom2);{заменяем на нужное} prom:=prom+copy(stroka,1,posznak(stroka,prom2)-1);{добавляем в новую строчку} {все от начала до конца слова } delete(stroka,1,posznak(stroka,prom2)-1);{ удаляем скопированную часть} end else begin {после комбинации стоит не знак а символ} prom:=prom+copy(stroka,1,posznak(stroka,prom2)-1); delete(stroka,1,posznak(stroka,prom2)-1); end; end else begin {перед комбинацией стоит символ} prom:=prom+copy(stroka,1,posznak(stroka,prom2)-1); delete(stroka,1,posznak(stroka,prom2)-1); end; end; prom:=prom+stroka;{добавляем остаток} zamenaslov:=prom; end;
procedure zamenaslov_f(var f,g:text; const zamenyemie,zamenyushie:mas; kolvo:integer); var s:str; s2:str2; i:integer; begin while not(eof(f)) do {перебираем строки в файле} begin readln(f,s); for i:=1 to kolvo do begin s2:=zamenaslov(s,zamenyemie[i],zamenyushie[i]);{ищем в строке файла f1 заменяемые слова и заменяем на заменяющее слово} end; writeln(g,s2); {и записать в новый файл} end; end;
Var f1, f2: Text; g: Text; zamenyemie,zamenyushie: mas; kolvo:integer;
Begin ReadNameofFile(f1,f2,g); {получаем имена файлов и попытаемся открыть файл данных} if IOResult<>0 then {Если неудачно то} begin writeln('Ошибка в имени файла(ов)'); {выводим сообщение} readln; end else {иначе} begin rewrite(g); {открываем выходной файл на перепись} CreateArrays(f2,zamenyemie,zamenyushie,kolvo); {заполняем массив с заменяемыми и заменяющими} {словами, а также пересчитать их} ZamenaSlov_f(f1,g,zamenyemie,zamenyushie,kolvo); {заменяем слова заменяемые на заменяющие и сохраняем в новом файле} Close(f1); close(f2); {сохраняем данные} Close(g); End; End. 2-ая часть. Кодировку нужную я у себя не нашел(
Сообщение отредактировал Texnar - Суббота, 05.01.2008, 21:57 |
|
| |
Seqular | Дата: Воскресенье, 06.01.2008, 10:29 | Сообщение # 2 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Да, насчет кодировки. Я делаю так: пользуюсь текстовым редактором "Bred3" - аналог блокнота, но с кодировками не глючит! Очень советую скачать. Бесплатный. Весит мало. Подсвечивает синтаксис паскаля. В общем выделяешь задачу с сайта. "Бред" переключаешь в кодировку OEM (справа вверху кнопка с 3-мя кодировками), вставляешь в текст условие. Кириллица остается кириллицей. Сохраняешь. И все! В паскале читается нормально.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Texnar | Дата: Воскресенье, 13.01.2008, 01:22 | Сообщение # 3 |
Знакомый
Группа: Пользователи
Сообщений: 16
Статус: Offline
| Ладно на будующее учту. Можете помочь с этой? Очень надо до 8 числа((( А еще экзамены на програмирование время щас вообще нет. Парни очень нужна помощь! Очень расчитываю на вас. Помогите с задачей до завтрашнего дня до 3-х часов! Добавлено (12.01.2008, 18:22) --------------------------------------------- Все спасибо помощь больше не нужна. Сам все доделал) И тем самым успешно поставили мне автомат)
Сообщение отредактировал Texnar - Вторник, 08.01.2008, 05:24 |
|
| |