我有一个文件,文本格式是这样的:
.640 .070 -.390 -.740 -1.030 -1.410 -1.780 -1.840
-1.360 -.360 .860 1.880 2.340 2.250 1.950 1.710
1.410 .700 -.300 -.840 -.280 1.020 1.860 1.460
.310 -.460 -.320 .350 1.020 1.650 2.430 3.070
2.840 1.440 -.460 -1.650 -1.520 -.520 .250 .190
-.420 -.870 -.800 -.280 .570 1.660 2.500 2.220
.520 -1.560 -2.530 -2.030 -1.200 -1.060 -1.230 -.600
.990 2.300 2.180 .940 -.090 -.140 .320 .470
.330 .420 .830 1.080 1.090 1.530 2.740 3.800
3.410 1.610 -.150 -.900 -1.120 -1.640 -2.140 -1.590
.210 2.210 3.290 3.170 2.380 1.880 2.530 4.210
5.280 3.820 -.040 -3.670 -4.190 -1.260 2.930 5.740
5.980 3.920 .540 -2.890 -5.010 -4.780 -2.150 1.640
4.670 5.540 4.230 1.950 .120 -.470 -.010 .340
-.710 -2.940 -4.070 -1.810 3.000 6.590 6.140 2.750
-.490 -2.460 -4.180 -5.660 -4.800 -.560 4.510 6.630
5.140 2.860 2.230 2.510 1.670 -.440 -2.030 -2.330
请注意,一个值与另一个值之间存在大量白色字符。
我尝试读取每一行,然后根据' '
字符拆分该行。我的代码是这样的:
public List<double> Parse(StreamReader sr)
{
var dataList = new List<double>();
while (sr.Peek() >= 0)
{
string line = sr.ReadLine();
if (lineCount > 1)
{
string[] columns = line.Split(' ');
for (var j = 0; j < columns.Length; j++)
{
dataList.Add(double.Parse(columns[j]) ));
}
}
}
return dataList ;
}
上述代码的问题在于它只能处理值由单个白色字符分隔的情况。
有什么想法吗?
答案 0 :(得分:4)
最简单的方法可能是使用包含StringSplitOptions
参数的String.Split
重载,并指定StringSplitOptions.RemoveEmptyEntries
。
我个人也会直接调用ReadLine
,直到返回null,而不是使用TextReader.Peek
。除了其他任何东西,它更通用 - 即使底层流(如果有的话)不支持搜索,它也会起作用。
答案 1 :(得分:1)
在进行拆分之前,请用一个空格替换所有多个空格,例如:
line = System.Text.RegularExpressions.Regex.Replace(line, @" +", @" ");
答案 2 :(得分:0)
您可以使用简单的一行代码。让你的文本在名为input的字符串中。
string[] values = System.Text.RegularExpressions.Regex.Split(input, @"\s+");
您将获得字符串数组中的所有值