2011-07-25 5 views
0

私はテキストファイルから読み込み、各行を配列に変換するプログラムを作っています。 1行につき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 

警告 上記のコードは、スケーラブルではありません。 SUREの場合、ファイルは常に小さくなります(つまり、彼らはということはありません)。です。

これをスケーラブルにするには、ファイルを開いたままにして、必要に応じて各行を読み込み、ファイルの内容全体を一度に読み込む必要があります。

+0

これはまさに私が探していたものです。私はそれを自分のコードに合わせるように修正しました。一度に2行ずつ出力するので、それを修正する必要がありますが、繰り返しています。 – user862074

+1

代わりに、My.Computer.FileSystem.OpenTextFileReader( "C:\ mark.txt")を使用してStreamReaderを取得し、次にmytimer_Tickを使用して、ファイル全体をメモリにロードするのではなくReadLineを呼び出すことを検討することもできます。ストリームリーダーを使用すると、これを大きなファイルサイズに拡大することができます。 –

+0

@ジム:私は完全に同意しますが、上記のコードは物事が回転するのに十分なものです。私は説明のメモを追加します。 –

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のは、アクティブにするために、フォームの正確なタイトルを知っている必要があります。知られていない場合は、プロセスを繰り返し実行して自分の場所を特定します。タイトルが正しく指定されていれば、それはうまくいくはずです