C#解析文本文件并检索字符串/浮点数

时间:2013-12-12 22:47:16

标签: c# file parsing text

foreach (string line in File.ReadAllLines(openBunkerDialog.FileName))
{
    if (line.Contains("crate(") && line.Contains(");"))
    {
        string x = line.Substring(line.IndexOf("crate("), line.IndexOf(","));
        string y = line.Substring(line.IndexOf("crate(") + line.IndexOf(x), line.IndexOf(",") + line.IndexOf(x));
        string z = line.Substring(line.IndexOf("crate(") + line.IndexOf(x) + line.IndexOf(y), line.IndexOf(",") + line.IndexOf(x) + line.IndexOf(y));
        x = x.Replace("crate(", string.Empty);
        y = y.Replace("crate(", string.Empty);
        z = z.Replace("crate(", string.Empty);
        MessageBox.Show("X: " + x + " Y: " + y + " Z: " + z);
        //EntitySpawning.crate(Convert.ToSingle(x), Convert.ToSingle(y), Convert.ToSingle(z), false);
    }
    else if (line.Contains("entity(") && line.Contains(");"))
    {
    }
}

我想读取一个文件并从该行中获取信息。 文本文件示例:

crate(23231, 243243, 123324); 
crate(45678, 987532, 1234); 
etc...

我想获取用户输入的那些x / y / z值但是如何??? 谢谢,如果有人可以提供帮助

2 个答案:

答案 0 :(得分:0)

嗯,你很亲密。您要做的是获取crate(的索引,然后是);的索引。然后你在这两个索引之间取出子串并在逗号上拆分。你也可以使用正则表达式。

答案 1 :(得分:0)

这是一个可能的实现。使用IndexOf不带和使用起始索引String.SubstringString.Split。最后,您可以使用float.TryParse安全地解析parantheses中的前三个令牌。

foreach (string line in File.ReadAllLines(openBunkerDialog.FileName))
{
    int index = line.IndexOf("crate(");
    if (index >= 0)
    {
        index += "crate(".Length;
        int endIndex = line.IndexOf(")", index);
        if (endIndex >= 0)
        {
            string inParentheses = line.Substring(index, endIndex - index);
            string[] all = inParentheses.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            if(all.Length >= 3)
            {
                float x, y, z;
                float.TryParse(all[0].Trim(), out x);
                float.TryParse(all[1].Trim(), out y);
                float.TryParse(all[2].Trim(), out z);
            }
        }
    }
}

您也可以使用正则表达式方法,但如果可能,我会使用高效的字符串方法。