如何按文本文件的升序显示数据c#

问题描述 投票:0回答:2

我需要根据项目编号升序排序和显示我的代码。这是示例代码。

string data = $"{itemNumber}|{itemName}|{itemPrice}";

using (StreamWriter writer = File.AppendText("items.txt"))
{
    writer.WriteLine(data);
}

public void DisplayItemList()
{
    using (StreamReader reader = new StreamReader("items.txt"))
    {
        Console.WriteLine("\n ---------------------------------");
        Console.WriteLine(" Item No.     Item Name      Price");
        Console.WriteLine(" ---------------------------------");

        while (!reader.EndOfStream)
        {
            string line = reader.ReadLine();
            string[] fields = line.Split('|');
            Console.WriteLine(String.Format(" {0,-13}{1,-16}{2,0}", fields[0], fields[1], fields[2]));
        }

        Console.Write("\n");
    }
}

这是我的示例代码。如你所见,我有

1 - oslopaper | 34 - bond | 11 - art

我需要它成为

1 - oslopaper, 11 - art, lastly, 34 - bond 

因为我希望它按升序排列。

c# arrays text-files
2个回答
2
投票

我建议在Linq的帮助下查询文件(在这里你可以添加排序 -

OrderBy
;代表 -
Select
,标题 -
Prepend
):

using System.Linq;
using System.IO;

...

public void DisplayItemList() {
  var result = File
    .ReadLines("items.txt")
    .Where(line => !string.IsNullOrWhiteSpace(line)) // to be on the safer side
    .Select(line => line.Split('|'))
    .OrderBy(fields => int.Parse(fields[0]))
    .Select(fields => $" {fields[0],-13}{fields[1],-16}{fields[2],0}")
    .Prepend(" --------------------------------- ")
    .Prepend(" Item No.     Item Name      Price ")
    .Prepend(" --------------------------------- ");

  Console.Write(string.Join(Environment.NewLine, result));
}

0
投票

您可以在使用 LINQ 显示之前对项目进行排序

var lines = File.ReadAllLines("items.txt")
                .OrderBy(line => int.Parse(line.Split('|')[0]));
© www.soinside.com 2019 - 2024. All rights reserved.