簡體   English   中英

將制表符分隔數據的字符串轉換為C#中的對象列表

[英]Convert string of tab seperated data into list of objects in C#

我在C#中的輸入字符串下面轉換時遇到困難。 如您所見,輸入字符串分別位於換行符\\ r \\ n中。 一行中的每個輸入數據都用\\ t分隔

我需要刪除以“!”開頭的行

!710889\tF\t3400\r\n
BY\tF\t5000\r\n
G1\tC\t600\r\n

所以有效的輸入文件將是

BY\tF\t5000\r\n
G1\tC\t600\r\n

我需要將其轉換為以下內容

Object {Info: Array[3]}
 > Info: Array[3]
 >[0]: Object
       id: 'BY'
       type: 'F'
       value: 3400
 >[1]: Object
       id: 'G1'
       type: 'C'
       value: 600

嘗試了以下操作,但未成功

 string[] values = str.Split("\t".ToCharArray());
 // ... do something with "values" ...
 xxx.aaa = values[0];
 xxx.bbb = values[1];
 xxx.ccc = values[2];

它沒有列出我想要的所有元素。 有人可以在這里闡明一下嗎

邁出第一步,事情變得簡單起來:

  1. 您可以通過輸入串的枚舉:

     var lines = input.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 
  2. 過濾掉不需要的內容:

     var validLines = lines.Where(s => !s.StartsWith('!')); 
  3. 將每條有效行拆分為對象字段,並使用數據構建ValueTuple

     foreach (var line in validLines) { var fields = line.Split('\\t'); yield return ( fields[0], fields[1], int.Parse(fields[2]) }; } 

注意我已經使用了C#7本機元組支持。 如果您不使用C#7,則必須稍微更改代碼。 無論如何,將所有內容放在一起:

static IEnumerable<(string Id, string Type, int Value)>
    ParseData(string input)
{
    var lines = input.Split(new[] { Environment.NewLine },
                            StringSplitOptions.RemoveEmptyEntries);
    var validLines = lines.Where(s => !s.StartsWith('!'));

    foreach (var line in validLines)
    {
        var fields = line.Split('\t');
        yield return ( fields[0],
                       fields[1],
                       int.Parse(fields[2]));
    }
}

我顯然已經省略了任何錯誤檢查或數據驗證。 我將留給您,但是上面的代碼中有很多事情可能出錯:字段計數不是3,解析field[2]失敗,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM