0

我的问题是从 .txt 文件中获取值。我有这个例如[没有输入]:

damage=20 big explosion=50 rangeweapon=50.0

我想在“=”之后获得这些值。只是string[]用这样的东西做一个:

damage=20
big explosion=50
rangeweapon=50.0

我有其他一些机制,但我想找到通用机制来获取所有值string[],然后在 switch 中检查它。谢谢你。

4

5 回答 5

0

您想从文本中读取数字。您可以像这样将数据保存在文本中。

伤害=20,大爆炸=50,射程武器=50。并通过 File.ReadAllLines() 从文本中读取。

    string[] Lines;
    string[] myArray;
    Lines = File.ReadAllLines(your file path);



        for (int i = 0; i < Lines.Length; i++)
         {
                    myArray = Lines[i].Split(',');

         }
         for (int j = 0; j < myArray .Length; j++)
         {
                        string x =myArray [j].ToString();
                        x = Regex.Replace(x, "[^0-9.]", "");

                        Console.WriteLine(x);
         }
于 2013-08-06T20:43:02.473 回答
0

我不是这方面的专家,但是使用Regex怎么样?

于 2013-08-06T19:52:40.733 回答
0

这应该解析您描述的字符串,但请记住它不是很健壮并且没有错误处理。

string stringToParse = "damage=20 big explosion=50 rangeweapon=50.0";
string[] values = stringToParse.Split(' ');
Dictionary<string, double> parsedValues = new Dictionary<string, double>();

string temp = "";
foreach (var value in values)
{
    if (value.Contains('='))
    {
       string[] keyValue = value.Split('=');
       parsedValues.Add(temp + keyValue[0], Double.Parse(keyValue[1]));
       temp = string.Empty;
    }
    else
    {
        temp += value + ' ';
    }
} 

在此之后, parsedValues 字典应该包含您要查找的信息。

于 2013-08-06T19:32:22.583 回答
0

不是世界上最干净的代码,但适用于您的情况。

        string input = "damage=20 big explosion=50 rangeweapon=50.0";
        string[] parts = input.Split('=');
        Dictionary<string, double> dict = new Dictionary<string, double>();

        for (int i = 0; i < (parts.Length - 1); i++)
        {
            string key = i==0?parts[i]:parts[i].Substring(parts[i].IndexOf(' '));
            string value = i==parts.Length-2?parts[i+1]:parts[i + 1].Substring(0, parts[i + 1].IndexOf(' '));
            dict.Add(key.Trim(), Double.Parse(value));
        }

        foreach (var el in dict)
        {
            Console.WriteLine("Key {0} contains value {1}", el.Key, el.Value);
        }

        Console.ReadLine();
于 2013-08-06T20:04:49.997 回答
0

我试图用正则表达式解决你的问题。我找到了一种不是最佳解决方案的解决方案。可能它可以帮助或指导您找到最佳解决方案。

请尝试这样

string operation = "damage=20 big explosion=50 rangeweapon=50.0";

string[] wordText = Regex.Split(operation, @"(\=\d+\.?\d?)");  
/*for split word but result array has last value that empty you will delete its*/

string[] wordValue = Regex.Split(operation, @"(\s*\D+\=)");  /*for split digit that is value of word but result array has first value that empty you will delete its*/

之后,您可以加入这些阵列或对这些阵列做任何您想做的事情。

于 2013-08-06T20:11:08.357 回答