从文本文件中搜索字符串并显示所选行

时间:2014-02-01 14:41:14

标签: c#

我是C#的新手,现在正忙着使用airTicket预订系统项目。 我必须从文本文件中搜索预订编号并显示预订详细信息。

这将是我在文本文件中的记录。

  

预订号码:KW2MSMB30

     

名称:测试

     

年龄:21

     

Passport Num:测试

     

航空公司:马来西亚航空公司

     

出发地:马来西亚

     

返回:新加坡

     

出发日期:2014年2月19日,星期三

     

退货日期:空

     

Travaller:1(成人)1(儿童)1(婴儿)

     

服务类别:商务舱

     

旅行:一次旅行

在我输入预订编号并单击“确定”按钮后,它将显示标签上的详细信息。

这就是我的代码:

int counter = 0; string line;
        bool writeNextLine = false;
        StringBuilder sb = new StringBuilder();

        // Read the file and display it line by line.              
        using (System.IO.StreamReader file = new System.IO.StreamReader("record.txt"))
        {
            while ((line = file.ReadLine()) != null)
            {
                if (line.Contains(txt_SearchBooking.Text))
                {
                    // This append the text and a newline into the StringBuilder buffer       
                    sb.AppendLine(line.ToString());

                    lbl_result.Text += sb.ToString();
                }

            }
        }

但这仅显示我的第一行,即预订号码。 我该怎么做才能显示所有细节?

抱歉我的英语很差,希望你们明白这一点。

4 个答案:

答案 0 :(得分:1)

这是因为第一行包含您的预订编号,而if子句无法帮助您获取更多详细信息。

while ((line = file.ReadLine()) != null)
{
      if (line.Contains(txt_SearchBooking.Text)) //Will always match line Booking Number :KW2MSMB30
      {
            // This append the text and a newline into the StringBuilder buffer       
            sb.AppendLine(line.ToString());
            lbl_result.Text += sb.ToString();
      }
}

如果您想要做的是在找到预订编号后循环上线,然后打破下一个预订编号。

    bool isBookingRecordFound = false;
    while ((line = file.ReadLine()) != null)
    {
          if (line.Contains(txt_SearchBooking.Text)) //Will always match line Booking Number :KW2MSMB30
          {
               isBookingRecordFound = true; //True here will ensure there was a record found
               sb.AppendLine(line.ToString());
               while ((line = file.ReadLine()) != null)
               {
                   if (line.Contains("Booking Number :"))
                       break;

                   sb.AppendLine(line.ToString());
               }
          }
          lbl_result.Text = sb.ToString();
    }

    if (!isBookingRecordFound)
       MessageBox.Show("There was no matching booking number");

恕我直言,你应该避免使用文件存储数据和访问它的方式。 为什么不考虑使用SQL?

恕我直言,它不是关于C#或SQL。如果您正在编程,首先要了解您的要求,然后检查您是否处理了大量复杂数据,选择正确的工具如SQL,学习并开始。除非这只是学习C#,否则你仍然可以做到这一点,但不是一个优选的良好过程。

更新:为了更多地了解C#和SQL的使用情况,有许多在线文章。您可以从这开始:http://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C

答案 1 :(得分:0)

正如其他一些人所说,你真的应该研究一下数据库解决方案。 C#可以使用LINQ轻松地从数据库中提取数据。 LINQ将返回您的数据库查询作为可以轻松操作和显示的对象。

我将从LINQ开始。 http://msdn.microsoft.com/en-us/library/bb397926.aspx

有很多资源可用于如何获得简单的数据库。

答案 2 :(得分:0)

使用Files存储数据不是一个好习惯,我建议您使用DataBase来存储数据,因为它可以让您以高效的方式存储它,并为您提供{ {1}}您可以毫不费力地获取所需信息。

如果您的文件只包含一个预订信息,您可以尝试以下代码:

试试这个:

SQL

答案 3 :(得分:0)

我认为没有必要告诉你有关数据库的信息。因此,如果我们有一个文本文件,让我们使用它:

while ((line = file.ReadLine()) != null)
        {
            if (line.Contains(txt_SearchBooking.Text))
            {
                lbl_result = ReadBooking(file);
            }

        }

然后添加一个新方法:

string ReadBooking(StreamReader file) 
{
     StringBuilder sb = new StringBuilder();
     while ((line = file.ReadLine()) != null) || (line.Contains("Booking Number :"))
           {
               sb.AppendLine(line.ToString());

           } 
     return sb.ToString();        
}