簡體   English   中英

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

[英]Parse PointF From String in C#?

好吧,我有點保存到文件看起來像這樣:

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 }

您可以使用正則表達式再次解析格式:

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序列化。

這是使用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);
}

請注意,只有在PointF.ToString上使用相同的NumberDecimalSeparator將字符串解析為float時,它才PointF.ToString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM