|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Написать программу обработки pas файлов
Нужна помощь . Помогите переписать эту программу с паскаля на Делфи, с формой кнопками и т.д. Pas файл находится на диске. Эта программа подсчитывает какие ключевые слова и в каком количестве использованы в pas файле. Составляет перечень имен простых переменных, используемых в левой части оператора присваивания. Представляет перечень меток программы в алфавитном порядке.
Код:
uses crt; const ks: array [1..39] of string=('program','uses','const','var','label','type','begin','end', 'and','or','not','div','mod','if','then','else','case','of', 'byte','integer','real','char','string','array','record','file','set', 'for','to','do','downto','goto','in','nil','repeat','until','while', 'function','procedure'); r: set of char=[' ',':',';',',']; function CutName (str: string; q: byte): string; var sss: string; begin sss:=''; while (q>=1) and (str[q] in ['a'..'z','0'..'9']) do begin sss:=str[q]+sss; dec(q); end; CutName:=sss; end; function CutNameF (str: string; q: byte): string; var sss: string; begin sss:=''; while (q<=length(str)) and (str[q] in ['a'..'z','0'..'9']) do begin sss:=sss+str[q]; inc(q); end; CutNameF:=sss; end; var f: text; k: array [1..39] of integer; s,sl,nm,lb: string; i,j: byte; c: char; begin assign(f,'D:\in.pas'); reset(f); nm:=''; sl:=''; lb:=''; j:=0; while not (eof(f)) do begin readln(f,s); s:=' '+s+' '; if pos('label',s)<>0 then begin sl:=copy(s,pos('label',s)+5,pos(';',s)-pos('label',s)+5); for c:='a' to 'z' do for j:=2 to length(s) do if (sl[j]=c) and (sl[j-1] in r) then lb:=lb+CutNameF (sl,j)+' '; sl:=''; end; for i:=2 to length(s) do if copy(s,i,2)=':=' then nm:=nm+CutName (s,i-1)+', '; for i:=1 to length(s) do if not (s[i] in r) then sl:=sl+s[i] else if length(sl)>0 then begin for j:=1 to 39 do if sl=ks[j] then inc(k[j]); sl:=''; end; end; close(f); clrscr; writeln('Ключевые слова:'); j:=0; for i:=1 to 39 do if k[i]<>0 then begin inc(j); writeln(ks[i]:10,'- ',k[i]); if i mod 19=0 then begin writeln('Enter to continue...'); readln(); clrscr; writeln('Ключевые слова:'); end; end; writeln('Enter to continue...'); readln(); clrscr; writeln('Перечень простых переменных: ',nm); writeln('Перечень меток в алфавитном порядке: ',lb); readln; end. Последний раз редактировалось Admin, 15.05.2016 в 21:30. |
#2
|
|||
|
|||
1)
Создаём новае приложение Дельфи. 2) На форму кладём Edit1,Button1,Memo1 3) Переключиться из формы на редактирование юнита Menu->View->Togle Form/Unit [F12] 4) Весь код со строк 2-33 копируем сразу после Implementation 5) Прокручиваем вверх после строки с текстом private пишем Код:
procedure Work; среда перейдёт к редактированию процедуры Work; строки 33-65 делаем телом этой функции объявления k,nm,lb - выносим из функции: var k: array [1..39] of integer; nm,lb: string; 6) некоторые типы и функции в дельфи называбются по-другому, поэтому в строке 33 f:TextFile; в строке 40 AssignFile(f, Text1.Text); в строке 65 CloseFile(f); 7) Прокручиваем вверх после строки с текстом private пишем Код:
procedure ShowResult; среда перейдёт к редактированию процедуры ShowResult; Код:
procedure TForm1.ShowResult; var i,j:integer; begin Memo1.Lines.Clear; Memo1.Lines.Add('Ключевые слова:'); j:=0; for i:=1 to 39 do if k[i]<>0 then begin inc(j); Memo1.Lines.Add(ks[i]+'- '+IntToStr(k[i])); end; Memo1.Lines.Add('Перечень простых переменных: '+nm); Memo1.Lines.Add('Перечень меток в алфавитном порядке: '+lb); end; Переключаемся на Форму [F12] Дважды кликаем на Button1 Редактируем: Код:
procedure TForm1.Button1Click(Sender: TObject); begin Work; ShowResult; end; После запуска в Edit1 пишем имя файла Жмём на кнопку |
#3
|
|||
|
|||
Спасибо огромное, все понятно объяснили, даже не ожидал такого ответа. Ах да нашел ошибку у вас вместо AssignFile(f, Text1.Text); нужно было прописать AssignFile(f, Edit1.Text);
|