从文本文件中读取,并将每条单独的行拆分为不同的数组或列表

时间:2012-03-19 01:03:51

标签: c# design-patterns c#-4.0

我正试图找出解决程序问题的最佳方法。基本上,我有一个包含书籍代码(1,2,3等)的列表框。 1,2,3代表3本不同的书。我有一个文本文件,其中包含以下信息:

文本文件格式:
bookCode,bookTitle,bookPrice,quantityofBooks

文本文件虚拟信息:
1,第一册,第22册,第5页 2,第二册,第10册,第3册 3,书3,5,15

我并不总是知道这个文本文件中会有多少行。我要做的是分割每一行,并将每一行放入某种数组或列表中,并能够访问这些单独列表中的每个项目(例如:第一册,第二册,所以我可以将它们放入列表框中)例如,有人点击列表框中的“Book Two”,我的标签将随着Book Two的价格而变化。

如何将bookTitle(第一册,第二册等)放入列表框,如何将每一行拆分为单独的列表,将该行的每个项目拆分成一个列表?

我不太确定我已经解释了我想要的内容以及可以解释的内容。如果这令人难以置信,我很抱歉。

3 个答案:

答案 0 :(得分:5)

声明此类

 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 :(得分:1)

我会先为本书创建课程

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

}

从您的数据源(在本例中为文本文件)中读取并将其存储在我们的Book类的列表中

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放到List框中,可以在绑定时将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窗体应用程序执行此操作。

答案 2 :(得分:0)

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