背景:
我想发展我的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#string
。string
对象总是使用特定的编码(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]);
}