1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp [Solved] Lấy tất cả tên biến và hàm func có trong file au3

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi minhvnnhut, 11/6/18.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    Như đề bài thì có cách nào lấy được tên biến + tên hàm không các bác :/
    Mình có tìm thử trên google mà hình như code không hoạt động thì phải !
     
  2. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
  3. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    có cách này chỉ lấy phần biến do mình code và loại bỏ các biến mặc định của Autoit như $GUI_SHOW,$ES_PASSWORD,... không bác ?
     
  4. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    cách này là của riêng tớ nha, k biết có tối ưu k nhưng nói chung chạy ổn ^^:
    giờ tớ sẽ code 1 đoạn code để lấy tất cả các biến mặc định trong thư mục Inlcude:

    Mã (AutoIt):
    #include <Array.au3>
    #include <File.au3>

    Local $IncludeFolder = "C:\AutoIt3\Include" ;Thay thư mục Include vào, hoặc google tìm code Get đường dẫn thư mục Include
    Local $TongHopBienConstant
    Local $array_Include = _FileListToArray($IncludeFolder, '*Constants.au3', $FLTA_FILES, True)
    _ArrayDisplay($array_Include, 'Constants Au3')
    For $i = 1 To $array_Include[0]
        $TongHopBienConstant &= FileRead($array_Include[$i]) & @CRLF
    Next
    $TongHopBienConstant = StringRegExp($TongHopBienConstant, "(?i)Global Const (\$\w+)", 3)
    _ArrayDisplay($TongHopBienConstant)
    $TongHopBienConstant = "|" & _ArrayToString($TongHopBienConstant) & "|"
    MsgBox(0, "Tập hợp tất cả biến Constant", $TongHopBienConstant)
    Sau khi đã lấy được các tên biến trong source code và lưu chúng trong 1 mảng, cậu sẽ dùng 1 vòng lặp để kiểm tra tên biến đó có nằm trong $TongHopBienConstant hay k bằng lệnh:

    Mã (AutoIt):
    StringInStr($TongHopBienConstant, "|" & PhầntửChứaTênBiến & "|", 0, 1)
    để lọc bỏ biến mặc định là xong ^^
     
  5. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    Không biết sao đã lọc rồi mà vẫn còn thằng $GUI_EVENT_CLOSE bác ơi o.0 không biết còn biến nào sót nữa ko @@
     
  6. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    cậu ClipPut($TongHopBienConstant) rồi paste vào notepad kiểm tra xem có $GUI_EVENT_CLOSE k. nếu có thì có lẽ do lọc sai chỗ nào r ^^
     
  7. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    tớ mới thử đúng là k có tên biến đó, chắc _FileListToArray thiếu thư viện, tớ coi lại chút đã
     
  8. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    trời, ngoài Contants.au3 còn có ConstantsEx.au3 nữa ^^
     
  9. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    cậu sửa lại thành: _FileListToArray($IncludeFolder, '*Constants*.au3', $FLTA_FILES, True) nha
     
  10. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    Sao mình vẫn ko hiểu cái UDF của Matt cho lắm, mình đã thế vào các kiểu mà nó vẫn trả về lỗi :<
     
  11. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    chiều tớ về tớ quăng cho cậu UDF tớ rút gọn lại của Matt, rất dễ sử dụng
     
  12. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    vâng, mình cảm ơn bác trước ^^
     
  13. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    đây nha
     

    Các file đính kèm:

  14. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    Sao cái UDF của bác mình chạy thì ko biết sao nó cũng hiện 1 số biến mặc định của autoit :(:( $GUI_CHECK_KEY,$GUI_UNCHECKED,$GUI_EVENT_CLOSE,... bác ạ :(
     
  15. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    UDF là để parse source code autoit ra biến, hàm, chuỗi, comment.... chứ đâu liên quan gì việc phân tích nó là biến do cậu viết với biến Global Const trong Include đâu cậu. sau khi parse ra biến cậu phải kết hợp với code mình đăng ở cmt #4 để lọc ra chứ
     
  16. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    nếu cậu còn bối rối thì tham khảo code đã kết hợp này nha, đơn giản mà

    Mã (AutoIt):
    #include <_Lexer_UDF.au3>
    #include <Array.au3>
    #include <File.au3>


    #Region Tổng hợp Global Const
        Local $IncludeFolder = "H:\Programming\AutoIt3\Include" ;Thay thư mục Include vào, hoặc google tìm code Get đường dẫn thư mục Include
        Local $TongHopBienConstant
        Local $array_Include = _FileListToArray($IncludeFolder, '*Constants*.au3', $FLTA_FILES, True)
        ;_ArrayDisplay($array_Include, 'Constants Au3')
        For $i = 1 To $array_Include[0]
            $TongHopBienConstant &= FileRead($array_Include[$i]) & @CRLF
        Next
        $TongHopBienConstant = StringRegExp($TongHopBienConstant, "(?i)Global Const (\$\w+)", 3)
        ;_ArrayDisplay($TongHopBienConstant)
        $TongHopBienConstant = "|" & _ArrayToString($TongHopBienConstant) & "|"
        ;MsgBox(0, "Tập hợp tất cả biến Constant", $TongHopBienConstant)
    #EndRegion


    Local $aFuncs[0]
    Local $aVars[0]
    Local $aString[0]
    Local $aNumbers[0]


    Local $Path_SourceCode = FileOpenDialog("Select au3 file", "", "au3(*.au3)")
    If @error Then Exit

    Local $aTok, $Line_Parsing = 0
    Local $Data_SourceCode = FileRead($Path_SourceCode)
    Local $AutoIt_Lexer = _Ault_CreateLexerFromString($Path_SourceCode, $Data_SourceCode & @CRLF, 0)
    Do
        $aTok = _Ault_LexerStep($AutoIt_Lexer)
        If @error Then Exit MsgBox(16, 'Error: ' & @error, 'Có đoạn source code khiến chương trình không quét được' & @CRLF & 'trong phạm vi dòng thứ ' & ($Line_Parsing + 1))
        ;---------------------------------------------------
        Switch $aTok[$AL_TOKI_TYPE] ;Phân Loại biến-Số-CHuỗi-Hàm....
            Case $AL_TOK_EOL ;Dòng mới
                $Line_Parsing += 1 ;dòng này dùng để debug hoặc đếm số dòng mới

            Case $AL_TOK_KEYWORD ;Keyword

            Case $AL_TOK_MACRO ;Macro

            Case $AL_TOK_FUNC ;Hàm mặc định
             
            Case $AL_TOK_WORD ;Hàm do mình tạo hoặc hàm trong UDF
                _ArrayAdd($aFuncs, $aTok[$AL_TOKI_DATA])

            Case $AL_TOK_STR ;Chuỗi
                _ArrayAdd($aString, $aTok[$AL_TOKI_DATA], 0, ChrW(0x9999)) ;Phải thay đổi $delim của hàm _ArrayAdd thành 1 ký tự thật đặc biệt để không bị lỗi tách chuỗi sai
             
            Case $AL_TOK_VARIABLE ;Biến
                If Not StringInStr($TongHopBienConstant, "|" & $aTok[$AL_TOKI_DATA] & "|", 0, 1) Then _ArrayAdd($aVars, $aTok[$AL_TOKI_DATA])

            Case $AL_TOK_NUMBER ;Số
                _ArrayAdd($aNumbers, $aTok[$AL_TOKI_DATA])

            Case $AL_TOK_COMMENT ;Comment dạng ; hoặc #cs...#ce

            Case $AL_TOK_PREPROC ;Các param # như: #Region, #RequireAdmin, #Au3Stripper_Ignore_Funcs....

        EndSwitch
    Until $aTok[$AL_TOKI_TYPE] = 0 ;$AL_TOK_EOF


    $aFuncs = _ArrayUnique($aFuncs) ;lọc trùng
    $aVars = _ArrayUnique($aVars) ;lọc trùng
    $aNumbers = _ArrayUnique($aNumbers) ;lọc trùng

    _ArrayDisplay($aFuncs, "Tất cả hàm User trong code")
    _ArrayDisplay($aString, "Tất cả Chuỗi trong code")
    _ArrayDisplay($aVars, "Tất cả biến trong code")
    _ArrayDisplay($aNumbers, "Tất cả số trong code")

     
    Để tiết kiệm thời gian chạy code cậu có thể lưu $TongHopBienConstant ra txt, khi chạy code thì chỉ việc đọc file txt (FileRead) chứa tất cả các biến Global Const này thôi cho đỡ nặng code ^^
     
  17. minhvnnhut

    minhvnnhut Thành viên mới
    • 3/6

    Tham gia ngày:
    28/10/16
    Bài viết:
    25
    Đã được thích:
    5
    vâng thanks bác nhiều lắm ! không biết bác có fb ko cho mình xin để học hỏi với ạ ^^
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này

Đang tải...