从文件中读取错误c#

时间:2017-03-10 09:11:36

标签: c# .net file

我想从文本文件中读取双数字并将其存储在数组类型为double的数组中。 我试过这段代码

int h = 0;
int g = 0;
string lini = File.ReadAllText(@"C:2.txt");
double[][] datafile1 = new double[30][];
foreach (var row in lini.Split('\n'))
{
    h = 0;
    datafile1[g] = new double[7];
    foreach (var col in row.Trim().Split(','))
    {
        datafile1[g][h] = double.Parse(col);
        h++;
    }
    g++;
}

但它仅适用于此文件编号类型的原因?

  

5.1,3.5,1.4,0.2,0,0,1,
  4.9,3.0,1.4,0.2,0,0,1,
  4.7,3.2,1.3,0.2,0,0,1,

当我尝试更改文件时,它会给我错误输入字符串的格式不正确为什么?

  

0.000000 1.000000 0.000000 0.000000 0.000000 0.500000 0.500000 0.500000
  0.000000 0.000000 0.000000 0.333333 1.000000 0.500000 0.500000 0.000000

2 个答案:

答案 0 :(得分:2)

在你的第二个例子中,数字之间没有任何逗号,所以要么编辑输入文件,要么为可能的分隔符添加空格:

    foreach (var col in row.Trim().Split(new[] { ',', ' '}))
    {
        datafile1[g][h] = double.Parse(col);
        h++;
    }

答案 1 :(得分:1)

  

但它只适用于此文件编号类型的原因?

它仅适用于此文件,因为此文件每行有7个数字,每个数字用逗号分隔下一个或上一个数字。

您提到的其他格式显然与此不同。这就是您收到错误的原因。

如果你提到的另一个文件每行有一个结构,就像你提供的那样,你应该改变你的代码,如下所示:

int h = 0;
int g = 0;
var rows = File.ReadAllLines(@"C:2.txt");
double[][] datafile1 = new double[lines.Length][];
foreach (var row in rows)
{
    h = 0;

    // passing a list of separators, you catch both of your cases.
    columns = row.Trim().Split(new[] { ',', ' '}));

    // You read dynamically the number of columns, instead of having to set 
    // the correct number
    datafile1[g] = new double[columns.Length];

    foreach (var column in columns)
    {
        datafile1[g][h] = double.Parse(column);
        h++;
    }
    g++;
}

<强>更新

   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSString *str = self.recordlarge[@"images"];
    NSLog(@"Project Gallery id Record : %@",str);
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.myimagelarge setImage:[UIImage imageWithData:data]];
    });    
});