C# 从行文本生成包含意向项的列表

C# 从行文本生成包含意向项的列表,c#,asp.net,linq,C#,Asp.net,Linq,我有一些行文本。我想从本文中创建事件和意图活动,将它们放在列表中,然后将它们导入数据库。让我更具体一点。让我们假设我有以下句子: “在第1次聚会上,我们将喝些饮料,吃些美味的食物,玩ps3游戏。在第2次聚会上,我们将唱卡拉OK,并用嘻哈歌曲跳舞。” 我的愿望是: 事件1:第1方 Activitie1: take some drinks Activitie2: eat very good food Activitie3: play ps3 games 事件2:第2部分 Activitie1: d

我有一些行文本。我想从本文中创建事件和意图活动,将它们放在列表中,然后将它们导入数据库。让我更具体一点。让我们假设我有以下句子: “在第1次聚会上,我们将喝些饮料,吃些美味的食物,玩ps3游戏。在第2次聚会上,我们将唱卡拉OK,并用嘻哈歌曲跳舞。

我的愿望是:

事件1:第1方

Activitie1: take some drinks
Activitie2: eat very good food
Activitie3: play ps3 games
事件2:第2部分

Activitie1: do karaoke
Activitie2: dance with hip hop songs
到目前为止,我所做的是允许使用特殊字符“#,*”。因此,当我有*时,我产生一个事件,当我有*时,我产生一个活动。因此,我可以制作事件和活动,但我无法匹配它们。我需要找到一种方法来匹配(意图)生成的元素。我的代码:

string astring = Convert.ToString(lblrowtext.Text);          
if (astring.IndexOf("#") >= 0 || astring.IndexOf("*") >= 0)          
{               
  string[] Eventsarray;            
  string[] Activitiessarray;            
  List<string> listofEvents = new List<string>();            
  List<string> listofActivities = new List<string>();            
  Activitiessarray = Regex.Matches(astring, @"#([^\*#]*)").Cast<Match>()
                          .Select(m => m.Groups[1].Value).ToArray();   
  Eventsarray = Regex.Matches(astring, @"\*([^\*#]*)").Cast<Match>()
                     .Select(m => m.Groups[1].Value).ToArray();             
  if (Activitiessarray != null)            
  {                
     if (Activitiessarray.Count() > 0)             
     {
        listofActivities = new List<string>(Activitiessarray);
        ViewState["listofActivities"] = listofActivities;
        Repeater1.DataSource = listofActivities;
        Repeater1.DataBind();
     }

     if (Eventsarray != null)
     {
        if (Eventsarray.Count() > 0)
        {
           listofEvents = new List<string>(Eventsarray);
           ViewState["listofEvents"] = listofEvents;
           Repeater2.DataSource = listofEvents;
           Repeater2.DataBind();
        }
     }
  }
}
string astring=Convert.ToString(lblrowtext.Text);
if(astring.IndexOf(“#”)0 | | astring.IndexOf(“*”>)0)
{               
字符串[]事件数组;
字符串[]活动数组;
List LISTOFENTS=新列表();
List listofActivities=新列表();
activitiesarray=Regex.Matches(astring,@“#([^\*#]*)”).Cast()
.Select(m=>m.Groups[1].Value).ToArray();
Eventsarray=Regex.Matches(astring,@“\*([^\*\\\\\]*)”).Cast()
.Select(m=>m.Groups[1].Value).ToArray();
如果(ActivitiesArray!=null)
{                
如果(activitiesarray.Count()>0)
{
listofActivities=新列表(ActivitiesArray);
ViewState[“listofActivities”]=listofActivities;
Repeater1.DataSource=活动列表;
Repeater1.DataBind();
}
if(Eventsarray!=null)
{
如果(Eventsarray.Count()>0)
{
listofEvents=新列表(Eventsarray);
ViewState[“listofEvents”]=listofEvents;
Repeater2.DataSource=事件列表;
Repeater2.DataBind();
}
}
}
}

创建一个事件类,向其中添加活动。每次遇到*事件时,创建一个新的事件实例

Psuedo-C#:

类事件
{
字符串描述;
列出活动清单;
}
课堂活动
{
字符串描述;
}
列出ParseEventLines(IEnumerable allLines)
{
var result=新列表();
Event currentEvent=null;
foreach(所有行中的var行)
{
if(带(“*”)的行开始)
{
currentEvent=新事件{描述=行};
结果.添加(currentEvent);
}
else if(第行以“#”开头)
{
currentEvent.Activities.Add(新活动{Description=line});
}
}
返回结果;
}

创建一个事件类,向其中添加活动。每次遇到*事件时,创建一个新的事件实例

Psuedo-C#:

类事件
{
字符串描述;
列出活动清单;
}
课堂活动
{
字符串描述;
}
列出ParseEventLines(IEnumerable allLines)
{
var result=新列表();
Event currentEvent=null;
foreach(所有行中的var行)
{
if(带(“*”)的行开始)
{
currentEvent=新事件{描述=行};
结果.添加(currentEvent);
}
else if(第行以“#”开头)
{
currentEvent.Activities.Add(新活动{Description=line});
}
}
返回结果;
}

您可以通过以下方式实现:

  private static void Main(string[] args)
    {
        var updationIndex = 0;
        const string inputString = "On *Party1 #we will take some drinks, #eat very good food and #play ps3 games.# ";
        Func<string, char, char, string> getMyString = (givenString, skipTill, takeTill) =>
            {
                var opString =
                    new string(
                        givenString.ToCharArray()
                                   .SkipWhile(x => x != skipTill)
                                   .Skip(1)
                                   .TakeWhile(x => x != takeTill)
                                   .ToArray());

                updationIndex = inputString.IndexOf(givenString, StringComparison.CurrentCultureIgnoreCase)
                                + opString.Length;

                return opString;
            };

        var eventName = getMyString(inputString, '*', '#');
        Console.WriteLine("Event" + eventName);
        Console.WriteLine("Activities: ");
        while (updationIndex < inputString.Length)
        {
           var activity = getMyString(inputString.Remove(0, updationIndex), '#', '#');
           Console.WriteLine(activity);
           if (string.IsNullOrWhiteSpace(activity))
           {
               break;
           }

        }

}
private static void Main(字符串[]args)
{
var UpdateIndex=0;
const string inputString=“On*Party1#我们要喝点饮料#吃点好吃的东西#玩ps3游戏。#”;
Func getMyString=(givenString、skipTill、takeTill)=>
{
变量操作字符串=
新字符串(
givenString.ToCharArray()
.SkipWhile(x=>x!=skipTill)
.Skip(1)
.TakeWhile(x=>x!=takeTill)
.ToArray());
UpdateIndex=inputString.IndexOf(给定字符串、StringComparison.CurrentCultureIgnoreCase)
+opString.Length;
返回opString;
};
var eventName=getMyString(inputString,'*','#');
Console.WriteLine(“事件”+eventName);
Console.WriteLine(“活动:”);
while(updateIndex
您可以通过以下方式实现:

  private static void Main(string[] args)
    {
        var updationIndex = 0;
        const string inputString = "On *Party1 #we will take some drinks, #eat very good food and #play ps3 games.# ";
        Func<string, char, char, string> getMyString = (givenString, skipTill, takeTill) =>
            {
                var opString =
                    new string(
                        givenString.ToCharArray()
                                   .SkipWhile(x => x != skipTill)
                                   .Skip(1)
                                   .TakeWhile(x => x != takeTill)
                                   .ToArray());

                updationIndex = inputString.IndexOf(givenString, StringComparison.CurrentCultureIgnoreCase)
                                + opString.Length;

                return opString;
            };

        var eventName = getMyString(inputString, '*', '#');
        Console.WriteLine("Event" + eventName);
        Console.WriteLine("Activities: ");
        while (updationIndex < inputString.Length)
        {
           var activity = getMyString(inputString.Remove(0, updationIndex), '#', '#');
           Console.WriteLine(activity);
           if (string.IsNullOrWhiteSpace(activity))
           {
               break;
           }

        }

}
private static void Main(字符串[]args)
{
var UpdateIndex=0;
const string inputString=“On*Party1#我们要喝点饮料#吃点好吃的东西#玩ps3游戏。#”;
Func getMyString=(givenString、skipTill、takeTill)=>
{
变量操作字符串=
新字符串(
givenString.ToCharArray()
.SkipWhile(x=>x!=skipTill)
.Skip(1)
.TakeWhile(x=>x!=takeTill)
.ToArray());
UpdateIndex=inputString.IndexOf(给定字符串、StringComparison.CurrentCultureIgnoreCase)
+opString.Length;
返回opString;
};
var eventName=getMyString(inputString,'*','#');
Console.WriteLine(“事件”+eventName);
Console.WriteLine(“活动:”);
while(updateIndex