Прочитайте последние 5 строк файла .txt и отобразите результаты в консольном приложении C # - PullRequest
0 голосов
/ 13 ноября 2018

Справочная информация:

Я хотел бы развить свои навыки в 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 строк файла и вывести их на консоль !!

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вам необходимо прочитать (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]);
}
0 голосов
/ 13 ноября 2018

Большинство ответят, как читать последние n файлов, если в тексте используется кодирование переменной длины, например UTF8.Как бы вы поступили, используя кодировку фиксированной длины, такую ​​как ASCII?Я все еще относительно новичок в программировании в целом, и я изо всех сил пытаюсь выяснить, как это можно сделать!

Ключ в том, что ваш код не должен беспокоиться о кодировке.Вы можете просто читать строки и работать с ними.

Когда вы читаете файл, вы должны прочитать файл в правильной кодировке.Например, StreamReader идентифицирует кодировку в файле и использует ее автоматически.

Когда вы используете StreamReader, вы получите C # string.string объекты всегда используют определенную кодировку (UTF-16).Так что вам просто нужно работать со строкой UTF-16 и не беспокоиться о том, была ли исходная кодировка файла UTF-8, ASCII или UTF-32.

...