2017-03-27 8 views
0

私はバーチャルピアノ用のデコーダを作成したいと思っています。これは、ここからの音楽(http://virtualpiano.net/category/music-sheets/)を自動ホットキーのスクリプトに変換します。しかし、私は 例 はそれのように出てくるはずです私は入力した場合VB.Net内でブラケットを見つける

G OU [pTを] [OT]、ノートが同時に再生されなければならないときを検出して問題に

を実行しました

Send G 
Sleep, 100 
Sleep, 100 
Send o 
Sleep, 100 
Send u 
Sleep, 100 
Sleep, 100 
Send p 
Send T 
Sleep, 100 
Send O 
Send T 
Sleep, 100 

しかし、それは私が「[」で、「]」その後、をそれとの間には、テキストを変更する場所を検索したい

Send G 
Sleep, 100 
Sleep, 100 
Send o 
Sleep, 100 
Send u 
Sleep, 100 
Sleep, 100 
Send p 
Sleep, 100 
Send T 
Sleep, 100 
Send O 
Sleep, 100 
Send T 
Sleep, 100 

として出てきます私はそれを彼女に出しました

start = TextBox1.Text 
    Arraycounter = 0 
    Do Until -1 = start.IndexOf("[") 
     Front = start.IndexOf("[") 
     Back = start.IndexOf("]") 
     counter = Front 
     Do Until counter = Back + 1 
      Middle = Middle & start(counter) 
      counter += 1 
     Loop 
     counter = 0 
     MsgBox(Front & " - " & Back & " - " & Middle) 
     start = Replace(start, Middle, SymbleArray(Arraycounter)) 
     Middle = Replace(Middle, "[", "") 
     Middle = Replace(Middle, "]", "") 
     Do Until counter = Middle.Length 
      outp = outp & Replace(Middle(counter), Middle(counter), "SEND " & Middle(counter) & vbNewLine) 
      counter += 1 
     Loop 
     MsgBox(outp) 
     BraketArray(Arraycounter) = outp 
     Arraycounter += 1 
     Middle = "" 
     outp = "" 
    Loop 
     Arraycounter = 0 
    Do Until Arraycounter = 11 
     start = Replace(start, SymbleArray(Arraycounter), BraketArray(Arraycounter)) 
     Arraycounter += 1 
    Loop 
    TextBox2.Text = start 
End Sub 
+0

私はあなたが私の完全なコードは、ちょうど –

+0

郵便あなたのコードを聞いて見たい場合、私は、ものを入力する時に神じゃないと明確にする必要があれば教えてください。 – Han

+0

私はあなたが置換機能を使用する代わりに各文字を処理する必要があると思います。 – Han

答えて

0

私はあなたのコードを簡素化しようとしています。このコードを空のコンソールプロジェクトに入れてください。または、WinFormを使用する場合は、Console.WriteLine( "some string")をテキストボックスに変更します。 Textbox2.Text = "いくつかの文字列"。

Dim input = "G ou [pT][OT]" 

Dim foundBracket As Boolean 

For Each c In input 
    Select Case c 
     Case " " 
      Console.WriteLine("Sleep, 200") 
     Case "[" 
      foundBracket = True 
     Case "]" 
      Console.WriteLine("Sleep, 100") 
      foundBracket = False 
     Case Else 
      Console.WriteLine("Send {0}", c) 
      If Not foundBracket Then Console.WriteLine("Sleep, 100") 
    End Select 
Next 

予想される結果と一致するように[]の間のスペースを削除しました。私はまた、睡眠、200のスペースを使用します。いくつかの特別なシンボルを扱う必要がある場合は、単にcaseステートメントに追加してください。コードの

結果:

Send G 
Sleep, 100 
Sleep, 200 
Send o 
Sleep, 100 
Send u 
Sleep, 100 
Sleep, 200 
Send p 
Send T 
Sleep, 100 
Send O 
Send T 
Sleep, 100 
+0

welp thatsコードを短くする方法はありますか?私はちょうどそれを自分自身だと思っていますが、ダムは短く、これは私ができることです。私は既に1つの質問 –

+0

と持っているので、私は通常のフォームでこれを使用すると思いますか?私はちょっと残念だよ。 –

+0

winform?入力テキストボックスから入力を設定し、私の答えに書いたように、Console.WriteLineをテキストボックスに変更します。 – Han

関連する問題