c#在文本文件中查找字符串然后执行某些操作?

时间:2015-11-02 20:54:39

标签: c#

好的,我在这里尝试做的是以下

       private void addgsc()
    {
        if (File.Exists(hud))
        {
            {
                string s = "    itemDef\n\r"
+ "{"
+ " name \"zombiecounter\"\n\r"
+ " rect         100 70 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM\n\r "
+ " textscale      .5\n\r"
+ " textstyle      ITEM_TEXTSTYLE_SHADOWED\n\r"
+ " textfont      UI_FONT_OBJECTIVE\n\r"
+ " textalign      ITEM_ALIGN_CENTER\n\r"
+ " forecolor      1 0 0 1\n\r"
+ " exp text      (\"Zombies Left: \" + dvarInt(\"zombie_counter\"))\n\r"
+ "  visible   when    (dvarInt(\"zombie_counter\") > 0);\n\r"
+ "decoration\n\r"
+ "}   ";

                string file = hud;
                List<string> lines = new List<string>(System.IO.File.ReadAllLines(file));
                int index = lines.FindLastIndex(item => item.Contains("playerscores"));
                if (index != -1)
                {
                    lines.Insert(index + 1, s);//""
                }
                System.IO.File.WriteAllLines(file, lines);
                MessageBox.Show("done");
            }

        }

我正在寻找像这样的代码中的一行

     itemDef
   {
      name         "playerscores"
      rect         0 0 100 0
      ownerdraw      CG_COMPETITIVE_MODE_SCORES
      visible         1
   } 

但是我想要做的是找到玩家得分,然后在最后找到最后一个}并将其添加到那里,因为目前它正在玩家分数下添加它但我不知道我怎么能得到它去找那个然后找到最近的}其中一个并在neath下添加它所以它在一个新的块中没有添加到玩家得分一个所以会想要类似下面的内容

image 1

1 个答案:

答案 0 :(得分:0)

我对所需的输出有点不清楚,因此下面的代码可能比您需要的更多,但应该让您走上正确的轨道。请原谅语法错误。

编辑:我重读了几次这个问题,并认为这就是你要找的。

var allLinesInFile = System.IO.File.ReadAllLines(file);
var isPlayerScore = false;
var linesToWrite = new List<string>();
var linesToAdd = new List<string> {
  "itemDef\n\r",
  "{",
  " name \"zombiecounter\"\n\r",
  //and so on
  "}"
};

foreach (var line in allLinesInFile)
{
  linesToWrite.Add(line);

  if (line.IndexOf("playerscores", StringComparison.OrdinalIgnoreCase) >= 0)
  { 
     //starting of data detected. 
     isPlayerScore = true;
  }
  else if (isPlayerScore == true && line.IndexOf("}") >= 0)
  {
     //end of data detected
     isPlayerScore = false;
     linesToWrite.AddRange(linesToAdd);
  }
}

System.IO.File.WriteAllLines(file, linesToWrite);
MessageBox.Show("done");