Форум: "Прочее";
Текущий архив: 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.043 c