Чтение из текстового файла и разбиение каждой отдельной строки на разные массивы или списки - PullRequest
1 голос
/ 19 марта 2012

Я пытаюсь найти лучший способ решения проблемы в моей программе.По сути, у меня есть список, который содержит коды книг (1,2,3 и т. Д.).1, 2, 3 будут представлять 3 разные книги.У меня есть текстовый файл, который содержит информацию, такую ​​как:

Формат текстового файла: bookCode, bookTitle, bookPrice, количество книг

Пустая информация текстового файла: 1, Книга 1, 22, 52, Книга 2, 10, 33, Книга 3, 5, 15

Я не всегда знаю, сколько строк будет в этом текстовом файле.То, что я пытаюсь сделать, это разделить каждую отдельную строку и поместить каждую строку в своего рода массив или список, и иметь возможность доступа к каждому отдельному элементу в этих отдельных списках (такие элементы, как: Книга первая, Книга вторая, так чточто я могу поместить их в список) И, скажем, например, кто-то нажимает на «Книгу Два» в списке, моя метка изменится с ценой на Книгу Два.

Как я могу поместить bookTitle (Книга первая, Книга вторая и т. Д.) В список и как я могу разбить каждую строку на отдельные списки и каждый отдельный элемент для этой строки в список?

Я не совсем уверен, что объяснил, что я хочу, а также это можно объяснить.Поэтому я прошу прощения, если это пришло в голову ошеломляет.

Ответы [ 3 ]

5 голосов
/ 19 марта 2012

объявить этот класс

 public class Book
 {
      string BookName;
      int bookCode;   
      decimal bookPrice;
      int bookQuanity
 }

Затем прочитайте из файла этот код:

 List<Book> Books = new List<Book>();
 using (StreamReader sr = new StreamReader(path)) 
 {
    while (sr.Peek() >= 0) 
    {
      string str;
      string[] strArray;
      str = sr.ReadLine();

      strArray = str.split(',');
      Book currentBook = new Book();
      currentBook.bookCode = strArray[0];
      currentBook.BookName = strArray[1];
      currentBook.bookPrice = double.parse(strArray[2]);
      currentBook .bookCode = int.parse(strArray[3]);

      Books.add(currentBook);





    }
 }


//listbox = the name you gave your listbox
          listbox.DataSource = Books;
          listbox.ValueMember = "bookCode";
          listbox.DisplayMember = "BookName";
1 голос
/ 19 марта 2012

Я бы сначала создал класс для Книги

public class Book
{
  public int BookCode { set;get;}
  public string BookTitle { set;get; }
  public decimal BookPrice { set;get}
  public int Quantity { set;get;"

}

Считайте из вашего источника данных (в данном случае текстовый файл) и сохраните его в Списке наших Книжных Классов

List<Book> bookList=new List<Book>();
bookList=BookManager.GetBookList();  // gets the list of books read from the text file.

Сохраните это в своей глобальной области видимости, чтобы вы могли получить к нему доступ любым из ваших методов в форме.

Если вы хотите получить доступ к определенным данным о книге, используйте Linq, чтобы получить ее

var book=(from p in bookList where p.BookCode=2).FirstOrDefault();
if(book !=null)
{
  lblPrice.Text=book.BookPrice.ToString();
}

Чтобы поместить BookTitles в поле списка, вы можете указать DataTextField как BookTitle при его привязке.

 lstBooks.DataSource=bookList;
 lstBooks.DataValueField="BookCode";
 lstBooks.DataTextField="BookTitle ";
 lstBooks.DataBind();

Чтобы прочитать файл из текстового файла и заполнить его списком объектов Book, сделайте что-нибудь подобное

public List<Book> GetBookList()
{
  List<Book> objBooks=new List<Book>();

  using (StreamReader file = new StreamReader(@"C:\dataist.txt"))
        {
            while ((line = file.ReadLine()) != null)
            {

                char[] delimiters = new char[] { ',' };
                string[] parts = line.Split(delimiters);

                 Book objBook=new Book();
                 objBook.BookCode=parts[0];
                 objBook.BookTitle =parts[0];
                 objBook.BookPrice =Convert.ToDecimal(parts[0]);
                 objBook.Quantity =Convert.ToInt32(parts[0]);

                 objBooks.Add(objBook);

            }

            file.Close();
        }

return objBooks;
}

Если возможно, я сохраню детали книги в таблице базы данных. Это проще в управлении и обслуживании, и мне не нужно беспокоиться о чтении и записи в файл.

Я предполагаю, что вы делаете это для приложения Windows Form.

0 голосов
/ 15 ноября 2018
             Book objBook = new Book();
             objBook.BookCode=Convert.ToInt32(parts[0]);
             objBook.BookTitle =parts[0];
             objBook.BookPrice =Convert.ToDecimal(parts[0]);
             objBook.Quantity =Convert.ToInt32(parts[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...