файлы

Ответить
milya49
Сообщения: 3
Зарегистрирован: 09 ноя 2012, 07:52

Составить программу, вырезающую из файла с текстом программы на языке Turbo-Pascal все комментарии
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Вот Вам небольшой пример:

Код: Выделить всё

uses crt;
var
  f, g: Text;
  filename, tmp: string;
  ioerror: Integer;
  k: Byte;
  CommentEnd: boolean;

function CropString(s: string; StartPos: Byte; StopChar: char): string;
var
  i: Byte;
  stop: Boolean;
begin
  i := StartPos;
  stop := False;
  while not stop do
  begin
    stop := (s[i] = StopChar) or (i = Length(s));
    Delete(s, i, 1);
  end;
  CropString := s;
end;

begin
  repeat
    repeat
      ClrScr;
      Write('Name of file: ');
      ReadLn(filename);
      if filename = '' then
      begin
        WriteLn('Empty string!');
        ReadKey;
      end;
    until filename <> '';
    Assign(f, filename);
{$I-}
    Reset(f);
{$I+}
    ioerror := IOResult;
    if ioerror <> 0 then
    begin
      WriteLn('IO Error!');
      ReadKey;
    end;
  until ioerror = 0;
  Assign(g, 'tmp_' + filename);
  Rewrite(g);
  CommentEnd := True;
  while not EOF(f) do
  begin
    ReadLn(f, tmp);
    if not CommentEnd then
      tmp := CropString(tmp, 1, '}');
    k := pos('{', tmp);
    CommentEnd := (k = 0) or (pos('}', tmp) > 0);
    if k > 0 then
      tmp := CropString(tmp, k, '}');
    WriteLn(g, tmp);
  end;
  Close(f);
  Erase(f);
  Rename(g, filename);
  Close(g);
end.
но это для тривиальных программок по типу:

Код: Выделить всё

program simple;
begin
  WriteLn('Hello, World!'); {Short comment}
  ReadLn; {Long
  comment}
end.
Для применения на практике нужно вводить более серьезные проверки наличия комментариев
Нет религии выше истины
Ответить