Что нового

Программа для удаления комментариев из скрипта AutoIt

KitRoo_t

Новичок
Сообщения
9
Репутация
0
:stars: Не правильно работает. :(
Не знаю что делать...

Код:
$FileOpenDlg1 = FileOpenDialog("", @ScriptDir, "AutoIt v3 Script (*.au3)")
If $FileOpenDlg1 = "" Then Exit
$FileOpen1 = FileOpen($FileOpenDlg1)
$FileRead1 = FileRead($FileOpen1)
$StrInStr2 = 1
While 1
   $StrInStr1 = StringInStr($FileRead1, ";", 0, 1, $StrInStr2)
   $StrInStr2 = StringInStr($FileRead1, @CRLF, 0, 1, $StrInStr1)
   If $StrInStr1 = 0 Then ExitLoop
   If $StrInStr2 = 0 Then ExitLoop
   $FileRead1 = StringReplace($FileRead1, StringMid($FileRead1, $StrInStr1, $StrInStr2-$StrInStr1), "")
WEnd


А мне такая программа пригодилась бы...
Доведёт может кто до ума?
Debug через ConsoleWrite сделаете, всё будет видно...
Должна удалять от ";" до @CRLF
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вопрос - Зачем это нужно?

Но если так уж сильно нужно, то вот как то так:

Код:
$sFile = FileOpenDialog("", @ScriptDir, "AutoIt v3 Script (*.au3)")
If @error Then Exit

$sRead = StringRegExpReplace(FileRead($sFile), '(?s)(\A|\r?\n)\h*;.*?(\r?\n|$)', '\1\2')

$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $sRead)
FileClose($hFile)


На заметку: удаляет только те комментарий, которые найдены на отдельной строке («$iVar = 1 ;comments» не затронет, для этого нужен алгоритм посложнее).
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Посложнее... Вот так, например?
Код:
$sRead = StringRegExpReplace(FileRead($sFile), '(?s)(\A|\r|\n)(.*?);.*?(\r?\n|$)', '\1\2\3')


\h - это начало страницы?
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
KitRoo_t
http://autoit-script.ru/index.php/topic,8241.msg55655.html#msg55655
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
C2H5OH [?]
Посложнее... Вот так, например?
Нет, это может отрубить часть кода в строковых значениях, например в структурах ($st = 'int;bool'), либо не дорезать комментарий (;коммент ;коммент).

\h - это начало страницы?
А в справку заглянуть?
Это символ горизонтального пробела (включая табуляцию).
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
KitRoo_t
Вот еще плагин к SciTe на LUA. Цепляется на горячую кнопку, работает с кусками скрипта... Удобно.
http://autoit-script.ru/index.php?topic=1836.msg56805#msg56805
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$sFile = FileOpenDialog("", @ScriptDir, "AutoIt v3 Script (*.au3)")
If @error Then Exit

$sRead = StringRegExpReplace(FileRead($sFile), '(?m)^((?:[^''";]*([''"]).*?\2)*[^;]*);.*$', '\1')

$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $sRead)
FileClose($hFile)


Вот так удаляет комментарии и на конце строки кода.
 

veselroger

Новичок
Сообщения
16
Репутация
3
Как вариант самого механизма замены, а $r просто для примера )
Код:
$r="msgbox(0,""test"",""test"") ;Выводим test на экран" & @CRLF & ";Ниже супер мега математическое действие" & @CRLF & "$a=2+3"
msgbox(0,"Было",$r)
$r=StringRegExpReplace($r,";.{1,100}\n",@CRLF) ;Удаляем комментарии
$r=StringRegExpReplace($r,"\r\n\r\n",@CRLF) ;Удаляем лишние пустые строки
msgbox(0,"Стало",$r)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
veselroger [?]
Как вариант самого механизма замены
Это не вариант, т.к комментарий может содержать больше чем 100 символов, и к тому же шаблон неверный, он затрагивает строки когда.
 

veselroger

Новичок
Сообщения
16
Репутация
3
CreatoR, ну просто увеличить предел до 1к. Я сомневаюсь что кто-то вставляет поэмы в 1к символов в 1 строку.

Почему он затрагивает строки кода? Он берёт текст от символа ; и до конца строки. В примере в текстовой переменной 2 ситуации: комментарий в конце строки и комментарий во всю строку. Код ведь не пострадал.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
veselroger [?]
сомневаюсь что кто-то вставляет поэмы в 1к символов в 1 строку
Я тоже, но зачем ограничивать?

Почему он затрагивает строки кода?
Код:
$r="msgbox(0,""test;test"",""test"") ;Выводим test на экран" & @CRLF & ";Ниже супер мега математическое действие" & @CRLF & "$a=2+3"
msgbox(0,"Было",$r)
$r=StringRegExpReplace($r,";.{1,100}\n",@CRLF) ;Удаляем комментарии
$r=StringRegExpReplace($r,"\r\n\r\n",@CRLF) ;Удаляем лишние пустые строки
msgbox(0,"Стало",$r)
 
Верх