2012-03-19 1 views
0

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

Формат текстового файла:
bookCode, BOOKTITLE, bookPrice, quantityofBooks

Текстовый файл фиктивная информация:
1, Книга первая, 22, 5
2, Книга вторая, 10, 3
3, Книга третья, 5, 15

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

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

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

+0

Split должен делать то, что вы ищете. string [] partArray = inputLine.Split (','); –

+0

Я хочу разбить строки, тогда я хочу сохранить эти строки в списке/массиве, и как только у меня будут сохранены строки, я хочу снова разделить на «,». Можно ли сделать это? –

ответ

4

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

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"; 
+0

Каков наилучший способ реализации прочитанного кода? Я использую открытую кнопку для активации этого процесса хранения. Код: private void openToolStripMenuItem_Click (object sender, EventArgs e) - но все, что я получаю, это: ссылка на объект требуется для нестатического поля, метод –

+0

Ah Да, я испортил его, должен быть currentBook.bookCode ect ... . not Book.bookCode edit made to answer –

+0

Ahh okay, теперь эти ошибки ушли, я получаю: Book - это «тип». Но используется как «переменная» - это строка: «Books.add (Book) ;» –

1

Я хотел бы создать класс для книги первого

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(); 

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

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; 
} 

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

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

Смежные вопросы