在文本文件中搜索短语并在C#中读取下一个单词

时间:2017-07-30 13:26:52

标签: c#

我是C#编程的新手,我对我可以使用的所有工具感到有些不知所措,我找不到解决问题的方法。

我有一个包含大量信息的文本文件。我需要找到“[PRG]”短语并读取紧跟在这个短语之后的索引号,并且在下面的行中我需要跳过一个单词并阅读其余部分。

以下是文本文件示例:

  

[TYP] 1001 1
  [PRG] 0
  姓名 Bulka Fitnes 1/2
  图31
  ...
  ...
  ...
  [PRG] 12
  名称 TOST
  ...

我要做的是将每个名字分配给它的号码。我知道我可以使用 File.ReadAllLines 来创建每行的字符串表。
我只是无法弄清楚如何找到“[PRG]”短语,读取下一个单词,跳过一个单词并阅读其余部分。

我在c ++中的解决方案看起来像那样,我想在这里实现同样的目标

void CFtp::GetNamesList(std::string nameTab[])
{   
    int numberBuff;
    wstring textBuff;
    wstring PRG = L"PRG";
    wifstream file(m_localPath + "programs.prg", std::ios::binary);
    if (file.good()) {
        while (!file.eof()) {
            file >> textBuff;
            if (textBuff.find(PRG) != string::npos) {
                file >> numberBuff;
                file >> textBuff;
                getline(file, textBuff);
                textBuff.erase(0, 1);
                textBuff.erase(textBuff.length() - 1, 1);
                nameTab[numberBuff] = convert.to_bytes(textBuff);
            }
        }
    }
    file.close();
}

3 个答案:

答案 0 :(得分:0)

如果这有帮助,请告诉我......

string line;

// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
   List<string> ListOfParsedValues = line.Trim().Split(' ').ToList();
   if (ListOfParsedValues[0] == "[PRG]")
   {
      string desiredValue = //ListOfParsedValues.Last() ... or whatever you want here
   }
}

file.Close();

答案 1 :(得分:0)

类似的东西?

static void Read()
{
    string[] myFile = File.ReadAllLines(@"C:\1.txt");

    for(int index = 0; index < myFile.Length; index++)
    {
        if(myFile[index].Contains("[PRG]"))
        {            
            Console.WriteLine(myFile[index + 1].Substring(myFile[index + 1].IndexOf(' ')).Trim());
        }
    }
}

static void Main(string[] args)
{
    Read();
}

您可以编辑代码,例如:

  • 将文件路径传递给Read函数。
  • 显示结果的instad,您可以将值添加到List并从函数中返回列表...

以及更多......

答案 2 :(得分:-2)

作为控制台应用程序编写,只是为了显示您需要的内容,我会做类似的事情:

using System;
using System.Collections.Generic;
using System.IO;

namespace demo
{
    struct info
    {
        public int code;
        public string infoWanted;
    }
    class Program
    {
        public static Dictionary<String, Type> animals;
        static void Main(string[] args)
        {
            string [] lines = File.ReadAllLines(@"fullPath");
            List<info> myInfo = new List<info>();
            for (int i = 0; i < lines.Length; i++)
            {
                int targetCode = -1;
                string infoWanted = "";
                string l = lines[i];
                int prg = l.IndexOf("[PRG]");
                if (prg > -1)
                {
                    string subLine = l.Substring(prg + 6).Trim();
                    int whiteSpace = subLine.IndexOf(" ");
                    if (whiteSpace > 0)
                    {
                        subLine = subLine.Substring(0, whiteSpace);
                    }
                    if (!int.TryParse(subLine, out targetCode))
                    {
                        targetCode = -1;
                    }
                    if (targetCode > -1)
                    {
                        i++;
                        if (i == lines.Length)
                        {
                            break;
                        }
                        l = lines[i].Trim();
                        whiteSpace = l.IndexOf(" ");
                        if (whiteSpace > 0)
                        {
                            infoWanted = l.Substring(whiteSpace + 1);
                            //do something with target code and infoWanted    
                            info newInfo = new info();
                            newInfo.code = targetCode;
                            newInfo.infoWanted = infoWanted;
                            myInfo.Add(newInfo);
                        }
                    }
                }
            }
            foreach (info i in myInfo)
            {
                Console.WriteLine(i.code.ToString() + ": " + i.infoWanted);
            }
            Console.ReadKey();
        }
    }
}

请注意,在Leon的回答中使用Replace是危险的;首先,它假定要忽略的第一个词总是&#34; name&#34; (可能是这样),但其次,更重要的是,Replace会删除行中的所有匹配项。最好是保持安全并寻找第一个白色空间并在此之后采取一切措施。我的解决方案也允许&#34; [PRG]&#34;不是该行的第一部分。