如何将GetKey中的数字返回到List <float>? (反向我所做的)</float>

时间:2012-07-18 06:25:30

标签: c#

这是列表上的SetKey i循环的代码取出转换为字符串的数字并将其放入SetKey现在我需要使用GetKey来反转操作并将数字放回列表所以eahc List Point_X和Point_Y将具有以前的数字。

string[] xFrames = new string[wocl.Count];
                string[] yFrames = new string[wocl.Count];

                string X="";
                string Y="";
                for (int i = 0; i < wocl.Count; i++)
                {
                    X  = string.Format("Frame_X_{0} ", i + 1);
                    Y  = string.Format("Frame_Y_{0} ", i + 1);

                    for (int j = 0; j < wocl[i].Point_X.Count; j++)
                    {
                        xFrames[i] += string.Format("{0},", wocl[i].Point_X[j]);
                        yFrames[i] += string.Format("{0},", wocl[i].Point_Y[j]);


                    }

                    string tt = xFrames[i].Trim(",".ToCharArray());
                    string yy =  yFrames[i].Trim(",".ToCharArray());



                     setting_file.SetKey(X, tt);
                     setting_file.SetKey(Y, yy);   

                }

现在tt是一个数字字符串,例如122,33,44,55,121

现在我需要解析数字。现在我需要获取字符串并解析数字并将它们放回浮点列表:

列出a = setting_file.GetKey(X);

但是X是一个键,它表示一串数字而不是数字列表。

这是GetKey和SetKey函数的OptionsFile中的代码:

/*----------------------------------------------------------
 * Function     : GetKey
 * Description  : gets the value of the key.
 * Parameters   : key
 * Return       : value of the key if key exist, null if not exist
 * --------------------------------------------------------*/
    public string GetKey(string key)
    {

      //  string value_of_each_key;
        string key_of_each_line;
        string line;
        int index;
        string key_value;
        key_value = null;

        sr = new StreamReader(Options_File);
        while (null != (line = sr.ReadLine()))
        {


            index = line.IndexOf("=");


           //    value_of_each_key = line.Substring(index+1);



            if (index >= 1)
            {
                key_of_each_line = line.Substring(0, index);
                if (key_of_each_line == key)
                {
                    key_value = line.Substring(key.Length + 1);
                }

            }
            else
            {
            }


        }
        sr.Close();
        return key_value;
    }


/*----------------------------------------------------------
 * Function     : SetKey
 * Description  : sets a value to the specified key
 * Parameters   : key and a value
 * Return       : none
 * --------------------------------------------------------*/
    public void SetKey(string key , string value)
    {
        bool key_was_found_inside_the_loop;
        string value_of_each_key;
        string key_of_each_line ;
        string line;
        int index;
        key_was_found_inside_the_loop = false;

        temp_settings_file = "\\temp_settings_file.txt";
        temp_settings_dir = path_exe + @"\temp_settings";
        if (!Directory.Exists(temp_settings_dir))
        {
            Directory.CreateDirectory(temp_settings_dir);
        }

        sw = new StreamWriter(temp_settings_dir+temp_settings_file);
        sr = new StreamReader(Options_File);
        while (null != (line = sr.ReadLine()))
        {

            index = line.IndexOf("=");
            key_of_each_line = line.Substring(0, index);
            value_of_each_key = line.Substring( index + 1);
         //   key_value = line.Substring(0,value.Length);
            if (key_of_each_line == key)
            {
                sw.WriteLine(key + " = " + value);
                key_was_found_inside_the_loop = true;

            }
            else
            {
                sw.WriteLine(key_of_each_line+"="+value_of_each_key);
            }

        }

        if (!key_was_found_inside_the_loop)
        {
           sw.WriteLine(key + "=" + value);
        }
        sr.Close();
        sw.Close();
        File.Delete(Options_File);
        File.Move(temp_settings_dir + temp_settings_file, Options_File);
        return;

    }

我需要的是在List a中它将包含字符串X

中的数字

X就像一个键,SetKey函数的结果是一个Key = Value

例如:Hello = 122,33,44,55,66 Hello就像变量X一样是键,右边是数字键值。

所以现在我需要获取关键X值并将它们放入List

无法弄清楚如何做到这一点。


如果之前我有一个List并且我循环它并从List中取出数字并创建了一个数字字符串并将它们放入SetKey现在我需要使用GetKey并取出数字并将它们放回去到列表


编辑:

public void Load(string path,string fileName)
        {
            string X = "";
            string t = path + "\\" + fileName;
            OptionsFile setting_file = new OptionsFile(t);
            for (int i = 0; i <= wocl.Count ; i++)
            {
            X  = string.Format("Frame_X_{0} ", i + 1);

            }
            string test = setting_file.GetKey(X);
        }

Thep roblem是如果我在List wocl的循环中运行所以当我运行程序时这个List是0或1。但是在文本文件中的GetKey我可能有4帧或1帧我的意思是我知道在循环中需要多少钱?

我尝试使用wocl List进行测试但是现在在字符串测试中我得到了第一个Frame_X_1的数字,但就是这样。

在hte文件中,它看起来像是:

Frame_X_1 =332,325,336,334,332,325,333,328,332
Frame_Y_1 =218,217,202,212,211,210,204,202,204
Frame_X_2 =270,325,336,347,321,325,333,328,332
Frame_Y_2 =257,217,202,282,156,210,204,202,204
Frame_X_3 =270,325,336,347,321,336,270,371,332
Frame_Y_3 =257,217,202,282,156,250,199,135,204

我的意思是当我运行该程序时,所有列表都是空数到0然后我需要检索每个键Frame_X_1然后是Frame_Y_1等等......而且我不知道有多少键。

2 个答案:

答案 0 :(得分:0)

假设您有一个类似“123,33.44.55.66”的字符串,并且您知道此字符串是逗号分隔的。检索数字:

string str = "123,33,44,55,66";
string[] strArray = str.Split(',');

然后,您可以将strArray转换为兼容的任何类型。

答案 1 :(得分:0)

将此添加到静态助手类

public static List<T> ToListOf<T>(this IEnumerable enumerable)
        {
            var list = new List<T>();

            foreach (var item in enumerable)
            {
                list.Add(item.ConvertTo<T>());
            }

            return list;
        }

然后:var myFloats = tt.Split(',').ToListOf<float>(); 优雅,不是吗? :)

修改

我忘记了另外一种扩展方法:

public static T ConvertTo<T>(this object source)
        {
            return (T)Convert.ChangeType(source, typeof(T));
        }