

フォルダの中に、ファイルを読み込んでから、LISTVIEW を表示したいですが、  
同じ行内の複数のデリミタで文字列の区切があります。  
2016/05/15 21:59:13,739 [7] INFO - Login.User_Aut - o03dx1n Unknown - Login:
KST028

[code]

         Day        2016/05/15
         Time       21:59:13,739
         LogType    [7] INFO
         MethodName Login.User_Aut
         SessionID  o03dx1n Unknown
         LoginID    Login: KST028
    
[/code]

Message  
下に Split にスペースを入りましたが、日付と時間,LogType だけ区切りできました。他のものが全部間違った項目が入りました。  
どうすれば区切りできますか？  
お教えてください。お願いします。

[code]

          'ファイルを読み込む
            OpenFileDialog1.ShowDialog()
            Dim filepath As String = OpenFileDialog1.FileName
            Dim inputstream As New IO.StreamReader(filepath)
            Dim newstr(2) As String
            Dim Day As Integer
            Dim Time As String
            Dim LogType As String
            Dim LoginID As String
            Dim Message As String
            Do While inputstream.Peek <> -1
            '区切り
            newstr = inputstream.ReadLine().Split(" ")
    
            Day = newstr(0)
            Time = newstr(1)
            LogType = newstr(2) & " " & newstr(3)
            LoginID = newstr(6)
            Message = newstr(7)
    
            '選択されたファイルを読み取り
            Me.LogListView.Items.Add(Day)
            Me.LogListView.Items.Item(LogListView.Items.Count - 1).SubItems.Add(Time)
            Me.LogListView.Items.Item(LogListView.Items.Count - 1).SubItems.Add(LogType)    
            Me.LogListView.Items.Item(LogListView.Items.Count - 1).SubItems.Add(Message)
        Loop
    
        inputstream.Close()
    End Sub
    
[/code]


CC BY-SA 3.0
2017-07-03T08:44:04.583
36064
2017-07-06T02:07:24.047
2017-07-06T02:07:24.047
24187
24187
question
vb.net
TextFileの区切り


読み取るファイル形式は、質問の3行目に記述されている下記の形式だと仮定して回答します。

> 2016/05/15 21:59:13,739 [7] INFO - Login.User_Aut - o03dx1n Unknown - Login:
> KST028

`newstr = inputstream.ReadLine().Split("
")`直下に下記のコードを入れると、Splitの結果、配列のインデックスごとに何の値が入っているのかが分かります。

**Splitの結果確認用コード**

[code]

    '区切り
    newstr = inputstream.ReadLine().Split(" ")
    'ここから追加するコード
    Dim sb As New System.Text.StringBuilder
    For i = 0 To newstr.Length - 1
        sb.AppendFormat("{0,2}: {1}", i, newstr(i)).AppendLine()
    Next
    MessageBox.Show(sb.ToString())
    
[/code]

**Splitの結果確認用コード実行結果**

[code]

     0: 2016/05/15
     1: 21:59:13,739
     2: [7]
     3: INFO
     4: -
     5: Login.User_Aut
     6: -
     7: o03dx1n
     8: Unknown
     9: -
    10: Login:
    11: KST028
    
[/code]

上記の実行結果は、例えば`newstr(0)`の値には`2016/05/15`が、`newstr(4)`の値には`-`が入っていることを示します。  
提示されたコードでは`LogType`以降のインデックスがずれてしまっていることが分かります。

半角スペースでSplitするとすべての半角スペースで区切った結果を配列化します。  
そのため`MethodName = newstr(5)`などのようにファイル形式に応じて配列のインデックスを書き換える必要があります。


CC BY-SA 3.0
2017-07-03T09:30:55.580
36067
2017-07-03T09:45:15.020
2017-07-03T09:45:15.020
9820
9820
36064
answer