从C#中的字符串解析PointF?

时间:2014-01-07 08:11:53

标签: c# string point

好吧,我将点保存到看起来像这样的文件:

PointF p = new PointF(109.1679, 162.4473);
string lineInFile = p.ToString();

// in file it looks like this then:
{X=109,1679, Y=162,4473}

我现在不能使用linq和.NET Framework 4.5。我需要一个纯C#的解决方案,最高可达4.0。那么我该如何解析这一点呢?

请注意,PointF不是Point,语言特定的格式设置会使点在字符串中显示为逗号。

<小时/> 编辑:我已经接受了答案,但我希望用户修改过的文件的小问题也会得到解决。与{ X = 109,1679 ,Y = 162,4473 }

一样

2 个答案:

答案 0 :(得分:3)

您可以使用正则表达式再次解析格式:

using System.Text.RegularExpressions;

Match m = Regex.Match("{X=109,1679, Y=162,4473}", "{X=(\\d+.\\d+), Y=(\\d+.\\d+)}");
PointF p = new PointF(float.Parse(m.Groups[1].Value), float.Parse(m.Groups[2].Value));

请注意,我使用.检查小数点分隔符,因为ToString()的输出会因区域设置而异。

我假设您无法更改输出文件的文件结构,否则您可以使用内置函数进行XML或JSON序列化。

答案 1 :(得分:3)

以下是仅使用string.Splitfloat.TryParse的字符串方法版本:

string[] tokens = lineInFile.Split(new[]{", "}, StringSplitOptions.RemoveEmptyEntries);
string valueX = tokens[0].Split('=')[1];
string valueY = tokens[1].Split('=')[1].TrimEnd('}');
float x; float y;
if (float.TryParse(valueX, out x) && float.TryParse(valueY, out y))
{
    PointF parsed = new PointF(x, y);
}

请注意,只有在NumberDecimalSeparator上使用相同的PointF.ToString来解析字符串浮动时,它才有效。