[英]Parse string for doubles
我需要解析其包含的双精度数的字符串并将其存储在双精度数列表中,以便稍后我可以获取值并将它们存储在变量中。
您可以在richtextbox的图片上看到我现在有字符串内容,我试图像这样解析它
public void GetAll()
{
List<double> doubles = new List<double>();
MatchCollection matches = Regex.Matches(buff, @"(([-]|[+])?\d+[.]\d+)");
foreach (Match match in matches)
{
string val = match.Groups[1].Value;
doubles.Add(double.Parse(val));
}
}
并且它不会将双打存储在列表中。
我需要存储它们,以便它们显示doubles[0]
= vv_in的值, doubles[1]
= vv_out的值,依此类推。
您想存储可能在字符串末尾的双精度吗? 我会使用这种方法:
List<double> doubles = new List<double>();
string[] lines = yourTextBox.Lines;
foreach(string line in lines)
{
int lastSpaceIndex = line.LastIndexOf(' ');
string doubleToken = line.Substring(++lastSpaceIndex);
double d;
if(double.TryParse(doubleToken, out d))
doubles.Add(d);
}
没有您的数据就无法真正测试它,但是值得尝试:
var doubles = from line in buff.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
from item in line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
where double.TryParse(item, out var _)
select double.Parse(item);
如评论中所述,它使用了丢弃,这是C#7的功能。
实际上,您的代码几乎可以正常工作。 您唯一需要调整的是, Parse
需要考虑文化。 并且我更改了您的正则表达式,使其可以处理可选的十进制数字:
List<double> doubles = new List<double>();
MatchCollection matches = Regex.Matches(buff, @"(([-]|[+])?\d+(.\d+)?)");
foreach (Match match in matches)
{
string val = match.Groups[1].Value;
doubles.Add(double.Parse(val, System.Globalization.CultureInfo.InvariantCulture));
}
您应该首先将值分成几行,然后将每一行都放在空白处。 最后,尝试将获得的数组的第二部分解析为一个double:
public void GetAll()
{
List<double> doubles = new List<double>();
foreach(var line in buff.Split('\n')
{
var parts = line.Split();
if(parts.Length == 3)
{
double d;
if(double.TryParse(parts[2], out d)
doubles.Add(d);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.