IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Программа удаления комментариев
klem4
сообщение 1.02.2006 17:30
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

Исходный код
program Comments;
{$R-}
uses crt;
const
op : array [1..3] of string[2] = ('//','{','(*');
cl : array [1..3] of string[2] = ('','}','*)');
type
TType = string;
PArray = record
P : ^TArray;
size : word;
end;
TArray = array [1..1] of TType;
TFile = text;

function OpenFile(var f : TFile; path : TType) : boolean;
begin
assign(f, path);
{$I-}
reset(f);
{$I+}
OpenFile := (IOResult = 0);
end;

procedure SaveChanges(var f : text; arr : PArray);
var
i : word;
begin
rewrite(f);
for i := 1 to arr.size do writeln(f,arr.p^[i]);
close(f);
end;

procedure InitArray(var arr : PArray);
begin
arr.size := 0;
GetMem(arr.p, arr.size * sizeof(TType));
end;

procedure FillArray(var arr : PArray; var f : TFile);
var
temp : TType;
newArr : ^Tarray;
i : word;
begin
i := 0;
while not(eof(f)) do begin
readln(f, temp);
inc(i);
GetMem(newArr, arr.size * sizeof(TType) + sizeof(TType));
move(arr.p^[1], newArr^[1], arr.size * sizeof(TType));
FreeMem(arr.p, arr.size * sizeof(TType));
arr.p := newArr;
inc(arr.size);
arr.p^[i] := temp;
end;
end;

procedure ClearArray(var arr : PArray);
begin
FreeMem(arr.p, arr.size * sizeof(TType));
end;

procedure Check(var arr : PArray);
var
s : TType;
i,j,k : word;
begin
i := 1;
while (i <= arr.size) do begin
s := arr.p^[i];
for k := 1 to 3 do
if (pos(op[k],s) <> 0) then begin
j := 1;
while (j <= length(s)) do begin
if s[j] = '''' then repeat
inc(j);
if j = length(s) then begin
arr.p^[i] := s;
inc(i);
s := arr.p^[i];
end;
until s[j] = '''';
if s[j] = '''' then inc(j);
if op[k] = copy(s,j,length(op[k])) then
if k = 1 then delete(s,j,255)
else
while (copy(s,j,length(cl[k])) <> cl[k]) do begin
if j = length(s) then begin
delete(s,j,1);
arr.p^[i] := s;
inc(i);
s := arr.p^[i];
j := 1;
end;
delete(s,j,1);
end else inc(j);
if copy(s,j,length(cl[k])) = cl[k] then delete(s,j,length(cl[k]));
end;
end;
arr.p^[i] := s;
inc(i);
end;
end;

var
filePath : TType;
checkFile : TFile;
temp : PArray;

begin

clrscr;

filePath := 'c:\input.txt';

if OpenFile (checkFile, filePath) then begin
InitArray(temp);
FillArray(temp, checkFile);
Check(temp);
SaveChanges(checkFile, temp);
ClearArray(temp);
end
else writeln('Can"t open file : ' + filePath);

writeln('Done !');
readln;
end.


Цитата


in :

//comment1
{comment2} no comment2 // comment3
no comment3 {comment3}
{comment4} no comment4 {comment5}
{connent6} writeln('{no comment5}'); {comment7}
(*comment8*) no com{COMMENT}ment6
no comment7 (*comment9*)
(*comment10*) writeln('(*no comment8*)') (*comment11*)

type
TSet = set of char = ['{','}'];

out :



no comment2
no comment3
no comment4
writeln('{no comment5}');
no comment6
no comment7
writeln('(*no comment8*)')

type
TSet = set of char = ['{','}'];



Сообщение отредактировано: klem4 - 2.02.2006 14:02


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
klem4
сообщение 1.02.2006 21:02
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Исходный код
program Comments;
{$R-}
uses crt;
const
op : array [1..3] of string[2] = ('//','{','(*');
cl : array [1..3] of string[2] = ('','}','*)');
type
TType = string;
PArray = record
P : ^TArray;
size : word;
end;
TArray = array [1..1] of TType;
TFile = text;

function OpenFile(var f : TFile; path : TType) : boolean;
begin
assign(f, path);
{$I-}
reset(f);
{$I+}
OpenFile := (IOResult = 0);
end;

procedure SaveChanges(var f : text; arr : PArray);
var
i : word;
begin
rewrite(f);
for i := 1 to arr.size do writeln(f,arr.p^[i]);
close(f);
end;

procedure InitArray(var arr : PArray);
begin
arr.size := 0;
GetMem(arr.p, arr.size * sizeof(TType));
end;

procedure FillArray(var arr : PArray; var f : TFile);
var
temp : TType;
newArr : ^Tarray;
i : word;
begin
i := 0;
while not(eof(f)) do begin
readln(f, temp);
inc(i);
GetMem(newArr, arr.size * sizeof(TType) + sizeof(TType));
move(arr.p^[1], newArr^[1], arr.size * sizeof(TType));
FreeMem(arr.p, arr.size * sizeof(TType));
arr.p := newArr;
inc(arr.size);
arr.p^[i] := temp;
end;
end;

procedure ClearArray(var arr : PArray);
begin
FreeMem(arr.p, arr.size * sizeof(TType));
end;

procedure Check(var arr : PArray);
var
s : TType;
i,j,k : word;
begin
i := 1;
while (i <= arr.size) do begin
s := arr.p^[i];
for k := 1 to 3 do
if (pos(op[k],s) <> 0) then begin
j := 1;
while (j <= length(s)) do begin
if s[j] = '''' then repeat
inc(j);
until (s[j] = '''') and (s[pred(j)] <> '''');
if s[j] = '''' then inc(j);
if op[k] = copy(s,j,length(op[k])) then
if k = 1 then delete(s,j,255)
else
while (copy(s,j,length(cl[k])) <> cl[k]) do begin
if j = length(s) then begin
delete(s,j,1);
arr.p^[i] := s;
inc(i);
s := arr.p^[i];
j := 1;
end;
delete(s,j,1);
end else inc(j);
if copy(s,j,length(cl[k])) = cl[k] then delete(s,j,length(cl[k]));
end;
end;
arr.p^[i] := s;
inc(i);
end;
end;

var
filePath : TType;
checkFile : TFile;
temp : PArray;

begin

clrscr;

filePath := 'c:\input.txt';

if OpenFile (checkFile, filePath) then begin
InitArray(temp);
FillArray(temp, checkFile);
Check(temp);
SaveChanges(checkFile, temp);
ClearArray(temp);
end
else writeln('Can"t open file : ' + filePath);

writeln('Done !');
readln;
end.

blum.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
klem4   Программа удаления комментариев   1.02.2006 17:30
Altair   гы гы.... вход: выход гы-гы :lol:   1.02.2006 20:38
klem4   Ах-ты .. молодец :)) Щас исправлю :)   1.02.2006 20:43
volvo   :blink: Олег, по-моему так и в Паскале не пройдет....   1.02.2006 20:48
klem4   Хм действительно ... а я исправил уже, но это ладн...   1.02.2006 20:54
Altair   пардом ми.... :) ну все равно, вот такое компиле...   1.02.2006 20:55
klem4   program Comments; {$R-} uses crt; const op...   1.02.2006 21:02
volvo   klem4, рано радуемся :) Просто вешает программу.....   1.02.2006 21:10
klem4   А вот так 1 (* begin end*) 2 нормально ... гмм щ...   1.02.2006 21:12
Altair   не.. не нормально... потому что я тоже :) :bl...   1.02.2006 21:14
klem4   Кажись пофиксил :ph34r: program Comments; {...   1.02.2006 21:29
volvo   klem4, не совсем :) Смотри: Вполне рабочая програ...   1.02.2006 21:39
klem4   Да. И я еще баг нашел один, вобщем пока лавочку пр...   1.02.2006 21:42
Altair   klem, ты это... не стесняйся, приходи еще... :) ...   1.02.2006 21:43
klem4   Закрываю временно тему, потому что если кто-то най...   1.02.2006 21:51
klem4   Вот значит очередной ласт вершн :) program Commen...   2.02.2006 13:59
volvo   :no1: НЕ пройден файл:   2.02.2006 14:20
klem4   Почему нет ? Оставляет ... первая строка - это в...   2.02.2006 14:23
volvo   Кто тебе сказал? Попробуй откомпилировать эту прог...   2.02.2006 14:25
klem4   Ага, это опятьже к той теме, зачем сделали (* кром...   2.02.2006 14:27


Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"