Как распечатать названия книг, опубликованные только определенными издателями? - PullRequest
1 голос
/ 07 мая 2019

У меня есть текстовый файл с информацией о различных книгах (имя, издатель, автор, год и т. Д.), И мне нужна программа для распечатки названий книг, опубликованных только определенными издателями (в моем случае "O")Рейли ").

Я пытался использовать File.ReadAllLines или где name.Contains (" O'Reilly "), но всегда получаю ошибку.Извините, если я делаю что-то глупое, просто начинаю с C #

static void Task1()
    {
        List<Book> namings = Book.GetBooks("books.txt");  

        var resul = from name in namings
                     where name.Contains("O'Reilly")
                     select name;

        namings.ToList().ForEach(x => x == "O'Reilly" Console.WriteLine($" '{x.Name}' by {x.Publisher}"));
    }

public class Book
{
    public string Name;
    public string Publisher;
    public string Author;
    public int Year;
    public int Edition;
    public string ISBN;

    public string List => $"Name: {Name}\nPublisher: {Publisher}\nAuthor: {Author}\nYear: {Year}\nEdition: {Edition}\nISBN: {ISBN}\n";

    public static List<Book> GetBooks(string filename)
    {
        List<Book> result = new List<Book>();

        string[] lines = File.ReadAllLines(filename);

        foreach (string line in lines)
        {
            try
            {
                string[] fields = line.Split(';');
                Book b = new Book()
                {
                    Name = fields[0],
                    Publisher = fields[1],
                    ISBN = fields[2],
                    Author = fields[3],
                    Edition = int.Parse(fields[4]),
                    Year = int.Parse(fields[5]),
                };

                result.Add(b);
            }
            catch (Exception e)
            {
                Console.WriteLine($"An exception occured while reading the following line:{line}\nException:{e.Message}");
            }
        }

        return result;
    }

    public static void WriteBooks(string filename, List<Book> books)
    {
        List<string> lines = new List<string>();

        foreach (Book book in books)
        {
            lines.Add($"{book.Name};{book.Publisher};{book.ISBN};{book.Author};{book.Year};{book.Edition}");
        }

        File.WriteAllLines(filename, lines);
    }
}

Вот текстовый файл:

Язык программирования C ++; Addison-Wesley; 978-0321563842; Бьярн Страуструп; 4; 2013

Java в двух словах; O'Reilly; 978-1449370824; Бенджамин Дж. Эванс и Дэвид Фланаган; 6; 2015

C # в глубине; Мэннинг; 978-1617294532; Джон Скит; 4; 2018

Разработка веб-API; O'Reilly; 978-1492026921; Бренда Джин, Саураб Сахни и Амир Шеват; 1; 2018

Я ожидаю, что программа выведет:

Издатель О'Рейли: Java в двух словах;Разработка веб-API;

1 Ответ

0 голосов
/ 08 мая 2019

Понял.

List<Book> names = Book.GetBooks("books.txt");

Console.WriteLine("Books that are published by O'Reilly:");

var a = names.Where(x => x.Publisher.Contains("O'Reilly"));
a.ToList().ForEach(x => Console.WriteLine("---> '" + x.Name + "'"));
...