我如何读取一个制表符分隔的文件到多维数组使用Linq

本文关键字:文件 数组 Linq 制表符 何读取 读取 一个 分隔 | 更新日期: 2023-09-27 18:11:08

对于以下以制表符分隔的文件,我试图将其保存在double[][] csvArray

颜色的数量是固定的(5),但是行是动态的

1,717.72    1,728.89    1,712.61    1,728.89    1,707.11
1,701.19    1,704.11    1,702.05    1,706.98    1,697.19
1,685.41    1,688.68    1,694.07    1,695.71    1,687.20
1,641.05    1,649.27    1,658.06    1,658.58    1,648.09
1,673.69    1,668.34    1,663.90    1,673.42    1,662.16
1,682.32    1,669.54    1,671.33    1,681.02    1,668.81
1,688.12    1,681.44    1,684.90    1,688.57    1,672.60
1,686.02    1,690.76    1,697.13    1,698.13    1,690.35
1,704.92    1,696.22    1,696.74    1,701.17    1,688.74
1,686.78    1,683.61    1,677.03    1,687.88    1,674.40
1,705.94    1,704.90    1,715.58    1,716.91    1,700.25
1,659.22    1,660.46    1,658.69    1,664.98    1,655.62
1,622.31    1,621.94    1,632.78    1,633.61    1,613.91

除了对整个矩阵进行迭代之外,是否有一些LINQ表达式可以得到这样漂亮干净的结果?

我如何读取一个制表符分隔的文件到多维数组使用Linq

Linq的帮助下,您可以这样做:

using System.Globalization;
var csvArray = File
  .ReadLines(@"C:'MyData.csv") // assuming that data is in the file
  .Select(line => line
    .Split(''t')
    .Select(item => Double.Parse(item, CultureInfo.InvariantCulture))
    .ToArray()) 
  .ToArray();

注意,当使用锯齿数组(double[][])时,您不需要知道列的确切数量(在您的情况下是5)

可以了

string str = 
  @"1,717.72    1,728.89    1,712.61    1,728.89    1,707.11    
    1,717.72    1,728.89    1,712.61    1,728.89    1,707.11";
var doubles = str
  .Split("'n'r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
  .Select(item => item
    .Split("'t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
    .Select(d => double.Parse(d))
    .ToArray())
  .ToArray();