c# - 如何从 lineX 读取到 lineY C#

标签 c# substring text-parsing

我正在尝试解析 .log 文件并得到如下所示的部分内容:

2014-03-31 13:20:42,046 DEBUG 4B414D00000001184917.GetConventionalDataTask - GetCompressedLogResponse received: GetCompressedLogResponse: Id = GetCompressedLog, LoggerType = LoadProfileLogger, NumberOfRegisters = 5, NewLogId = 3281, Info = HeadOfLoggerIncluded

 LogID          RealTimeClock Logger_Status Logger_Data_Quality EnergyA14 EnergyA23 
          [KamDateTimeStatus]      [NoUnit]            [NoUnit]     [kWh]     [kWh] 
------ ---------------------- ------------- ------------------- --------- --------- 
  3264 02 2014-03-31T08:00:00          0000            00000000      0.17      0.00 
  3265 02 2014-03-31T08:15:00          0000            00000000      0.17      0.00 
  3266 02 2014-03-31T08:30:00          0000            00000000      0.17      0.00 
  3267 02 2014-03-31T08:45:00          0000            00000000      0.17      0.00  

2014-03-31 13:20:42,049 DEBUG 4B414D00000001184917.GetConventionalDataTask - Updated timestamp for logger LoadProfileLogger with time 31-03-2014 12:20:42

如何获取 2 个 GetConventionalDataTask 行之间的行,以便程序知道开始读取包含 (GetCompressedLogResponse returned:) 的行到包含 (Updated timestamp for logger) 的行?

这是我能达到的目标:

public static bool IsLoggerStart(string text)
    {
        return text.Contains("GetCompressedLogResponse received:");
    }
    public static bool IsLoggerEnd(string text)
    {
        return text.Contains("Updated timestamp for logger");
    }
    public static string GetLoggerType(string text)
    {
        return GetSubStrings(text, "LoggerType = ", ", ").FirstOrDefault();
    }
    public static string GetNumberOfRegisters(string text)
    {
        return GetSubStrings(text, "NumberOfRegisters = ", ", ").FirstOrDefault();
    }
    public static string GetNewLogId(string text)
    {
        return GetSubStrings(text, "NewLogId = ", ", ").FirstOrDefault();
    }

以及我创建的对象:

class CompressedLogResponse
{
    public LoggerAnnounce LoggerAnnounce { get; set; }
    public List<int> LogID { get; set; }
    public List<DateTime> RealTimeClock { get; set; }
    public List<int> LoggerStatus { get; set; }
    public List<int> LoggerDataQuality { get; set; }
    public List<double> EnergyA14 { get; set; }
    public List<double> EnergyA23 { get; set; }
}
class LoggerAnnounce
{
    public string LoggerType { get; set; }
    public int NumberOfRegisters { get; set; }
    public int NewLogId { get; set; }

}

感谢您提供的任何帮助:)

最佳答案

您可以使用正则表达式获取2个GetConventionalDataTask之间的文本

string input = File.ReadAllText("C:/log.txt");
Match m = Regex.Match(input, @"GetConventionalDataTask\s-\s(.*).GetConventionalDataTask", RegexOptions.Singleline);
Console.WriteLine(m.Groups[1]);

关于c# - 如何从 lineX 读取到 lineY C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26422950/

相关文章:

c# - Entity Framework : Error "Cannot bind argument to parameter ' Path' "on "database-update"

c# - 在异步 Azure 函数中捕获异常的位置

java - 从末尾开始 SubString 一个 URL?

Python - 从字符串列表中删除作为另一个元素的子字符串的任何元素

C# 如何根据多个范围索引生成新字符串

c# - 如何将文本框的borderBrush属性绑定(bind)到viewmodel中的属性,类型转换错误

c# - 如何正确使用 ExecutionStrategy?

php - 使用 PHP 解析 pdftk dump_data_fields?

python - 使用python从文件中提取数据并写入新文件

c - 在C中找到字符串并从左侧和右侧剪切一些符号