首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文件中搜索字符串并显示选定的行

从文本文件中搜索字符串并显示选定的行
EN

Stack Overflow用户
提问于 2014-02-01 14:41:14
回答 4查看 9K关注 0票数 0

我是C#的新手,现在正在忙一个airTicket预订系统项目。我必须从文本文件中搜索预订号码,并显示预订细节。

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

订票号码:KW2MSMB 30 名称:测试 年龄:21岁 护照号码:测试 航空公司:马来西亚航空 从马来西亚出发 返回:新加坡 出发日期:2014年2月19日星期三 返回日期:Null 旅行者:1人(成人)1人(儿童)1人(婴儿) 服务类别:商务舱 旅行:一次旅行

在我输入预订号码并单击OK按钮后,它将显示在标签上的详细信息。

这就是我的代码:

代码语言:javascript
复制
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();
                }

            }
        }

但这只显示了我的第一行,也就是预订号。我该怎么做才能展示所有细节?

为我糟糕的英语感到抱歉,希望你们能理解。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-01 14:51:21

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

代码语言:javascript
复制
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();
      }
}

如果你想做的是,一旦你找到预订号码,然后中断下一个订票号码,就会在线路上循环。

代码语言:javascript
复制
    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");

IMHO,您应该避免使用文件存储和访问数据的方式。为什么不考虑使用相同的SQL呢?

IMHO,这与C#或SQL无关。如果您正在编程,首先了解您的需求,然后检查您是否处理庞大的复杂数据,选择合适的工具,如SQL,学习和开始。除非这只是对C#的学习,在这里您仍然可以这样做,但不是一个首选的好过程。

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-01 14:54:11

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

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

关于如何获得一个简单的DB,有很多可用的资源。

票数 0
EN

Stack Overflow用户

发布于 2014-02-01 15:10:37

使用文件来存储数据不是一个好做法,相反,我建议您使用DataBase来存储数据,因为它将允许您以一种高效的方式存储数据,并且还提供了SQL,您可以通过它不费力地获取所需的信息。

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

试试这个:

代码语言:javascript
复制
StringBuilder sb = new StringBuilder();
if (File.ReadAllText("record.txt").Contains(txt_SearchBooking.Text))
 {
    String [] strLines=File.ReadAllLines("record.txt");
    foreach (String strLine in strLines)
    sb.AppendLine(strLine);
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21499392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档