Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.05.2016, 21:27
simbios simbios вне форума
Прохожий
 
Регистрация: 15.05.2016
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Написать программу обработки 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  
Старый 16.05.2016, 16:30
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

1)
Создаём новае приложение Дельфи.

2)
На форму кладём
Edit1,Button1,Memo1
3)
Переключиться из формы на редактирование юнита
Menu->View->Togle Form/Unit [F12]

4)
Весь код со строк 2-33 копируем сразу после Implementation

5)
Прокручиваем вверх
после строки с текстом private
пишем
Код:
procedure Work;
и жмём Ctrl+Shift+C
среда перейдёт к редактированию процедуры 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;
и жмём Ctrl+Shift+C
среда перейдёт к редактированию процедуры 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;
8)
Переключаемся на Форму [F12]
Дважды кликаем на Button1
Редактируем:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Work;
  ShowResult;
end;

После запуска в Edit1 пишем имя файла
Жмём на кнопку
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо icWasya за это полезное сообщение:
denzenit (12.01.2021), simbios (16.05.2016)
  #3  
Старый 16.05.2016, 17:01
simbios simbios вне форума
Прохожий
 
Регистрация: 15.05.2016
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо огромное, все понятно объяснили, даже не ожидал такого ответа. Ах да нашел ошибку у вас вместо AssignFile(f, Text1.Text); нужно было прописать AssignFile(f, Edit1.Text);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter