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] Giúp em fix code copy từng dòng của file text với

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi kctqn, 1/12/15.

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

    kctqn Thành viên mới
    • 1/6

    Tham gia ngày:
    25/11/15
    Bài viết:
    6
    Đã được thích:
    12
    Em muốn sau khi em ấn coppy lần 1 thì nó coppy dòng 1, sau khi ấn coppy lần 2 thì nó coppy dòng 2,... cho đến hết thì thôi
    Mong các anh giúp em với. em cảm ơn!






    Mã (AutoIt):
    #include <ButtonConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <MsgBoxConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    HotKeySet("{Esc}","_Exit")
    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Coppy", 364, 369, 200, 126)
    $MenuItem1 = GUICtrlCreateMenu("&Tuy Chon")
    $OK = GUICtrlCreateMenuItem("Chon sdt"&@TAB&"Pause", $MenuItem1)
    $MenuItem4 = GUICtrlCreateMenuItem("Thoát", $MenuItem1)
    $Tab1 = GUICtrlCreateTab(0, 0, 353, 313)
    $TabSheet3 = GUICtrlCreateTabItem("aaaa")
    $CoppyID = GUICtrlCreateButton("Coppy sdt", 56, 132, 241, 169)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label1 = GUICtrlCreateLabel("File Location...", 40, 32, 114, 23)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial")
    $Input1 = GUICtrlCreateInput("Chon file", 32, 64, 305, 22)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateTabItem("")
    $stop = GUICtrlCreateButton("Thoát", 184, 312, 169, 33)
    Dim $Form1_1_AccelTable[1][2] = [["{PAUSE}", $OK]]
    GUISetAccelerators($Form1_1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1

        $nMsg = GUIGetMsg()
        Select
        Case $nMsg = $GUI_EVENT_CLOSE
            Exit
          case $nMsg = $OK
            _OK ()
            case $nMsg = $stop
            _Exit ()
        case $nMsg = $CoppyID
            _coppyID ()

    EndSelect
    WEnd
    Func _OK()
        Local Const $sMessage = "chon file txt."
        Global $sFileOpenDialog = FileOpenDialog($sMessage, @AutoItExe & "\", "Text files (*.txt)"  )
           If @error Then
         MsgBox(0, "", "không chon ha")
     Else
            MsgBox(0, "", "Ðã chan file:" & @CRLF & $sFileOpenDialog )
    Global $file = FileOpen($sFileOpenDialog, 0)
    While 1
        $line = FileReadLine($file)
        If @error = -1 Then ExitLoop
    GUICtrlSetData($Input1,$sFileOpenDialog)
    Wend
        EndIf
     EndFunc
    ***************************
     Func _coppyID ()
    Global $Handle = FileOpen($sFileOpenDialog, 0)
         If $Handle = -1 Then
        MsgBox(0x10, 'Error', 'ko the mo file')
         EndIf
        Local $NextLine = FileReadLine($Handle)
        If @Error Then
            MsgBox(0, 'End of File', 'The end of the file has been reached.', 10)
            Done()
        EndIf
        ClipPut ($NextLine)
        TrayTip('Da coppy', $NextLine & @LF & @LF & 'click coppy sdt de coppy tiep' & @LF & 'Esc = Quit', 5, 1)
    EndFunc
    Func Done()
        FileClose($Handle)
    EndFunc
    *****************************
    Func _Exit()
        Exit
     EndFunc
     
    Đây là file text để import vào ạ
    Mã (Text):
    0982199179
    0987265920
    0980094201
    0986634491
    0989624585
    0982994787
    0988731946
    0985140517
    0989282598
    0984809248
    0985429771
    0983277761
    0983651855
    0980947227
    0987607035
    0981395855
    0988102001
    0984191646
    0980480629
    0986163754
    0985706233
    0980657007
    0989802802
    0983398612
    0988354940
    0981506318
    0981507652
    0989331266
    0984049611
    0982173283
     
     
    Chỉnh sửa cuối: 1/12/15
    kamsamita1 and Phan Dong like this.
  2. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    1.muốn random được thì $line = FileReadLine($file) ban dùng mảng để lưu.vd:$line[$i]=FileReadLine($file) $i+=1.nhớ phải khai báo biến $i nữa nhé.sau đó dùng hàm random.random để lấy giá trị bất kỳ trong mảng $line.nói có vẻ hơi dài dòng nhỉ :D
    2.ban vửa mở file vừa readline trong 1 hàm
    $Handle=FileOpen($sFileOpenDialog,0)
    Local$NextLine=FileReadLine($Handle)
    thì dĩ nhiên nó chỉ đọc được dòng đầu tiên,vì vừa đọc xong bạn gọi hàm nó lại quay về điiểm xuất phát có vẻ hơi khó hiểu,:rolleyes:
     
    kamsamita1, Phan Dong and kctqn like this.
  3. kctqn

    kctqn Thành viên mới
    • 1/6

    Tham gia ngày:
    25/11/15
    Bài viết:
    6
    Đã được thích:
    12
    Cảm ơn bác.
    Vậy bây giờ em muốn nó coppy sang dòng tiếp theo thì phải chỉnh như thế nào ạ?
     
    kamsamita1 and Phan Dong like this.
  4. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    có rất nhiều cách :D
    nói thế thôi chứ mình chỉ biết có 2 cách với tình trạng của bạn là
    1.dùng mảng.(cái này mình luôn nghĩ đến đầu tiên khi giải quyết vấn đề kiểu kiểu này)
    bạn đặt 1 biến đếm là $k=0,.khai báo ở ngoài hàm copy nhé.sau bạn đọc cái file text của bạn và lưu vào mảng $mang[$i] chẳng hạn...sau đó cho k tăng dần tương ứng với mỗi lần click copy $k=$k+1.và lấy giá trị copy tương ứng thôi $mang[$k]
    2.nghĩ cách viết code sao cho việc mở file text không nằm trong hàm copy mà vẫn lấy lần lượt đc giá trị.cái này tùy bạn :D
     
    kamsamita1, Phan Dong and kctqn like this.
  5. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    à còn 1 vấn đề.nếu bạn đã cho hiển thị random thì nếu muốn copy theo thứ tự như đã hiển thị trên listctrl thì lại phải lấy giá trị theo list đó.có thể dùng hàm guictrlgetdata() .nói chung có nhiều cách để làm. bạn nên chọn cái nào hợp lý.ít rối sau này dễ tùy biến :)
     
    kamsamita1, Phan Dong and kctqn like this.
  6. kctqn

    kctqn Thành viên mới
    • 1/6

    Tham gia ngày:
    25/11/15
    Bài viết:
    6
    Đã được thích:
    12
    em cảm ơn bác rất nhiều nhưng bác nói em thật sự ko hiểu @@
    cho em hỏi cái code bên dưới thì coppy next dòng đc mà cái code ở #1 lại ko coppy next dòng được ạ?

    Mã (AutoIt):
    HotKeySet("{HOME}","NextLine")
    HotKeySet("{Esc}","_Exit")
    Global $Line=1

    While 1
    Sleep(100)
    WEnd

    Func NextLine()
    $Path = "C:\Users\DinhCongKha\Documents\sdt.txt"
    $File = FileOpen($Path,0)
    $Current = FileReadLine($File,$Line)
    ClipPut($Current)
    TrayTip('Da coppy', $Current & @LF & @LF & 'click coppy sdt de coppy tiep' & @LF & 'Esc = Quit', 5, 1)
    FileClose($File)
    $Line+=1
    EndFunc

    Func _Exit()
        Exit
    EndFunc
     
    kamsamita1 and Phan Dong like this.
  7. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    vấn đề của bạn là chỗ này
    Func NextLine()
    $File=FileOpen($Path,0)
    $Current=FileReadLine($File,$Line)
    .khi bạn bấm nút copy nó sẽ gọi đến hàm Nextline()--->sau đó mở file với câu lệnh $File=FileOpen($Path,0)--> đọc dòng đầu tiên là #1.ok việc copy dòng 1 thành công.tiếp đó bạn muốn copy dòng 2 bạn click nút copy một lần nữa.nó vẫn gọi đến hàm Nextline()-->mở file --> đọc lại dòng 1.bởi vì mỗi 1 lần bạn mở lại file thì nó lại quay về điểm bắt đầu.chứ không tiếp tục đọc tiếp.hiểu chưa? ;) Nó giống như bạn mở cửa bước vào 1 căn phòng (sàn là gạch hoa nhé :D) bước vào và đặt chân lên hàng gạch đầu tiên.xong quay ra.lần sau bạn lại mở cửa bước vào căn phòng mà vẫn tự hỏi sao mình lại vẫn đặt chân ở hàng gạch đầu tiên.mà không phải là thứ 2 :D
     
    kamsamita1, Phan Dong and kctqn like this.
  8. kctqn

    kctqn Thành viên mới
    • 1/6

    Tham gia ngày:
    25/11/15
    Bài viết:
    6
    Đã được thích:
    12
    giờ em muốn bước bước tiếp thì phải sửa ntn ạ, mấy cách trên bác chỉ em thật sự em ko hiểu :(
     
    kamsamita1 and Phan Dong like this.
  9. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    muốn đến được hàng thứ 2,3.. thì có rất nhiều cách,nhảy vọt 1 phát đến nơi chẳng hạn. tóm lại là code thế này
    Mã (AutoIt):

     
    Global $line[100] ; khai bao mang để chứa dữ liệu
    Global $i=0
    Global $k=0
      Func _OK()
        Local Const $sMessage = "chon file txt."
        Global $sFileOpenDialog = FileOpenDialog($sMessage, @AutoItExe & "\", "Text files (*.txt)"  )
        ConsoleWrite($sFileOpenDialog)
           If @error Then
         MsgBox(0, "", "không chon ha")
    Else
            MsgBox(0, "", "Ðã chan file:" & @CRLF & $sFileOpenDialog )
    Global $file = FileOpen($sFileOpenDialog, 0)
    While 1
        $line[$i] = FileReadLine($file)
        $i=$i+1
        If @error = -1 Then ExitLoop
    GUICtrlSetData($Input1,$sFileOpenDialog)
    Wend
        EndIf
    EndFunc
    ***************************
    Func _coppyID ()
        ClipPut ($line[$k])
        TrayTip('Da coppy', $line[$k] & @LF & @LF & 'click coppy sdt de coppy tiep' & @LF & 'Esc = Quit', 5)
        $k=$k+1
    EndFunc
    mình sửa 1 chút ở hàm copy và hàm ok của bạn. công thêm khai báo 3 biến $line[100],$k,$i . đơn giản phải không :D
     
    kamsamita1 and Phan Dong like this.
  10. kctqn

    kctqn Thành viên mới
    • 1/6

    Tham gia ngày:
    25/11/15
    Bài viết:
    6
    Đã được thích:
    12
    mình chạy thử nó báo lỗi ở đây bác ơi
    Mã (AutoIt):
    $line[$i] = FileReadLine($file)
     
    kamsamita1 and Phan Dong like this.
  11. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    loi gi vay.ban khai bao bien $line[] chua
     
    kamsamita1 and Phan Dong like this.
  12. kctqn

    kctqn Thành viên mới
    • 1/6

    Tham gia ngày:
    25/11/15
    Bài viết:
    6
    Đã được thích:
    12
    [​IMG]
    bác cường ơi lỗi ở dòng 67 ý bác fix giúp em với
     
    kamsamita1 and Phan Dong like this.
  13. cuong

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

    Tham gia ngày:
    25/11/15
    Bài viết:
    13
    Đã được thích:
    30
    ẹc.khi khai báo biến bạn phải khai báo trước vòng lặp while ( hiển thị gui) bạn khai báo sau thì nó đâu có nhận biến.Như mình viết là do viết tóm tắt .bạn lại bê nguyên vào mà k để ý thứ tự.khai báo biến .đưa lên trên vòng lặp while
    Mã (AutoIt):

    Global $line[100]; khai bao mang để chứa dữ liệu
    Global $i=0
    Global $k=0
    While 1
        $nMsg = GUIGetMsg()
        Select
        Case $nMsg = $GUI_EVENT_CLOSE
            Exit
          case $nMsg = $OK
            _OK ()
            case $nMsg = $stop
            _Exit ()
        case $nMsg = $CoppyID
            _coppyID ()
    EndSelect
     
    kamsamita1 and Phan Dong like this.
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này

Đang tải...