如何使用IndexOf和SubString从文件中检索文本?它不起作用

时间:2012-02-25 14:23:23

标签: c#

这是代码:

private void retrivingText1()
{
   string startTag = "zethrone1_03510";//"<Translation>";
   string endTag = "-2.8";//"</Translation>";

   int startTagWidth = startTag.Length;
   int endTagWidth = endTag.Length;
   index = 0;

   w = new StreamWriter(@"d:\retrivedText1.txt");

   while (true)
   {
      index = f.IndexOf(startTag, index);

      if (index == -1)
      {
         break;
      }

      // else more to do - index now is positioned at first character of startTag 
      int start = index + startTagWidth;
      index = f.IndexOf(endTag, start + 1);

      if (index == -1)
      {
         break;
      }

      // found the endTag 
      string g = f.Substring(start, index - start);
      w.WriteLine(g);
   }

   w.Close();
}

我要检索的文件中的第一项工作是Hallo?,它位于zethrone1_03510之后,但在zethrone1_03510Hallo?之间有两个空格,所以我'我在新的文本文件中获取它,如Hallo?

我希望Hallo? zethrone1_03510 -2.8之后没有Hallo?这是一个问题。

第二个问题是在文件的末尾有一个文本-2.8所以我想从第一个Hallo?中检索所有文本,包括它直到文件结尾或直到最后-2.8包括它。由于LastIndexOfIndexOf

之后有更多地方

我尝试使用{{1}}代替{{1}},但它不起作用。

我知道还有其他方法,但我想用我的代码来修复/修复我的代码而不使用其他代码方式。这有什么不对吗?

感谢。

1 个答案:

答案 0 :(得分:1)

对于您的第一个问题,您可以使用Trim()方法来摆脱空间。您可以修剪结果字符串,如:(" Hallo").Trim();variable.Trim();,这会产生“Hallo”。

LastIndexOf应该可以解决您的第二个问题。你可以使用int position = f.LastIndexOf(endTag);在找到文本后,你应该从循环中断开,这样你就没有无限循环。

http://msdn.microsoft.com/en-us/library/0w96zd3d.aspx

private void retrivingText1()
{
    string startTag = "zethrone1_03510";//"<Translation>";
    string endTag = "-2.8";//"</Translation>";
    int startTagWidth = startTag.Length;
    int endTagWidth = endTag.Length;
    index = 0;
    w = new StreamWriter(@"d:\retrivedText1.txt");
    while (true)
    {
        index = f.IndexOf(startTag, index);
        if (index == -1)
        {
            break;
        }
        // else more to do - index now is positioned at first character of startTag 
        int start = index + startTagWidth;
        index = f.LastIndexOf (endTag, start + 1);
        if (index == -1)
        {
            break;
        }
        // found the endTag 
        string g = f.Substring(start, index - start + endTagWidth).Trim(); //Trim the founded text so the start and ending spaces are removed.
        w.WriteLine(g);
        //break so you dont have an endless loop
        break;
    }
    w.Close();
}