如何按降序对文本文件中的不同类型数字排序到文本框?
Posted
技术标签:
【中文标题】如何按降序对文本文件中的不同类型数字排序到文本框?【英文标题】:How to sort different type numbers which with are in text file to textbox in descending? 【发布时间】:2020-01-14 19:55:49 【问题描述】:它应该让我从我的计算机中选择一个文本文件。这个文本文件中会有数字。这些数字将由“空白”字符分隔(提示:确保考虑所有空白字符,否则您的程序可能会失败)。十进制数的小数位将用逗号分隔。文本文件中的数字数量不确定。当我选择文件并单击按钮时,我应该会看到文本文件中的所有数字按从大到小的顺序排序。
示例文本文件的内容如下所示:
56 45 6 2 789
9 349 -87
11
4,34 -198,456
65
9,85 45
-1
99,456
877 56 34 4
我在 Visual Studio 2017 上工作。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace TestUygulamasi
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e) //get file and paste to testbox
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
try
if ((myStream = openFileDialog1.OpenFile()) != null)
using (myStream)
textBox1.Text = File.ReadAllText(openFileDialog1.FileName);
catch (Exception ex)
MessageBox.Show("Error: File has not read. Error: " + ex.Message);
private void button2_Click(object sender, EventArgs e)//Sorting Button
string numbers = textBox1.Text;
string[] arr;
arr = numbers.Split(' ');
Array.Sort(arr);
string sorting = int.Parse(textBox2.Text);
for (int i = 0; i < arr.Length; ++i)
sorting = sorting + arr[i] + "\n";
//sorting = arr[i] + "\n";
textBox2.Text = Convert.ToString(sorting);
//listBox1.Items.Add("\n" + sorting + "\n");
//MessageBox.Show(sorting);
我无法对数字进行降序排序。
【问题讨论】:
是的,它们是数字。 "," 定义为十进制数。 99,456 低于 100。只是我需要删除空格并将它们放入数组中。然后我将它们降序排列。 【参考方案1】:你可以使用 Linq。
var str = textBox1.Text;
var currentCulture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
currentCulture.NumberFormat.NumberDecimalSeparator = ",";
currentCulture.NumberFormat.NumberGroupSeparator = ".";
var numbers = str.Split(new string[] " ",Environment.NewLine ,StringSplitOptions.RemoveEmptyEntries)
.Select(num=> decimal.Parse(num,currentCulture))
.OrderBy(num=>num);
textBox1.Text = string.Join(Environment.NewLine,numbers);
【讨论】:
【参考方案2】:另一个答案是这样。这段代码不是我写的。编写代码的人已经删除了代码和他/她的 cmets。他/她为什么这样做?我不知道。我希望他/她在这个问题下再次回答。我是该网站的新手,所以我无法投票赞成他/她的回答。谢谢我失去的秘密英雄。
List<decimal> nums = new List<decimal>();
for (int i = 0; i < textBox1.Lines.Count(); ++i)
string[] line = textBox1.Lines[i].Split(new char[] ' ' ,
StringSplitOptions.RemoveEmptyEntries);
foreach (string s in line)
nums.Add(decimal.Parse(s, NumberStyles.Number, new CultureInfo("tr-TR")));
foreach (decimal d in nums.OrderByDescending(x => x))
listBox1.Items.Add(d.ToString());
【讨论】:
以上是关于如何按降序对文本文件中的不同类型数字排序到文本框?的主要内容,如果未能解决你的问题,请参考以下文章