-1

这是 SetKey 的代码,我在列表上循环,取出数字转换为字符串并将其放入 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 值并将它们放入列表中

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


如果在我有一个列表之前我循环它并从列表中取出数字并创建一个数字字符串并将它们放入 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);
        }

Theproblem 是,如果我在 List wocl 上的循环中运行,那么当我运行程序时,这个 List 计数为 0 或 1。但在文本文件中的 GetKey 中,我可能有 4 帧或 1 帧,我的意思是我怎么知道在循环中要计算多少?

我尝试使用 wocl 列表进行测试,但现在在字符串测试中,我得到了第一个 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 等等……而且我不知道有多少键。

4

2 回答 2

0

假设你有一个像“123,33.44.55.66”这样的字符串,并且你知道这个字符串是逗号分隔的。检索数字:

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

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

于 2012-07-18T06:43:45.873 回答
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));
        }
于 2012-07-18T06:57:50.417 回答