c#中,怎样同时把多行string转换为double

我的string会出现在textbox1中,可能是一行,也可能是多行,效果如下:
{lat=-36.123456789,lng=174.123456789}
或者
{lat=-36.123456789,lng=174.12342326789}
{lat=-36.124346789,lng=174.12334356789}
{lat=-36.12333329,lng=174.12342326789}
{lat=-36.123536789,lng=174.1674456789}
。。。 。。。
我现在用以下的程序可以做到把一行string转换为double,并显示在textbox2中:

string S1,S2,S = textBox1.Text;

string[] x = S.Split(new char[] { ',' });
string y = x[0].ToString();//{lat=-36.12333333
string z = x[1].ToString();//lng=174.333333
S1 = y.Substring(y.IndexOf('=')+1);
S2 = z.Substring(z.IndexOf('=') + 1, z.IndexOf('}') - 5);
double f1 = double.Parse(S1), f2 = double.Parse(S2);
textBox2.Text = f1.ToString()+" "+f2.ToString();

现在我想要一步把所有string同时转换,请问需要怎样做?

        //using System.Linq;
        //using System.Drawing;须添加引用
        static void Main(string[] args)
        {
            string s = @"{lat=-36.123456789,lng=174.12342326789} 
{lat=-36.124346789,lng=174.12334356789} 
{lat=-36.12333329,lng=174.12342326789} 
{lat=-36.123536789,lng=174.1674456789} ";
            var v = s.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Replace("{lat=", "").Replace("lng=", "").Replace("}", ""))
           .Select(x => new
            {
                x,
                xs = x.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            })
            .Select(x => new PointF(Convert.ToSingle(x.xs[0]), Convert.ToSingle(x.xs[1])));

            foreach (PointF p in v)
                Console.WriteLine("x={0},y={1}", p.X, p.Y);
            Console.ReadLine();
        }

追问

你好!
我这个程序用的是vs c#的winForm,你这个程序我看着不是那么熟悉啊。。。
我不是搞编程的,客串一下写个软件。小白莫怪,,,

追答

留联系给你瞧瞧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-11
用循环就可以了。追问

谢谢!可以具体说说嘛?不怎么会编程

第2个回答  2014-08-11
protected void Button1_Click(object sender, EventArgs e)
{
string aa = TextBox1.Text;
for (int i = 0; i <= aa.Split().Length - 1; i++)
{
if (aa.Split()[i].ToString().Trim() != "")
{
GetValue(aa.Split()[i].ToString());
}
}

}
private void GetValue(string strValue )
{
string S1, S2, S = strValue;
string[] x = S.Split(new char[] { ',' });
string y = x[0].ToString();//{lat=-36.12333333
string z = x[1].ToString();//lng=174.333333
S1 = y.Substring(y.IndexOf('=')+1);
S2 = z.Substring(z.IndexOf('=') + 1, z.IndexOf('}') - 5);
double f1 = double.Parse(S1), f2 = double.Parse(S2);
TextBox2.Text += f1.ToString()+" "+f2.ToString() ;
}追问

谢谢回答! 我按照你的程序写了一下,会报错.主要是以下两个:
GetValue(aa.Split()[i].ToString());
string S1, S2, S = strValue;
报错说getvalue和strValue does not exist in current context.
请问如何应对? 还有就是你添加的button——1是起个什么功能?谢谢!

追答

我的画面

我的程式

 

所以我的做法就是在画面上拉2个TextBox,一个为输入TextBox,一个为显示的TextBox

然後Button1就是执行的按钮,按下Button1就会产出你要的需求

 

还有我写的webform,所以用在winform可能会有点差别就是了!

追问

感谢!我照着你的做了一次没有报错了,可是按下button时软件会种植运行,问题出在S2 = z.Substring(z.IndexOf('=') + 1, z.IndexOf('}') - 5); 应该是我自己的问题。他说length cannot be less than zero,而我改成小雨5的数字,他说input string的格式不对。 这个什么情况?难道}的长度不是1吗?

追答

你要不要改成这样看看,有时候字串的长度还满难算的!
S2 = z.Substring(z.IndexOf('=')+1).ToString().Replace("}","");
or
S2 = z.Split('=')[1].ToString().Replace("}", "");

追问

你好!在我最原始的指令里这两个都可以。但是换到你刚刚给的就不行了。第一个说input string的格式不对 第二个说Index was outside the bounds of the array。大神你觉得是什么问题?

追答

第二个请改成
if (z.Split('=').Length >0)
S2 = z.Split('=')[1].ToString().Replace("}", "");

第一个的话再在後面加上.ToString()看看!
S2 = z.Substring(z.IndexOf('=')+1).ToString().Replace("}","").ToString();

但如果可以的话,请给我你的测试个案,因为这些程式都是针对你给的测试个案去做分析!

追问

你好我试了,可是还不可以。留个邮箱我打包发过去?

追答

[email protected]

还要给我你的测试个案,要不然我拿到程式也是没用的!

追问

邮件发不过去,,,

追答

你用rar加密再寄看看!大概是被挡掉了!

追问

你好还是不行,请问有qq吗?我的380486793!谢谢!
lx的大哥刚才解决了所以这个就采纳了他的。我在开一个问题给你好吗? 其实如果可以的话也想多看看大神们写的

追答

呃~~我没有qq哦!不过我没采纳也没关系的,lx大神的赞还是我打的...^^

追问

那麻烦了半天怎么好意思,有百度账号吗?我再做一题补偿你好不好,不然我都过意不去啊

追答

呃~~~可是我回这个都是兴趣,不是要冲级之类的...所以真的没关系的!而且接你的福能看到lx大神的程式,其实就是一种回报了,他的程式让我知道原来linq还能这麼用!^^

相似回答