像标题这样的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
答案 0 :(得分:0)
下面的代码假设您的文本文件中的grades
只是一个数字的一个字符串表示。您可以使用LINQ对其进行排序 - 首先将每一行拆分为,
,然后解析数字的字符串表示并OrderBy
:
var sorted = File.ReadLines(textBox1.Text)
.OrderBy(line => Int32.Parse(line.Split(',')[1]))
.ToList();
如果grades
是double
:
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;
}