Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#解析输出的关键字行_C#_Parsing_Richtextbox - Fatal编程技术网

C#解析输出的关键字行

C#解析输出的关键字行,c#,parsing,richtextbox,C#,Parsing,Richtextbox,我们正在尝试对我们在正常维护周期外应用的Microsoft KBase更新进行更改日志。 我们想解析下面特定行的信息。样本如下: Operation : 1 ResultCode : 2 HResult : 0 Date : 10/7/2014 10:27:50 AM UpdateIdentity : System.__ComObject Title : Update

我们正在尝试对我们在正常维护周期外应用的Microsoft KBase更新进行更改日志。 我们想解析下面特定行的信息。样本如下:

Operation           : 1
ResultCode          : 2
HResult             : 0
Date                : 10/7/2014 10:27:50 AM
UpdateIdentity      : System.__ComObject
Title               : Update for Microsoft Silverlight (KB2977218)
Description         : This update to Silverlight improves security, reliability, accessibility support, startup performance, enhances line-of-business support and includes several fixes to better support rich internet applications. This update is backward compatible with web applications built using previous versions of Silverlight.
UnmappedResultCode  : 0
ClientApplicationID : AutomaticUpdates
ServerSelection     : 1
ServiceID           : 
UninstallationSteps : System.__ComObject
UninstallationNotes : 
SupportUrl          : http://go.microsoft.com/fwlink/?LinkID=105787
Categories          : System.__ComObject
我们期望的产出是:

Title               : Update for Microsoft Silverlight (KB2977218)
Date                : 10/7/2014 10:27:50 AM
Description         : This update to Silverlight improves security, reliability, accessibility support, startup performance, enhances line-of-business support and includes several fixes to better support rich internet applications. This update is backward compatible with web applications built using previous versions of Silverlight.
我正在尝试编写一个简单的C#应用程序,我们可以将原始数据粘贴到一个富文本框中,单击一个按钮,然后在另一个富文本框中获得所需的输出。有一种“关键字:数据”模式可能很有用

我已经创建了表单,并在表单上添加了元素。我试图找到一个方法,将搜索关键字,但这不会产生一个结果,我们寻求。我们希望关键字或行可以这么说,正如你所看到的描述可以是多行


我目前没有任何示例代码发布,因为我不知道从哪里开始这个任务。任何示例代码都有助于完成此任务。

您可以尝试以下
Regex
模式:

(?<=\b[KEYWORD]\b\s*:\s*).*
把它叫做:

string data = GetDataFromKeyword(textbox.Text, "Title");
模式说明:


(?我通常不喜欢基于regex的解决方案——几乎总是有一种更可读的方式来实现您的目标

像这样的东西应该会让你开始。还有很多重构的机会:

var keywords = new List<string>() { "Keyword1", "Keyword2", "Keyword3" };

var lines = File.ReadLines(@"c:\path\to\file.txt");

foreach (var line in lines)
{
    foreach (var keyword in keywords)
    {
        if (line.StartsWith(keyword))
        {
            // found a match, do something.
            // Split on ":"? etc.
        }
    }
}
var keywords=newlist(){“关键字1”、“关键字2”、“关键字3”};
var lines=File.ReadLines(@“c:\path\to\File.txt”);
foreach(行中的var行)
{
foreach(关键字中的var关键字)
{
if(行开始带(关键字))
{
//找到匹配的,做点什么。
//拆分为“:”等。
}
}
}

正如我所说的,非常快而且脏,但是1)它可以工作2)它可读,3)你可以做很多简单的重构。

它真的是多行的还是你只是猜测,因为你的文本就是这样包装的?在
描述:
之后的字符串中是否确实有
\n
字符?请注意,最新的编辑表明
Description
只是一条很长的线。有很多简单的方法可以做到这一点。您可以编写一个与[anything]:[anything]匹配的正则表达式,然后读取匹配项,只获取第一个元素与“title”或“date”或“description”匹配的正则表达式,或者在行尾(\r\n)和冒号(:)上使用split()标记它。您尝试过吗?还有:看起来你可以让PowerShell帮你解决这个问题。如果其事件日志详细信息,是否确实要提取记录,将其复制到文本框中,然后拆分?听起来有很多手工工作要做。@dbc和dominiczukiewicz-我只需要一个文本解析器来完成我试图为另一个对等方解决的任务。但是谢谢你的建议。如果在第一个文本框中粘贴了多个条目,该怎么办?这将只处理1个实例。因此,我似乎需要一种方法来计算不同的数据“块”,然后用循环分析每个数据块?@Deadphoenix如果多个条目意味着一个关键字的多个实例,那么您仍然可以使用正则表达式来完成。请参阅我编辑的答案。很抱歉,我仍在学习C#如何在列表中枚举。我的尝试没有成功。另外,当我输出时,我想以块的形式返回标题、日期和描述。只需使用
for
foreach
循环即可。
GetDataFromKeyword()
的结果只是一个字符串列表(匹配)。@Deadphoenix看到答案。如果您对它有深入的了解,一切都是可读的:)
private IEnumerable<string> GetDataFromKeyword(string source, string keyword)
{
    return Regex.Matches(source, string.Format(@"(?<=\b{0}\b\s*:\s*).*", keyword))
            .Cast<Match>().Select(match => match.Value.Trim());
}
var titles = GetDataFromKeyword(textbox.Text, "Title").ToArray();
var dates = GetDataFromKeyword(textbox.Text, "Date").ToArray();
var descriptions = GetDataFromKeyword(textbox.Text, "Description").ToArray();

for (int i = 0; i < titles.Count(); i++)
{
    string block = string.Format("Title: {0}, Date: {1}, Description: {2}", titles[i], dates[i], descriptions[i]);
    MessageBox.Show(string.Format("Block {0}: {1}", i+1, block));
}
var keywords = new List<string>() { "Keyword1", "Keyword2", "Keyword3" };

var lines = File.ReadLines(@"c:\path\to\file.txt");

foreach (var line in lines)
{
    foreach (var keyword in keywords)
    {
        if (line.StartsWith(keyword))
        {
            // found a match, do something.
            // Split on ":"? etc.
        }
    }
}