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

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

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

> Программа удаления комментариев
сообщение
Сообщение #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 -


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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Цитата
Олег, по-моему так и в Паскале не пройдет...

пардом ми.... smile.gif
ну все равно, вот такое компилер пропускает (повторение '' - вывод ' на экран)

Цитата
begin
writeln('//nokom1 '' //nokom2');
readln;
end .


а после выхода...
Цитата
begin
writeln('//nokom1 ''
readln;
end .

так, что, клем, гы blum.gif

зы
блин сам нашел.... я в это время пост писал...

Сообщение отредактировано: Altair -


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 8.09.2025 18:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name