在C#中的特定字符串后获取文本行

时间:2015-06-05 04:45:59

标签: c#

我正在阅读看起来像这样的文件的内容

[1]
Message=my string here
EffDate=1/1/1995
DeactDate= 
Modified= 
Note=

[2]
Message=my other string here
EffDate=1/1/1995
DeactDate= 
Modified= 
Note=

我希望在Message=之后获取字符串,但仅限于该行的结尾。我不想要任何日期或笔记或任何东西。

我希望将两个消息放入一个字符串数组或类似的东西。有没有办法做到这一点?

感谢任何帮助。

7 个答案:

答案 0 :(得分:2)

这是您需要的工作代码:

var d = File.ReadAllLines(filePath);
            var t = d.Where(g => g.Contains("Message"));
            string[] splited;
            foreach (var item in t)
            {
                splited = item.Split(new string[] { "Message=" }, StringSplitOptions.None);
                Console.WriteLine(splited[1]);
            }

如果您有任何疑惑,请告诉我。

答案 1 :(得分:1)

您可以使用以下方法。

  1. 阅读您的文件,最好使用方法ReadAllLines,请查看link

  2. 阅读完毕后,您将获得一系列字符串,每行一项。

  3. 写入方法检查文件中的行是否从消息
  4. 开始
  5. 如果是,请使用带有“=”符号的String.Split方法,并将索引1的元素添加到您的输出消息集合中。
  6. 我希望这是可以理解的。

答案 2 :(得分:1)

你可以做这样的事情

string[] getMessages(string file) {
    List<string> messages = new List<string>();

    string[] lines = file.ReadAllLines();       /* read the lines */
    foreach(string line in lines) {
        string[] parts = line.Split('=');
        string contentPart = String.Join("=", parts.Skip(1).ToArray();
        if(parts[0]=="Message")
            messages.Add(contentPart);
    }

    return messages.ToArray();
}
尽管记住这不是很优雅也不是有效的解决方案。最好解析整个文件,填充一组结构,然后对其进行操作。

给出一个理由为什么我使用了Split而不是其他任何东西:在比较并尝试列出的不只是Message时,使用{会变得无效{1}}或StartsWith

答案 3 :(得分:1)

如果您已经在阅读文件,那么您只需将第一行存储在包含字符串Message的字符串中,而不是将该字符串与=分开并存储在列表中。

string strFilePath = @"D:\Maraj\Work\Ajax.txt";
FileStream objFS = new FileStream(strFilePath, FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(objFS))
  {
    while (Sr.ReadLine() != null)
    {
    string line = Sr.ReadLine();
    if(line.Contains("Message=")
      {
        list.Add(line .Split('=')[1]);
      }
    }
     objFS.Close();
  }

答案 4 :(得分:0)

  1. 阅读文字中的所有行。
  2. 每行检查消息= 是否存在于行首。
  3. 如果是,请使用Substring()方法

    获取消息
        var messages = File.ReadAllLines("M:\\m.txt");
        List<string> result = new List<string>();
        foreach (var msg in messages)
        {
            var key = "Message=";
            if (msg.StartsWith(key))
                result.Add(msg.Substring(msg.IndexOf(key) + key.Length));
        }
    

答案 5 :(得分:0)

您只需要一个简单的for循环:

string[] messages = File.ReadAllLines("data.txt"); //read all lines

for (int i = 1; i < messages.Length; i = i + 7) //just get the line containing "Message"
{
    string message = messages[i].Split('=')[1];
    //now you have the message, save it where ever you want.
}

答案 6 :(得分:0)

这应该足够了:

string[] messages = File.ReadLines("fileName.txt")
                        .Where(line => line.StartsWith("Message="))
                        .Select(line => line.Split(new char[] { '=' }, 2)[1])
                        .ToArray();