2015-10-17 52 views
0

如果我的txt文件包含类似的行这些:阅读TXT文件转换成一个元组

1.1, 0.1836856, 5.6 
3.3, -5.5, 43.44 
-0.38162, 6.636666E-08, 3.1 
1.01516E-07, 0.3695395, 1.5 

怎样才能文件读入到一个元组?

var reader = new StreamReader(File.OpenRead(@"C:\MyFile.txt")); 

while (!reader.EndOfStream) 
{ 
    var line = reader.ReadLine(); 
    var values = line.Split(','); 

    var val1 = decimal.Parse(values[0], System.Globalization.NumberStyles.Float); 
    var val2 = decimal.Parse(values[1], System.Globalization.NumberStyles.Float); 
    var val3 = values[2]; 

    Tuple<decimal, decimal, string> myTuple = Tuple.Create<decimal, decimal, string>(val1, val2, val3); 
} 
+1

看起来你已经知道了。还剩下什么?你想将每个元组添加到列表中吗? –

+1

关闭主题,但您应该在循环结束后处置您的阅读器。考虑使用'使用'关键字 –

+0

我会摆脱您的文本文件中的空格或修剪您的字符串值。目前val3 =“5.6”。 – Aetherix

回答

5

你基本上没有..只是每个元组添加到列表中,使他们不会失去每一次迭代结束时。

定义一个列表,外部和while循环之前:

var results = new List<Tuple<decimal, decimal, string>>(); 

然后添加循环内的每个新的记录实例:

results.Add(Tuple.Create(val1, val2, val3)); 

你也可以考虑与File.ReadLines()更换File.OpenRead()。它打开你的文件,读取所有行,并关闭它,一次性。


这里的东西看起来与你所拥有的完全不同......只是把它扔到那里。它是否更清晰取决于你。它使用LINQ。

它读取文件,然后拆分并为每行创建一个Tuple,生成相同的List。

var results = (from line in File.ReadLines(@"C:\MyFile.txt") 
       let values = line.Split(',') 
       select Tuple.Create(decimal.Parse(values[0], NumberStyles.Float), 
            decimal.Parse(values[1], NumberStyles.Float), 
            values[2])).ToList(); 
+0

非常感谢您的帮助和示例。 – Walid

+0

不客气@Walid。 –