2017-07-02 109 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