我需要从文件中读取一个矩阵以double [,]。到现在为止,可以将文件读取为string []。数据结构如下所示:
但是转换无效。
我已经尝试了很多stackoverflow文章,但是总是失败,因为“输入字符串的格式不正确”。重要的是这些值都是双精度值,并用三个空格分隔。
我这样读取文件:
public function products()
{
return $this->belongsToMany('App\Product', 'order_products', 'order_id', 'product_id');
}
答案 0 :(得分:1)
您可以通过多种方式执行此操作,这取决于您是否需要锯齿状数组或多维数组。
可能有更简洁的方法,但是,您可以看到这个主意。
锯齿状
var jaggedArray = File.ReadAllLines(@"d:\right.txt")
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x => x.Split(new[]{' '},StringSplitOptions.RemoveEmptyEntries)
.Select(double.Parse)
.ToArray())
.ToArray();
多维
var lines = File.ReadAllLines(@"d:\right.txt")
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x => x.Split(new[]{' '},StringSplitOptions.RemoveEmptyEntries)
.Select(double.Parse)
.ToList())
.ToList();
var h = lines.Count();
var w = lines.Max(x => x.Count);
var multiArray = new double[h, w];
for (var i = 0; i < lines.Count; i++)
for (var j = 0; j < lines[i].Count; j++)
multiArray[i, j] = lines[i][j];
注意 :完全未经测试,对于该代码所造成的伤害或损害,我不承担任何责任。
注释2 :没有错误检查或容错功能,如果文件中有垃圾,很可能会抛出
更新
有没有一种方法可以调试/修复该问题?也许问题在于 值用3个空格分隔,而不仅仅是1个空格?有没有 LINQ语句中解决此问题的方法?
是的,如果使用StringSplitOptions.RemoveEmptyEntries
的多个空格应该可以工作
Split(new [] {' '},StringSplitOptions.RemoveEmptyEntries)
不过请注意,这实际上是假设每个分隔的值都可以转换为double
,并且没有空行(即使在文件末尾)
您可以使用 linq 语句中包含的类似内容来解决空白行问题
File.ReadAllLines(@"right.txt")
.Where(x => !string.IsNullOrWhiteSpace(x))
...