读取txt文件并对其进行排序

时间:2015-11-01 15:24:35

标签: c# sorting

像标题这样的txt文件

成绩为0~100

样品:

名,等级

名,等级

名,等级

我必须按等级对其进行排序

解决它的方法是将它们拆分成数组然后进行排序吗?

我已将文件加载到字符串中,如此

char[] spli = { ' ', ',', '\t' };
        string line;
        string[] sline;

        StreamReader file = new StreamReader(textBox1.Text,Encoding.Default);
        line = file.ReadToEnd();
        sline = line.Split(spli);
        foreach (string item in sline)
        {
            listBox1.Items.Add(item);

        }

PLZ

2 个答案:

答案 0 :(得分:0)

下面的代码假设您的文本文件中的grades只是一个数字的一​​个字符串表示。您可以使用LINQ对其进行排序 - 首先将每一行拆分为,,然后解析数字的字符串表示并OrderBy

 var sorted = File.ReadLines(textBox1.Text)
                  .OrderBy(line => Int32.Parse(line.Split(',')[1]))
                  .ToList();

如果gradesdouble

var sorted = File.ReadLines(textBox1.Text)
                 .OrderBy(line => Double.Parse(line.Split(',')[1], CultureInfo.InvariantCulture))
                 .ToList();

答案 1 :(得分:0)

当您从文本文件中读取数据并对其进行解析时,请始终进行验证。你永远不知道文件中的数据。看我的代码。

class MyListUser
    {
        public string Name;
        public int  Grades;
    }

private List<MyListUser> ReadUserFile()
        {
            List<MyListUser> lstUser;
            string[] sMyData = File.ReadAllLines("Myfile.txt");
            if (sMyData != null)
            {
                MyListUser oTmp;
                string[] sTmp;
                lstUser = new List<MyListUser>();
                for (int i = 0; i < sMyData.GetLength(0); i++)
                {
                    sTmp = Regex.Split(sMyData[i], ",");
                    //need some validation
                    if (sTmp != null && sTmp.GetLength(0) > 1)
                    {
                        oTmp = new MyListUser();
                        oTmp.Name = sTmp[0];
                        int.TryParse(sTmp[1], out oTmp.Grades );
                        lstUser.Add(oTmp);
                    }
                }
                return lstUser.OrderBy(o => o.Grades).ToList();
            }
            return null;
        }