【问题标题】:How to delimiter text file如何分隔文本文件
【发布时间】:2017-06-30 02:08:10
【问题描述】:

在我的应用程序中,我需要读取 vb.net 中的分隔文本文件

2016/05/15 21:59:13,739 [7] 信息 - Login.User_Aut - o03dx1n 未知 - 登录:KST028

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

这是我目前的代码。

        OpenFileDialog1.ShowDialog()
        Dim filepath As String = OpenFileDialog1.FileName
        Dim inputstream As New IO.StreamReader(filepath)
        Dim newstr() As String
        Dim Day As String
        Dim Time As String
        Dim LogType As String
        Dim MethodName As String
        Dim SessionID 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)
            MethodName = newstr(3)
            SessionID = newstr(4)
            LoginID = newstr(5)
            Message = newstr(6)


            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(MethodName)
            Me.LogListView.Items.Item(LogListView.Items.Count - 1).SubItems.Add(SessionID)
            Me.LogListView.Items.Item(LogListView.Items.Count - 1).SubItems.Add(LoginID)
            Me.LogListView.Items.Item(LogListView.Items.Count - 1).SubItems.Add(Message)
        Loop

        inputstream.Close()
    End Sub

这段代码是错误的,因为: 日期和时间正确,但 logtype、session id、loginid、message of columns 错误

【问题讨论】:

  • 不应该 LogType = newstr(2)LogType = newstr(2) &amp; " " &amp; newstr(3) 吗?然后应该相应地调整(和连接)其他字段。
  • 我当然希望它是制表符分隔符而不是空格。如果它是一个空格,那么唯一可行的方法是所有字段都具有固定宽度。我怀疑这就是你所拥有的。在这种情况下,您需要根据字符数进行阅读。
  • 没有合格的开发人员会在没有限定符的情况下使用空格作为分隔符。这必须是固定宽度。
  • 谢谢,但 logtype 只是固定的
  • 我认为您想在连字符 ("-"c) 上拆分,您仍然需要对第一部分进行子字符串化,但这应该相对简单,因为您可以将日期子字符串化并拆分其余部分那个在冒号上

标签: vb.net file delimiter


【解决方案1】:

以下是我如何使用连字符作为分隔符来分解它。通过这样做,您将收到 4 个部分(如果包含消息并用连字符分隔,则为 5 个) 数组的第 0 个元素包含直到第一个连字符的所有内容,需要分解以分别使用它的每个部分。我已经对代码进行了注释,它应该可以帮助您更好地理解每个部分在做什么。

    'these would need adjusted to fit your stream
    Dim inputstream As String = "2016/05/15 21:59:13,739 [7] INFO - Login.User_Aut - o03dx1n Unknown - Login: KST028"
    'this produces an array of 4 elements 
    Dim parts() As String = inputstream.Split("-"c)
    'element 0 of the array needs to be broken down into its
    'proper substrings
    Day = parts(0).Substring(0, 10).Trim
    Time = parts(0).Substring(12, parts(0).IndexOf("[") - 12).Trim
    LogType = parts(0).Substring(parts(0).IndexOf("[") - 1).Trim
    'these 3 elements of the array are retrieved fromt the split on the delimiter
    MethodName = parts(1).Trim
    SessionID = parts(2).Trim
    LoginID = parts(3).Trim
    'display in console window. Here you would assign these variables to 
    'your listview instead.
    Debug.Print(String.Format("Day={0}{7}Time={1}{7}LogType={2}{7}Method={3}{7}Session={4}{7}Login={5}{7}Message={6}", Day, Time, LogType, MethodName, SessionID, LoginID, Message, Environment.NewLine))
End Sub

同样,这并不能真正处理 Message,因为您的字符串不包含一个,但从这里您应该能够弄清楚如何管理它。我不确定 message 是来自字符串还是稍后输入的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2019-08-06
    • 2020-05-15
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多