[英]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];
它沒有列出我想要的所有元素。 有人可以在這里闡明一下嗎
邁出第一步,事情變得簡單起來:
您可以通過輸入串線的枚舉:
var lines = input.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
過濾掉不需要的內容:
var validLines = lines.Where(s => !s.StartsWith('!'));
將每條有效行拆分為對象字段,並使用數據構建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.