PDA

View Full Version : سوال: مرتب کردن نوشته های یک فایل



erfan2
پنج شنبه 15 خرداد 1393, 02:37 صبح
سلام
چطوری نوشته های یک فایل که مثلا به صورت زیر هست بر اساس اعداد(امتیاز) بعد از (=) مرتب بشه (از بزرگ به کوچیک):

player1=4300
player2=2350
player3=550
player4=3400
...

که بعد از مرتب شدن بشه این:

player1=4300
player4=3400
player2=2350
player3=550
...

لطفا راهنمایی کنید.

aliagamon
پنج شنبه 15 خرداد 1393, 08:30 صبح
خدمت شما :لبخند:

StreamReader sr = new StreamReader("text.txt");
string str = sr.ReadToEnd();
string[] split = str.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
List<string> players=new List<string>();
List<int> scores=new List<int>();
foreach (string temp in split)
{
string[] spliter = temp.Split('=');
players.Add(spliter[0]);
scores.Add(int.Parse(spliter[1]));
}
scores.Sort((x, y) => y.CompareTo(x));
sr.Close();
StreamWriter sw = new StreamWriter("text.txt");
int count=0;
foreach(string temp in players){
sw.Write(temp+"=");
sw.Write(scores[count]);
sw.Write("\r\n");
count++;
}
sw.Close();

erfan2
پنج شنبه 15 خرداد 1393, 14:40 عصر
خدمت شما :لبخند:

StreamReader sr = new StreamReader("text.txt");
string str = sr.ReadToEnd();
string[] split = str.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
List<string> players=new List<string>();
List<int> scores=new List<int>();
foreach (string temp in split)
{
string[] spliter = temp.Split('=');
players.Add(spliter[0]);
scores.Add(int.Parse(spliter[1]));
}
scores.Sort((x, y) => y.CompareTo(x));
sr.Close();
StreamWriter sw = new StreamWriter("text.txt");
int count=0;
foreach(string temp in players){
sw.Write(temp+"=");
sw.Write(scores[count]);
sw.Write("\r\n");
count++;
}
sw.Close();


بابت پاسختون ممنونم
اما یه مشکلی توی کد هست
خط هارو بر اساس اعداد تنظیم میکنه ولی اسم مربوط به اعدادو مثل فایل قبل مینویسه
مثال:
player1=4300
player2=2350
player3=550
player4=3400
مرتب شده با کد شما:
player1=4300
player2=3400
player3=2350
player4=550

aliagamon
پنج شنبه 15 خرداد 1393, 17:45 عصر
حق بدین دیگه اول صبح بود مثالتونو اشتباه دیدم فکر کردم میخواین جای پلیر ها عوض نشه و فقط امتیاز ها جا به جا شه
اینطوری کوتاه تر هم میشه اینم کد تغییر کرده :

StreamReader sr = new StreamReader("text.txt");
string str = sr.ReadToEnd();
string[] split = str.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
List<string> players=new List<string>();
foreach (string temp in split)
{
players.Add(temp);
}
players.Sort((x,y)=>int.Parse(y.Split('=')[1]).CompareTo(int.Parse(x.Split('=')[1])));
sr.Close();
StreamWriter sw = new StreamWriter("text.txt");
foreach(string temp in players){
sw.Write(temp);
sw.Write("\r\n");
}
sw.Close();