assign(F,'///');
reset(F);
//Читаем файл до конца..
//и ищем..
pro:=pos('end.'S);//Ищем end. в строке тоесть в файле..
//если есть то дальше если он нашел то он возвратит порядковый номер символа (по счету).
if (pro>0) then
begin
writeln('da');
end
else
writeln('no');
//Смотри мы нашли заканчивание програмы. теперь надо проверить begin
//Но может быть ситуация когда программа не правильно написанно не хватает end; верно?
//И дальше считает сколько begin
//И столько должно быть begin Только на 1 больше
for i:=1 to length(S) do
begin
beg:=pos('begin',S); //Ищем begin
S:=copy(S,beg+1,length(S)); //Тут ты читаешь в строку S из файла..до этого ..как только нашел то копируем обратно откидывая другую часть в коорой уже производился поиск.. и те самым..
if (beg>0) then
begin
res:=res+1;
end;
end;
for i:=1 to length(S) do
begin
beg:=pos('end;',S); //Ищем begin
S:=copy(S,beg+1,length(S)); //Тут ты читаешь в строку S из файла..до этого ..как только нашел то копируем обратно откидывая другую часть в коорой уже производился поиск.. и те самым..
if (beg>0) then
begin
res1:=res1+1;
end;
end;
if (res>res1) then //Тоесть если begin больше чем end; то делаем..
//Дальше сам уже как надо тебе
Вариант 2
Uses Crt;
Const
OperatorCount = 5;
Operator: Array[1..OperatorCount] of String = ('end','begin','case','record','object');
Symb = [#32,#8,#59,#46,#123,#125,#40,#41];
Var
PasFile: Text;
S: String;
i,n: Integer;
Bracket: Array[1..2] of Integer;
begin
ClrScr;
Assign(PasFile, 'C:\ASCIITAB.PAS');
Reset(PasFile);
Bracket[1] := 0; Bracket[2] := 0;
while not Eof(PasFile)
do begin
ReadLn(PasFile, S);
S := S + ' ';
for i := 1 to OperatorCount
do begin
n := Pos(Operator[i], S);
case n
of 0: Continue;
1: if S[n+Length(Operator[i])] in Symb
then if i = 1
then Inc(Bracket[1])
else Inc(Bracket[2]);
else if (S[n-1] in Symb) and (S[n+Length(Operator[i])] in Symb)
then if i = 1
then Inc(Bracket[1])
else Inc(Bracket[2]);
end;
end;
end;
Close(PasFile);
WriteLn(Bracket[1],' ',Bracket[2]);
ReadLn;
end.