Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
Точка Ру   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.044 c
6-1138710014
Stanislav
2006-01-31 15:20
2006.06.04
Пинг Свичей


2-1147852724
Konnor
2006-05-17 11:58
2006.06.04
Поиск


2-1147672818
Tempora
2006-05-15 10:00
2006.06.04
Как получить список папок и подпапок


2-1147782837
Евгений Р.
2006-05-16 16:33
2006.06.04
Ввод данных в dbGrid посредством onSetText


4-1136275157
dust
2006-01-03 10:59
2006.06.04
Однозначно идентифицировать установленную ОСь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский