Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Удаление комментариев из кода

45K
18 апреля 2011 года
dab00
39 / / 24.09.2009
Здравствуйте, уважаемые форумчане!
Представляю вашему вниманию скрипт для удаления комментариев - апострофа (символа " ' "), пробелов, табуляций из файлов исходного кода на VB.
Скрипт создает новый файл с префиксом "New-". Работает в графическом и консольном режиме. Использует регулярные выражения, поэтому довольно шустрый.
Скачать можно здесь: http://da440dil.narod.ru/download.html
2.1K
18 апреля 2011 года
Norgat
452 / / 12.08.2009
Цитата: dab00
Здравствуйте, уважаемые форумчане!
Представляю вашему вниманию скрипт для удаления комментариев - апострофа (символа " ' "), пробелов, табуляций из файлов исходного кода на VB.
Скрипт создает новый файл с префиксом "New-". Работает в графическом и консольном режиме. Использует регулярные выражения, поэтому довольно шустрый.
Скачать можно здесь: http://da440dil.narod.ru/download.html



Можно вопрос? А нафига? Чтобы когда сваливаешь с текущего места работы - превращать все исходники в жуткое месиво?))

45K
18 апреля 2011 года
dab00
39 / / 24.09.2009
Цитата: Norgat
Чтобы когда сваливаешь с текущего места работы - превращать все исходники в жуткое месиво?))


И для этого тоже, почему нет? ;)
Регулярные выражения - сила :) Файл: [ATTACH]5062[/ATTACH]

Код:
Option Explicit
On Error Resume Next
Dim mesaga 'сообщение
Dim res 'значение, возвращаемое функцией
'проверяем аргументы
If WScript.Arguments.Count = 0 Then'если нет аргументов
    mesaga = InputBox("Пожалуйста, введите имя файла", "Удаление комментариев","")
    If mesaga <> "" Then
        res = RemComm(mesaga)
    Else: WScript.Quit
    End If 
Else: res = RemComm(WScript.Arguments(0))  
End If
ResChk(res) 'вызываем процедуру проверки
'проверка на ошибки
Sub ResChk(res)
    If res = True Then
        MsgBox "Удаление комментариев завершено",vbInformation
    Else: MsgBox "В процессе удаления произошла ошибка",vbExclamation
    End If
End Sub
Function RemComm(fName)
    Dim replPatrn 'щаблон для замены комментов для RexExp
    Dim codeFileName 'имя файла с кодом для удаления комментов
    Dim codeFilePath 'полный путь к файлу с кодом - должен быть в том же каталоге
    Dim codeFilePathNew 'полное имя нового файла (с префиксом)
    Dim codeFile 'файл с кодом
    Dim codeFileNew 'новый файл
    Dim i 'счетчик
    Dim strArr() 'массив для файла с кодом
    Dim wshShell 'оболочка
    Dim fso 'файловая система
    Dim regEx ' переменная для RegExp
    Const newNamePref = "New-" 'префикс нового файла
    replPatrn = "'[^" & Chr(34) & "]*$|\t" 'собираем шаблон - комменты или символы табуляции
    codeFileName = fName
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    codeFilePath = wshShell.CurrentDirectory & "\" & codeFileName
    codeFilePathNew = wshShell.CurrentDirectory & "\" & newNamePref & codeFileName
    Set codeFile = fso.OpenTextFile(codeFilePath,1) 'открываем файл для чтения
        i = 0
        Do While codeFile.AtEndOfStream <> True 'читаем файл до конца
            ReDim Preserve strArr(i) 'перебиваем размерность массива       
            strArr(i) = Trim(codeFile.ReadLine) 'закидываем строки в массив, удаляем пробелы
            i = i + 1      
        Loop
        codeFile.Close
        Set codeFileNew = fso.CreateTextFile(codeFilePathNew,True) 'создаем файл, если существует - заменим      
        Set regEx = New RegExp 'создаем регулярное выражение.
        With regEx
            .Pattern = replPatrn 'определяем шаблон
            .Global = True   'устанавливаем глобальность применения
            .IgnoreCase = True  'устанавливаем нечувствительность к регистру
        End With       
        For i = 0 To UBound(strArr)
            strArr(i) = regEx.Replace(strArr(i),"") 'удаляем комменты
            If strArr(i) <> vbNullString Then codeFileNew.WriteLine strArr(i) 'пишем в файл, пропускаем пустые строки      
        Next
        codeFileNew.Close
    Set regEx = Nothing
    Set codeFileNew = Nothing
    Set codeFile = Nothing
    Set fso = Nothing  
    Set wshShell = Nothing
    If err = 0 Then
        RemComm = True
    Else: RemComm = False
    End If
End Function
45K
10 августа 2011 года
dab00
39 / / 24.09.2009
- скрипт для удаления комментариев из файлов исходного кода VB: апострофов, rem, пробелов, табуляций
- работает в графическом и консольном режиме (на случай отсутствия библиотеки, необходимой для вызова диалогового окна)
- в графическом режиме предлагает выбрать файлы в диалоге
- в консольном режиме принимает в качестве аргументов полные, относительные пути или только имена файлов
- создает новые файлы с префиксом "New-"
- в завершение работы отображает сообщение с отчетом об удалении комментариев из каждого файла
- подробно закомментирован, при желании разберутся все :)
316
10 августа 2011 года
Alm3n
889 / / 29.05.2009
допили тогда что ли, чтобы и из C/PHP/Perl/Pyton удалялись. несложно же.
45K
10 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: Alm3n
допили тогда что ли, чтобы и из C/PHP/Perl/Pyton удалялись. несложно же.


Непросто. В лучшем случае придется выбирать язык при запуске. Для себя скрипт писал, C/PHP и пр. не моя тема.
В следующей реинкарнации возможно реализую переименование явно объявленных переменных. В мясо :)
Такой вот VB-обфускатор получается :)

316
10 августа 2011 года
Alm3n
889 / / 29.05.2009
Цитата:
В лучшем случае придется выбирать язык при запуске


в лучшем случае его выбирать не придется. но я только предложил.

45K
10 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: Alm3n
в лучшем случае его выбирать не придется. но я только предложил.


Я имел в виду различия в синтаксисе. Лучше при запуске скрипта выбирать, по расширению по-моему не совсем правильно.
Кроме того, допилить для других языков не готов, не плаваю в них.

316
11 августа 2011 года
Alm3n
889 / / 29.05.2009
Цитата:
по расширению по-моему не совсем правильно.


по-моему - тоже, поэтому можно еще определять по ключевым словам уникальным для языка. поддерживаю дискуссию.

45K
11 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: Alm3n
можно еще определять по ключевым словам уникальным для языка.


Можно, но для этого нужно быть хорошо знакомым с целевым языком. Поясню на примере настоящего скрипта.
Сналача, когда деревья были большими :), удалял все после апострофа. Потом напрягся на подобном коде:

 
Код:
wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" _
        & DevID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition")

Косяк очевиден. Решил вопрос через RegEx, вроде неплохо.
А сколько подобных подводных камней в других языках?
316
11 августа 2011 года
Alm3n
889 / / 29.05.2009
мне думалось, что твоя програ удаляет коментарии\табуляции\rem. вот зачем удалять пробелы - я не понял. :)
RegEx - это класс или просто "регулярные выражения"? и как сама среда воспринимает такой код?
Алсо, писал лексический парсер для .doc на VBA. деревьев и регулярок использовать не пришлось. что за хитрая система там у тебя?
45K
11 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: Alm3n
зачем удалять пробелы - я не понял. :)


чтобы ровнее было :), некоторые вместо табуляции пробелы могут использовать

Цитата: Alm3n
RegEx - это класс или просто "регулярные выражения"? и как сама среда воспринимает такой код?


просто "регулярные выражения", объект, экземпляр класса RegExp, про среду не понял - все работает

Цитата: Alm3n
что за хитрая система там у тебя?


ничего хитрого, быстрее работает, вся "хитрость" в этой строке:

 
Код:
strReplPatrn = "'[^" & Chr(34) & "]*$|\t|\brem\b.*$|^\s+|\s+$"
277
11 августа 2011 года
arrjj
1.7K / / 26.01.2011
Тыб лучше вместо удаления пробелов сделал полное форматирование кода
45K
11 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: arrjj
Тыб лучше вместо удаления пробелов сделал полное форматирование кода


не понял, что Вы имели в виду под "форматированием кода"
а чем пробелы не угодили? они же в начале и в конце строки удаляются, код живой остается

277
11 августа 2011 года
arrjj
1.7K / / 26.01.2011
Ну вместо
Код:
Option Explicit
Dim strPrice As String


Dim strYear As String

' this button just spits out a count of how many records the latest dyno query returned
            Private Sub Command1_Click()
MsgBox Adodc1.Recordset.RecordCount, vbOKOnly, "# of Records Returned"
         End Sub

' this button will step through the records one by one and save their ids in a string,
' which is then displayed in a message box.
Private Sub Command2_Click()
Dim duh As String
   


duh = ""

With Adodc1.Recordset
        ' move to the first record, top o' the list
        .MoveFirst
While Not .EOF  ' this saves the value in the ID field of the current record.  Hint: you can
            ' do the same thing for any other column in the db / record / whatever
            ' (so .Recordset!YearBuilt would return that number for the current record)
            duh = duh & " " & !ID
 .MoveNext
Wend
    End With
   
    MsgBox duh, vbOKOnly, "IDs of Records Returned"
                   End Sub

было
Код:
Option Explicit

Dim strPrice As String
Dim strYear As String

Private Sub Command1_Click()
    MsgBox Adodc1.Recordset.RecordCount, vbOKOnly, "# of Records Returned"
End Sub

Private Sub Command2_Click()
    Dim duh As String
    duh = ""
    With Adodc1.Recordset
        .MoveFirst
        While Not .EOF
            duh = duh & " " & !ID
            .MoveNext
        Wend
    End With
    MsgBox duh, vbOKOnly, "IDs of Records Returned"
End Sub


Т.е. отступы грамотно расставляло.
45K
11 августа 2011 года
dab00
39 / / 24.09.2009
Этим скриптом я решал обратную задачу :)
45K
19 августа 2011 года
dab00
39 / / 24.09.2009
Представляю VBS-скрипт для преображения кода VB. For developers only :)
Возможности:
- удаление комментариев, пробелов, табуляций, переноса строк
- переименование функций, процедур, классов, свойств, методов, явно объявленных переменных, констант (только VBS)
В графическом режиме позволяет выбрать несколько файлов.
В консольном режиме принимает в качестве аргументов абсолютные, относительные пути или только имена файлов.
От рисования интерфейса отказался. Наверняка разработчикам красота ни к чему.
В секции объявления переменных можно изменить:
- максимальную длину нового случайного имени в символах
- процент символов алфавита в новом случайном имени
- необходимость переименования переменных и пр.
- необходимость создания файла журнала переименования
- префикс нового имени файла
- суффикс имени файла лога
Скрипт создает в каталоге с файлом исходного кода новый файл с указанным префиксом, а также, в случае необходимости, CSV-файл с отчетом о переименованных переменных и пр., в завершение работы отображает сообщение с отчетом о результате работы с каждым файлом.
Более 10000 символов нельзя, поэтому кому интересно - качаем здесь или смотрим вложение.
Так выглядит скрипт после обработки собственного исходного кода.
Исходный код можно посмотреть здесь или здесь.
Удачи разработчикам :)
45K
20 августа 2011 года
dab00
39 / / 24.09.2009
Добавил новую фичу - трансформацию символов.
Делает код еще более нечитабельным, но значительно увеличивает размер файла.
Во вложении - оба варианта скрипта - с кодом до трансформации и после.
7
20 августа 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: dab00
Делает код еще более нечитабельным, но значительно увеличивает размер файла

Не понял,и в чём тут плюс?Ни код читабельнее не станет,ни файл меньше…

278
20 августа 2011 года
Alexander92
1.1K / / 04.08.2008
Обфускацию сделал, что ли?
327
20 августа 2011 года
UserNet2008
748 / / 03.04.2010
Это точно обфускацию кода !!!

только вопрос , а как потом работать с этим кодом и будет код вообще работать после обфускации
45K
21 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: Alexander92
Обфускацию сделал, что ли?


Похоже да.

Цитата: UserNet2008

только вопрос , а как потом работать с этим кодом и будет код вообще работать после обфускации


Код работать будет, а работать с этим кодом ни к чему. Автору не мешало бы исходники оставлять себе, и работать с ними :).
Кстати, когда искал что-то похожее, нашел вот это, был потрясен - просят 279 бакинских :).

Цитата: @pixo $oft
Не понял,и в чём тут плюс?Ни код читабельнее не станет,ни файл меньше…


Если просто удалить комментарии - Const bStir = False, Const bTransChr = False - файл станет меньше.

278
21 августа 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: UserNet2008
только вопрос , а как потом работать с этим кодом и будет код вообще работать после обфускации


Ну если ТС нормально сделал - то будет работать, разумеется. :) Единственное - не знаю, насколько это нужно было в принципе, обфускация чаще применяется для скриптовых языков с открытым кодом, типа PHP или JS. Какой смысл это делать для VB?

45K
21 августа 2011 года
dab00
39 / / 24.09.2009
Цитата: Alexander92
не знаю, насколько это нужно было в принципе, обфускация чаще применяется для скриптовых языков с открытым кодом, типа PHP или JS. Какой смысл это делать для VB?


Я делал это для VBS.

327
27 августа 2011 года
UserNet2008
748 / / 03.04.2010
Посмотрел вашу ссылку полный развод для тупых "ХауМачей"

Вы работали с IDA(+ пару троек прог) так они пробивает всЁ и всЯ. А всё остальное для просТых пользователей КП, типа умею вкл/выкл. 256 bit ключи , RAR с паролем если очень надо за больЩое бабло ломают.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог