2017-07-02 30 views
0

我使用代碼從txt文件這樣寫行我如何完全讀取logserver文件?

2017-07-01 22:12:59 0 0 0 2 2 0 0 0 0 Mads Sarag   hello iam Sarag 
2017-07-01 22:13:05 0 0 3 2 4 0 0 0 0 Mads Sarag   hello iam Sarag 

但在數據gridview的最後一欄顯示一個字符串

enter image description here

代碼

class ReadPublicChat 
{ 
    public string date { get; set; } 
    public string time { get; set; } 
    public Int64 unk1 { get; set; } 
    public Int64 unk2 { get; set; } 
    public Int64 unk3 { get; set; } 
    public Int64 unk4 { get; set; } 
    public Int64 unk5 { get; set; } 
    public Int64 unk6 { get; set; } 
    public Int64 unk7 { get; set; } 
    public Int64 unk8 { get; set; } 
    public Int64 unk9 { get; set; } 
    public string AccName { get; set; } 
    public string CharName { get; set; } 
    public string Message { get; set; } 
    public static List<ReadPublicChat> LoadPublicChat(string path) 
    { 
     var PublicChat = new List<ReadPublicChat>(); 
     foreach (var line in File.ReadAllLines(path)) 
     { 
      string[] Columns = line.Split(new Char[] { ' ', '\t'}, StringSplitOptions.RemoveEmptyEntries); 
      if (line.Length > 0) 
      { 
       if (Convert.ToInt64(Columns[9]) == 0) 
       { 
        PublicChat.Add(new ReadPublicChat 
        { 
         date = Columns[0], 
         time = Columns[1], 
         unk1 = Convert.ToInt64(Columns[2]), 
         unk2 = Convert.ToInt64(Columns[3]), 
         unk3 = Convert.ToInt64(Columns[4]), 
         unk4 = Convert.ToInt64(Columns[5]), 
         unk5 = Convert.ToInt64(Columns[6]), 
         unk6 = Convert.ToInt64(Columns[7]), 
         unk7 = Convert.ToInt64(Columns[8]), 
         unk8 = Convert.ToInt64(Columns[9]), 
         unk9 = Convert.ToInt64(Columns[10]), 
         AccName = Columns[11], 
         CharName = Columns[12], 
         Message = Columns[13] 

         }); 
        } 
       } 
      } 
     return PublicChat; 
    } 
} 

我需要有人編輯此代碼以讀取文件

請幫助完成該操作

回答

1

另外一個解決方案snixtho的答案是使用ArraySegment切片columns陣列然後用String.Join加盟項目,即

Message = Columns.Length <= 13 ? "" : 
    String.Join(" ", new ArraySegment<string>(Columns, 13, Columns.Length - 13)); 
+0

感謝它的工作 – GameTech

1

由於您正在按空格和製表符進行拆分,因此日誌行中的最後一列「列」也將被拆分爲多個部分。因此,Columns[13]將包含第一個單詞,Columns[14]將包含下一個單詞等。

只需循環,直到索引13的Columns數組結尾,然後用空格連接所有部分。

實施例:

string message = ""; 
for (int i = 13; i < Columns.Length; i++) { 
    message += Columns[i] + (i+1 == Columns.length ? "" : " "); 
} 

Ofcourse,這是假設信息是永遠不會是空的。如果它們可以是空的,你應該首先檢查。

+0

非常感謝你的評論,並幫助 – GameTech