Vladimir_S |
04.05.2010 13:42 |
Цитата:
Сообщение от DemonGDC
(Сообщение 330055)
Очень нужна помощь в выполнении двух задач:
1) написать функцию\процедуру поиска количества вхождений слова в текстовом файле, файл заполнен вручную
2) Дан текстовый файл. Получить из него два типизированных (в первом должны быть все цифры из исходного, во втором - все остальное)
|
Пожалуйста:
1.
Код:
VAR
f:TEXT;
i,j,n:INTEGER;
Wrd:STRING;
Ch:Char;
b:boolean;
BEGIN
Assign(f,'D:\x');
ReSet(f);
n:=0;
WriteLn('Enter the word:');
ReadLn(Wrd);
j:=1;
Repeat
Read(f,Ch);
If Ch=Wrd[j] then
begin
b:=true;
i:=j;
Repeat
Inc(i);
Read(f,Ch);
If Ch<>Wrd[i] then b:=false;
Until (i=Length(Wrd)) or (b=false);
If (b=false) and (Ch=Wrd[1]) then j:=2 else j:=1;
If b and (i=Length(Wrd)) then Inc(n);
end;
Until EoF(f);
Close(f);
WriteLn('n= ',n);
ReadLn;
END.
Здесь исходный файл имеет наименование "х" и расположен в корневой папке диска D. Разумеется, имя и путь могут быть изменены. Программа отслеживает не только совпадение слова, как целого, но и ситуации, когда проверяемое слово является частью слова в файле. Это тоже считается вхождением. В условии, к сожалению, этот момент не прояснен.
2.
Код:
VAR
f,f1,f2:TEXT;
Ch:Char;
BEGIN
Assign(f,'D:\x');
ReSet(f);
Assign(f1,'D:\x1');
ReWrite(f1);
Assign(f2,'D:\x2');
ReWrite(f2);
Repeat
Read(f,Ch);
If (Ord(Ch)>47) and (Ord(Ch)<58) then
Write(f1,Ch,' ') else
Write(f2,Ch);
Until EoF(f);
Close(f);
Close(f1);
Close(f2);
END.
Насчет имен и путей - то же, что и в предыдущей задаче. Файл f1 объявлен текстовым, однако в другой использующей его программе он может рассматриваться уже как типизированный. Можно, конечно, сразу через функцию Val его записать, как типизированный - если это необходимо, сделаю.
|