2017-05-20 13 views
0

テキストファイルを読み込み、「!!!」の文字配列を使用してデータを分割しようとしています。 何かの理由で3でスキップしているので、私はそれに取り組むのに苦労しています。 配列のmd()では、md(0)の適切な文字列を取得していますが、md(1)とmd(2)には内容がありません。しかし、md(3)は分割の第2引数であり、md(6)は分割の第3引数です。 Screenshot of the results and code分割関数が結果をスキップしています。VB.NET

これが呼び出されている全体のサブです:スプリット文字列に複数の文字がある場合

Public Sub recompile() 
    Try 
     ' Open the file using a stream reader. 
     Using sr As New System.IO.StreamReader("C:\Users\Connor\Documents\MovieTheaterPro\MovieData.txt") 
      Dim line As String 
      Dim inThisRow As Integer = 0 
      Dim rows As Integer = 0 
      Dim lineCount = IO.File.ReadAllLines("C:\Users\Connor\Documents\MovieTheaterPro\MovieData.txt").Length 
      For i As Integer = 0 To lineCount - 1 Step 1 
       line = sr.ReadLine() 
       MsgBox(line) 
       Dim md As String() = line.Split("!!!") 
       Dim addTo As String = "" 
       For i2 As Integer = 0 To md.Length - 1 Step 1 
        addTo += "md(" & i2 & "): " & md(i2) & vbNewLine 
       Next 
       MsgBox(addTo) 
       If inThisRow = 6 Then 
        rows += 1 
        inThisRow = 0 
       End If 
       Dim pb As New PictureBox 
       pb.Width = 170 
       pb.Height = 200 
       pb.Top = 172 + (rows * 213) 
       pb.Left = 12 + (227 * inThisRow) 
       pb.SizeMode = PictureBoxSizeMode.StretchImage 
       If (md.Length > 0) Then 
        pb.Image = New System.Drawing.Bitmap(New IO.MemoryStream(New System.Net.WebClient().DownloadData(md(1)))) 
       End If 
       Me.Controls.Add(pb) 
       inThisRow += 1 
      Next 



     End Using 
    Catch e As Exception 
     Console.WriteLine("The file could not be read:") 
     Console.WriteLine(e) 
    End Try 
End Sub 
+0

Split()コールは、あなたが思うように動作しません。 Option Strict Onをソースコードファイルの先頭に置いてコードを練習したいと思うでしょうが、今コンパイラは間違っていることを教えてくれます。代わりにTextFieldParserクラスを使用してください。デバッガを使って練習することもうまくいきますが、それらのMsgBoxコールは苦労して取り組まなければなりません。 –

+0

[String.Split](https://msdn.microsoft.com/en-us/library/tabh47cf(v = vs.110).aspx)の異なるオーバーロードを使用する必要があります。したがって、 'Dim md As String( )= input.Split({"!!!"}、StringSplitOptions.None) '。 –

+0

また、不必要にファイルを2回読み込んでいます。外側の 'For'ループを取り除き、' StreamReader'で 'While'ループを使用してください。 'line = sr.ReadLine()を使用してください。IsNot行中には何もありません。ここにコードの残りの部分End While' –

答えて

0

String.Splitは異なる動作を持っています。代わりにStrings.Splitを使用することができます(VBのみ)。あなたは

Sub Main() 
     Dim input = "a!!!b!!!c!!!d" 
     Dim first() = input.Split("!!!") 
     Dim second() = Strings.Split(input, "!!!") 

     Console.WriteLine(Join(first, "-")) 
     Console.WriteLine(Join(second, "-")) 
     Console.Read() 
End Sub 

出力

--- B --- C --- D

ABCD以下のようにこの2つの機能の違いを見ることができます

Dim md As String() = Strings.Split(line,"!!!") 

全体的には、この型文字列解析操作にregexを使用する方が良いかもしれません。

関連する問題