2011-07-25 148 views
0

好吧,我正在製作一個程序,它將從文本文件中讀取數據,將每行轉換爲數組。每剔發送1條線。這是在2010年的Visual Basic。 最近我得到的是一次全部發送,我工作了一整夜,並慢慢地摧毀它。 理想情況下,我想要按鈕1單擊以從LocationTB中的文件填充數組,然後啓動計時器。計時器應該每隔GapTB間隔發送一行。在Visual Basic中迭代文本文件

Public Class Form1 
Public TextLine As String 
Public MyFileName As String 
Public MyNewLine(1000) As String 
Private Property z As Integer 
Private Property objReader As Object 


Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    If RadioButton2.Checked = True Then 
     Dim Textline As String = "" 
     Dim FILE_NAME As String = LocationTB.Text 
     Dim objReader As New System.IO.StreamReader(FILE_NAME) 
     MyFileName = LocationTB.Text 
     FileOpen(1, MyFileName, OpenMode.Input, OpenAccess.Read, OpenShare.Shared) 
     z = 0 

     Do Until EOF(1) 
      MyNewLine(z) = LineInput(1) 
      z = z + 1 
     Loop 

     FileClose(1) 
    End If 

    Timer1.Interval = GapTB.Text 
    Timer1.Enabled = True 

End Sub 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    If RadioButton1.Checked = True Then 
     AppActivate(Hook.Text) 
     SendKeys.Send(SimpleTB.Text) 
     SendKeys.Send((Chr(13))) 

    ElseIf RadioButton2.Checked = True Then 
     For Each 
      TextLine = TextLine & objReader.ReadLine 
      AppActivate(Hook.Text) 
      SendKeys.Send(TextLine) 
      SendKeys.Send((Chr(13))) 
     Next 

    Else 

      MsgBox("File Does Not Exist") 

    End If 


End Sub 
+0

-1,在互聯網上的文本文件操作確實有大量信息可用。 MSDN,Google等會花5秒鐘的時間尋求幫助。另外,你甚至沒有問一個問題,只是給了一些代碼。 – ginman

+0

對不起,我打算問我做錯了什麼,以及是否有更好的方法來解決這個問題。我在很多地方一直在研究這個問題,但我顯然不太明白。如果我完全關閉,那麼我將從頭開始,但如果我離我很近,我正在尋找某人指出我的錯誤並提供任何有用的建議。 – user862074

+0

如果您正在考慮發送垃圾郵件或正在運行應用程序或網站,以至於人類必須閱讀或處理計算機生成的或欺詐性輸出,就好像它是由他人真正寫的一樣,那麼您在學習計算機科學方面就錯了。你需要學習神學。我建議你從地獄和詛咒開始,然後轉向現在生活中神聖報應的概念。祝你的項目好運! – FastAl

回答

2

這是那種你要找的東西嗎? 它會將文件的內容(在本例中爲「C:\ mark.txt」)寫入Visual Studio的輸出窗口。

Public Class Form1 
    Private myTimer As Timer 

    Private lines As String() 
    Private currentLine As Integer 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 

     lines = IO.File.ReadAllLines("C:\mark.txt") 
     currentLine = 0 

     myTimer = New Timer() 

     AddHandler myTimer.Tick, AddressOf myTimer_Tick 

     myTimer.Interval = 1000 
     myTimer.Enabled = True 
    End Sub 

    Private Sub myTimer_Tick(sender As Object, e As EventArgs) 
     If currentLine < lines.Count Then 
      Dim lineToSend As String = lines(currentLine) 
      Debug.Print(lineToSend) 
      currentLine += 1 
     Else 
      myTimer.Enabled = False 
     End If 
    End Sub 
End Class 

買者 上面的代碼是不可擴展的。如果你是確定該文件將永遠是小的然後它會做(說,他們永遠不會小)。

爲了實現這種可擴展性,您需要將文件保持打開狀態,並根據需要讀取每一行,而不是一次加載整個文件內容。

+0

這正是我所期待的。我修改了它以適應我的代碼。它現在一次輸出2行,所以我需要修復它,但它是迭代的。 – user862074

+1

作爲替代方案,您可能需要考慮使用My.Computer.FileSystem.OpenTextFileReader(「C:\ mark.txt」)來獲取StreamReader,然後在mytimer_Tick上調用ReadLine,而不是使用整個文件加載內存。使用流式閱讀器可以擴展到較大的文件大小。 –

+0

@Jim:我完全同意,但是上面的代碼足以讓事情滾動。我會添加一個解釋說明。 –

0

我知道該怎麼做給我自己開始一個應用程序:這是使計算機工作代碼:

Dim ProcID As Integer 
    ' Start the Calculator application, and store the process id. 
    ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus) 
    ' Activate the Calculator application. 
    AppActivate(ProcID) 
    ' Send the keystrokes to the Calculator application. 
    My.Computer.Keyboard.SendKeys("22", True) 
    My.Computer.Keyboard.SendKeys("*", True) 
    My.Computer.Keyboard.SendKeys("44", True) 
    My.Computer.Keyboard.SendKeys("=", True) 
    ' The result is 22 * 44 = 968. 

使用AppActivate應該知道激活形式的確切名稱。如果不知道,重複進程來找到你的。如果標題被正確指定,它應該可以工作