在C#中一行读取不同的数据类型

时间:2014-12-22 07:09:23

标签: c# file io streamreader

我的文件格式如下:

14 00 1.5121
14 01 1.3922
14 02 1.2231

遵循

的结构
int int double

由空格分隔。

目前我的代码是:

StreamReader file = new StreamReader("file_to_open.txt");
String buff;
while( file.peek() > 0 )
{
    buff = file.ReadLine();
}

但是我仍然坚持如何使用buff自动解析int int double格式。 C#中有一个函数允许我这样做吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

string line = file.ReadLine;
string[] elements = line.Split(' ');

int a = Convert.ToInt32(elements[0]);
int b = Convert.ToInt32(elements[1]);
double c = Convert.ToDouble(elements[2]);

答案 1 :(得分:1)

  

C#中是否有一个允许我这样做的功能?

如果您逐行读取文件并将其拆分为空格,则可以。您可以使用Int32.ParseDouble.Parse方法。

string line;
StreamReader file = new StreamReader("file_to_open.txt");
while((line = file.ReadLine()) != null)
{
    //
}

在此while语句中,您可以拆分和解析您的值,例如;

var array = line.Split(null);
int firstInt = Int32.Parse(array[0]);
int firstInt = Int32.Parse(array[1]);
double firstDouble = Double.Parse(array[2]);

请注意,如果您不提供任何IFormatProvider,此方法默认使用CurrentCulture。如果您的CurrentCulture NumberDecimalSeparator不是.Double.Parse方法会抛出FormatException

但我通常建议使用他们的TryParse方法而不是Parse方法,因为如果解析操作失败,则此TryParse方法返回false而不是抛出异常。

答案 2 :(得分:1)

首先将每个输入行拆分为字段:

string[] fields = buff.Split(' ');
然后

分别解析每个字段:

if(fields.Length < 3) throw...
int i1 = int.Parse(field[0];
int is = int.Parse(field[1];
string s = field[2];

根据文件来源(其内容的可靠性),您应该添加大量错误处理和防御性编程(使用TryParse())