读取.txt文件的最后5行,并在C#控制台应用程序中显示结果



背景:

我想发展我的C#技能,因此创建了一个模拟加油站的应用程序。每隔2秒,该应用程序就会创建一辆新车,并将其分配给前场9个水泵中的一个(以下一个可用的为准(。一旦车辆在x秒后加油,它就会离开泵并释放它,以便再次使用。每次车辆进出加油站时,我都会使用Console.Clear((重新绘制前院设计,给人一种动态应用程序的印象。当车辆离开加油站时,我想记录车辆的类型、分配的燃油升数以及维修的泵,以便记录每笔交易。

我所做的:

在这节课上,我创建了一个日志,记录了车辆的类型、维修的泵号以及为该特定车辆分配的燃油量,并将其写在一行中到.txt文件中。然后,我读取了.txt文件,并打印了日志中的每一行。

using System;
using System.Text;
using System.IO;
namespace PetrolStationManagement
{
    class TransactionLog
    {
        public static Vehicle currentVehicle = null;
        public static void LogVehicle(Vehicle v, Pump p)
        {
            currentVehicle = v;
            Data.pumpNum = p;
            try
            {
                // passes filepath and filename to streamWriter constructor
                StreamWriter sw = new StreamWriter("G:\PetrolStation\TransactionLog.txt", true, Encoding.ASCII);
                // writes transaction details to file
                sw.WriteLine("{0}.tVehicle Type: {1}tPump No. : {2}tLitres Dispensed to Vehicle: {3}n", v.carID, v.vehicleType, p.pumpNum, Pump.litresDispensedToVehicle);
                sw.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }
        }
        public static void ShowTransactions(Vehicle v, Pump p)
        {
            currentVehicle = v;
            Data.pumpNum = p;
            // shows details of all the transactions made
            try
            {
                using (StreamReader sr = new StreamReader("G:\PetrolStation\TransactionLog.txt")) // passes the filepath and filename to streamReader constructor
                {
                    string line;
                    while ((line = sr.ReadLine()) != null) // read and display lines from file to console until end of file
                    {
                        // write line to console
                        Console.WriteLine(line);
                        // read next line
                        line = sr.ReadLine();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }
        }
    }
}

我想做的是从.txt文件中读取,并在控制台上显示最后5笔交易供用户查看,否则列表将变得过长,用户将无法看到顶部的前院,该前院显示哪些泵可用,哪些正在使用。

一般来说,我对编程还比较陌生,我正在努力想办法做到这一点。

编辑我对编码并不太在意,因为我的主要问题是不确定如何读取文件的最后n行并将其显示到控制台!!

如果文本使用可变长度编码(如UTF8(,大多数人会回答如何读取最后n个文件。您将如何使用固定长度编码(如ASCII(来实现这一点??一般来说,我对编程还比较陌生,我正在努力想办法做到这一点!

关键是您的代码不必担心编码问题。你可以直接阅读并操作它们。

读取文件时,应使用正确的编码读取该文件。例如,StreamReader将识别文件中的编码并自动使用它。

当你使用StreamReader时,它会给你一个C#stringstring对象总是使用特定的编码(UTF-16(。因此,您只需要对UTF-16字符串进行操作,而不必担心原始文件编码是UTF-8、ASCII还是UTF-32。

您需要将整个文件读取(Reader.ReadLine(((到数组或列表中,然后显示数组或列表的最后一个条目。在文本文件中,我不知道任何访问特定数据的机制。

List<string> lst = new List<string>() // or var lst = new List<string>();
while (!sr.EndOfStream) {
    lst.Add(sr.ReadLine());
}
for(int i = List.Count - 5; i < List.Count; i++) {
    Console.WriteLine(lst[i]);
}

相关内容

最新更新