有時在處理csv檔中的字串時,要將每列的字串Split後,轉成數值陣列要如何處理比較方便呢?
今天看到「Read CSV input from a text file and add integer values in each string read」,可將一組字串轉成int array。如下,
string parseStringList = @"123,456,789,123";
var list = parseStringList.Split(',').Select(int.Parse).ToArray();
但是如果字串中有非int的值,就會發生Exception。如下,
string parseStringList = @"123,456,789.1,123";
var list = parseStringList.Split(',').Select(int.Parse).ToArray();
所以,可以參考「How to convert a list of strings to ints ignoring non integers」,改使用「int.TryParse」來處理。如下,
string parseStringList = @"123,456,789.1,123";
var list2 = parseStringList.Split(',')
.Where(x => { int r; return int.TryParse(x, out r); }).ToArray();
或是抽出成為Extension Method也可以。如下,
public static class StringExtensionMethod
{
public static IEnumerable<int> AsInt(this IEnumerable<string> strings)
{
foreach (var s in strings)
{
int r;
if (int.TryParse(s, out r))
yield return r;
}
}
}
string parseStringList = @"123,456,789.1,123";
var list3 = parseStringList.Split(',').AsInt().ToArray();
參考資料
Read CSV input from a text file and add integer values in each string read
How to convert a list of strings to ints ignoring non integers
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^