Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Есть ли функция удаления всех комментариев?   Найти похожие ветки 

 
Точка Ру   (2006-05-08 04:06) [0]

Чтобы не пугать иностранцев русским языком. Комментарии бывают разных типов, и поэтому удалить их все очень не легко.


 
Джо ©   (2006-05-08 04:21) [1]

Стандартного ничего такого нету, остается:
1. Написать самому, выйдет не очень уж и сложный конечный автомат;
2. Поискать из уже написанного. Тут указать, например, на RemObjects PascalScript — он бесплатен и с исходниками. Но, честно говоря, разбираться в той туче коду себе дороже :) Легче, ИМХО, п. 1.


 
Точка Ру   (2006-05-08 04:27) [2]

Так дайте функцию то?


 
Джо ©   (2006-05-08 04:34) [3]

> [2] Точка Ру   (08.05.06 04:27)
> Так дайте функцию то?

А почему ты решил, что я за тебя ее напишу?


 
Anatoly Podgoretsky ©   (2006-05-08 09:06) [4]

Точка Ру   (08.05.06 04:27) [2]
Одной функцией не обойдешься.
Алгоритм довольно сложный и требует алгоритмического склада ума.
А готовую работу можно получить на www.job.ru


 
TUser ©   (2006-05-08 10:06) [5]

Можно и тут. Я готов реализивать п. 1 из [1]. Мыло в анкете.


 
atruhin ©   (2006-05-08 11:28) [6]


> Алгоритм довольно сложный

Это шутка или как? Думаю не более 2-3 часов работы.


 
wicked ©   (2006-05-08 11:29) [7]

есть еще рецепт - не писать комменты по-русски.... ну или по-украински, белорусски, казахски итыды....
я, например, комментарии пишу по-английски, а описание уже на том языке, на котором нужно.....


 
Юрий Зотов ©   (2006-05-08 12:54) [8]

> atruhin ©   (08.05.06 11:28) [6]

Думаю, что все же побольше выйдет. :o)


 
easy ©   (2006-05-08 13:02) [9]


> Есть ли функция удаления всех комментариев?


uses RegExpr;
(* http://regexpstudio.com/RU/TRegExpr/TRegExpr.html *)
const
 commentexpr = "(?is)({.*?})|(\(\*.*?\*\))|(//.+?)\n";
begin
 Memo1.Text:= ReplaceRegExpr(commentexpr, Memo1.Text, "");


потестировать, доработать commentexpr - и будет функция


 
homm ©   (2006-05-08 13:17) [10]


> "(?is)({.*?})|(\(\*.*?\*\))|(//.+?)\n";

Какая выразительность языка :)


 
TUser ©   (2006-05-08 13:48) [11]

Символы (**) {} и // могут встречаться в строковых константах, - это первоек очевидное замечание к такому регэкспу.

Зы. Берусь на спор написать соответствующий автомат за 2 часа. Ставлю ящик пива :)


 
Плохиш ©   (2006-05-08 13:50) [12]


> TUser ©   (08.05.06 13:48) [11]
> Зы. Берусь на спор написать соответствующий автомат за 2
> часа. Ставлю ящик пива

А если не уложишься, то два ящика?


 
Юрий Зотов ©   (2006-05-08 14:17) [13]

> TUser ©   (08.05.06 13:48) [11]

Удовлетворюсь даже одной виртуальной бутылкой. К 16:30 по Москве жду код. Неглючный, конечно.
:о)


 
Юрий ©   (2006-05-08 14:23) [14]

Не совсем понятна ставка :о) т.е. если TUser победит ему ящик? А если проиграет то от него Юрию Зотову бутылку пива?


 
Юрий Зотов ©   (2006-05-08 14:54) [15]

> Юрий ©   (08.05.06 14:23) [14]

А какая разница? Пиво каждый из нас и сам может себе купить, без напряга. Не в нем дело.

Если TUser победит, то комьюнити получит еще один полезный инструмент. А если проиграет, то комьюнити убедится, что эта задачка хотя и несложная, конечно, но и не так проста, как это кажется на первый взгляд. В любом случай польза.


 
Юрий ©   (2006-05-08 14:58) [16]


> [15] Юрий Зотов ©   (08.05.06 14:54)


Конечно ;) Но всё равно азарт, нужен азарт!!!


 
KilkennyCat ©   (2006-05-08 15:00) [17]


> Юрий Зотов ©  


если только русский комментарий, задача несложная, особенно для тех вариантов, где делфи еще не поддерживает русские имена переменных, если память не изменяет, до 2005-ой... :)


 
saa   (2006-05-08 15:02) [18]

А еше полезнее утилита, которая бы автоматически их перевела.


 
KilkennyCat ©   (2006-05-08 15:02) [19]

и удалила :)))


 
Привидение Хозяина   (2006-05-08 15:04) [20]

Удалено модератором


 
Пусик ©   (2006-05-08 15:05) [21]

Задача не сложная. Опыта в использовании конечных автоматов вполне достаточно. И даже 2 часа на это не нужно. достаточно 1.


 
Юрий Зотов ©   (2006-05-08 15:15) [22]

> Пусик ©   (08.05.06 15:05) [21]

Так в чем же дело? :о)


 
Привидение Хозяина   (2006-05-08 15:16) [23]

Удалено модератором


 
KilkennyCat ©   (2006-05-08 15:16) [24]


> Пусик ©   (08.05.06 15:05)


если конечный автомат - это руки, то да... за один час я дофига удалю. приблизительно 3660 строк комментариев.


 
Sergey Masloff   (2006-05-08 15:17) [25]

Пусик ©   (08.05.06 15:05) [21]
Срок известен, задачи определены - за дело, товарищи. До 16-30 как раз час - уложитесь


 
KilkennyCat ©   (2006-05-08 15:57) [26]

Осталось полчаса :)


 
Привидение Хозяина   (2006-05-08 16:07) [27]

Удалено модератором


 
Пусик ©   (2006-05-08 16:21) [28]

Те условия, которые смогла определить, реализовала. Конечно, могла что-нибудь и пропустить, но, как мне кажется, работает:

unit uParseComment;

interface

uses
 Sysutils;

type
 TStateParse=(spNone,spSlash1,spSlash2,spLeft1,spLeft2,spFLeft1,spFLeft2,spRight1 ,spLiteral1);
 TParseError=Exception;

function DeleteComments(const s: String): String;

implementation

function DeleteComments(const s: String): String;
var
 i: Integer;
 State: TStateParse;
 Len: Integer;
begin
 State := spNone;
 Result := "";
 Len := Length(s);

 i := 1;
 while i<=Len do
 begin
   case State of
     spNone:
       begin
         if s[i]="/" then
         begin
           State := spSlash1;
           Inc(i);
           Continue;
         end;
         if s[i]="(" then
         begin
           State := spLeft1;
           Inc(i);
           Continue;
         end;
         if s[i]="{" then
         begin
           State := spFLeft1;
           Inc(i);
           Continue;
         end;
         if s[i]="""" then
         begin
           State := spLiteral1;
           Result := Result + s[i];
           Inc(i);
           Continue;
         end;
         Result := Result + s[i];
         Inc(i);
       end;
     spSlash1:
       begin
         if s[i]="/" then
         begin
           Inc(i);
           State := spSlash2;
         end
         else
         begin
           State := spNone;
           Result := Result + s[i-1];
         end;
         Continue;
       end;
     spSlash2:
       begin
         if s[i]=#13 then
         begin
           State := spNone;
         end;
         Inc(i);
         Continue;
       end;
     spLeft1:
       begin
         if s[i]="*" then
         begin
           Inc(i);
           State := spLeft2
         end
         else
         begin
           State := spNone;
           Result := Result + s[i-1];
         end;
         Continue;
       end;
     spFLeft1:
       begin
         if s[i]<>"$" then State := spFLeft2
         else
         begin
           State := spNone;
           Result := Result + s[i-1];
           Result := Result + s[i];
         end;
         Inc(i);
         Continue;
       end;
     spLeft2:
       begin
         if s[i]="*" then
         begin
           State := spRight1;
           Inc(i);
           Continue;
         end
         else Result := Result + s[i];
       end;
     spFLeft2:
       begin
         if s[i]="}" then State := spNone;
         Inc(i);
       end;
     spRight1:
       begin
         if s[i]=")"
           then State := spNone
           else State := spLeft2;
         Inc(i);
       end;
     spLiteral1:
       begin
         if s[i]="""" then
         begin
           if i<>Len then
           begin
             if s[i+1]="""" then
             begin
               Result := Result + s[i+1];
               Inc(i,2);
             end
             else
             begin
               State := spNone;
               Result := Result + s[i];
               Inc(i);
             end;
           end
           else Inc(i);
           Continue;
         end
         else Result := Result + s[i];
         Inc(i);
       end;
   end;
 end;
 if State<>spNone then raise TParseError.Create("Ошибка в синтаксисе");
end;

end.


 
Пусик ©   (2006-05-08 16:22) [29]

Не уверена за точность с определением литералов с апострофами внутри строки...


 
sniknik ©   (2006-05-08 16:38) [30]

Пусик ©   (08.05.06 16:21) [28]
не проверял, но судя по всему после этой процедуры и от всех директив компилятора тоже останутся "рожки да ножки"  наряду с комментариями...

глюк`с.


 
sniknik ©   (2006-05-08 16:40) [31]

хотя может и нет...
> if s[i]<>"$" then State := spFLeft2

надо бы всетаки проверить


 
Пусик ©   (2006-05-08 16:41) [32]


> не проверял, но судя по всему после этой процедуры и от
> всех директив компилятора тоже останутся "рожки да ножки"
>  наряду с комментариями...


Вряд ли. Этот пунктик учтен.


 
KilkennyCat ©   (2006-05-08 16:45) [33]

и этот?
(*$NOINCLUDE CommCtrl *)


 
KilkennyCat ©   (2006-05-08 16:47) [34]

Однако, TUser опаздывает ;)


 
Пусик ©   (2006-05-08 16:51) [35]


> KilkennyCat ©   (08.05.06 16:45) [33]
>
> и этот?
> (*$NOINCLUDE CommCtrl *)


А это что за незнакомая конструкция? Вроде бы простой комментарий - удален будет.


 
sniknik ©   (2006-05-08 16:52) [36]

сглючило на таком
// -= Prepare Definations =- //

на этом повисло
(*$NOINCLUDE CommCtrl *)


 
KilkennyCat ©   (2006-05-08 16:52) [37]

unit Controls;

{$P+,S-,W-,R-,T-,H+,X+}
{ WARN SYMBOL_PLATFORM OFF}
{$C PRELOAD}

interface

{$R Controls.res}

{ CommCtrl.hpp is not required in Controls.hpp }
(*$NOINCLUDE CommCtrl *)


 
Пусик ©   (2006-05-08 16:57) [38]

(*$NOINCLUDE CommCtrl *) у меня вообще невозможно в программу добавить. При компиляции выдает ошибку - Undeclared IDentifier "CommCtrl"


 
Вовчик   (2006-05-08 17:07) [39]

Удалено модератором


 
KilkennyCat ©   (2006-05-08 17:08) [40]

это из генофонда. controls.pas
компилятор не считает это комментарием.



Страницы: 1 2 3 вся ветка

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.05 c
15-1147352220
alex-drob
2006-05-11 16:57
2006.06.04
Сохранить переменную типа TList


2-1147540891
serko
2006-05-13 21:21
2006.06.04
Запуск скрипта!


2-1147785899
Dr. Genius
2006-05-16 17:24
2006.06.04
Ошибка при использовании NMSMTP


15-1146837402
Непонятно кто
2006-05-05 17:56
2006.06.04
А что такое TV-тюнер


2-1148017120
Alex_C
2006-05-19 09:38
2006.06.04
Как узнать, установлен ли в сис-ме какой-либо язык?