好吧,我将点保存到看起来像这样的文件:
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 }
一样
答案 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.Split
和float.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
来解析字符串浮动时,它才有效。