Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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#_.net - Fatal编程技术网

C# 如何从文本文件中提取单词

C# 如何从文本文件中提取单词,c#,.net,C#,.net,我有一个存储过程文本文件。我有很多表和列名 如何从文本文件中获取表名和列名 比如说 select t1.name, t2.roleid, t3.department, t4.country from dbo.user t1 inner join dbo.role t2 on t1.roleid = t2.roleid inner join dbo.tbldepartment t3 on t1.departmentid= t3.departmentid inner join dbo.country

我有一个存储过程文本文件。我有很多表和列名

如何从文本文件中获取表名和列名

比如说

select t1.name, t2.roleid, t3.department, t4.country from dbo.user t1 inner join
dbo.role t2 on t1.roleid = t2.roleid inner join dbo.tbldepartment t3 on t1.departmentid= t3.departmentid inner join dbo.country t4 on t1.countryid = t4.countryid
结果

Table name => dbo.user
Coulmn name => name

table name => dbo.role
column name =>roleid

Table name => dbo.tbldepartment
column name => departmentid

Table name =>dbo.country
column name => countryid
一些代码

string file = File.ReadAllText(@"E:\Projects\testApp\testApp\bin\Debug\file.txt");
string textAfterFrom = file.After(" from ");
string textBeforeFrom = file.Before(" from ");
string[] textArrayAfterSelect = textBeforeFrom.After("select").Split(',');

List<ColumnTableRelation> ListofTable = new List<ColumnTableRelation>();
ColumnTableRelation objRel = new ColumnTableRelation();

string[] splitTables = textAfterFrom.Split('\n');

foreach (string tableNames in splitTables)
{
   objRel = new ColumnTableRelation();
   if (!string.IsNullOrEmpty(tableNames) & !tableNames.Equals("\r"))
   {
       if (tableNames.Contains("dbo."))
       {
          if (tableNames.Contains("inner join"))
          {
            objRel.Tablename = tableNames.Between("inner join", " on ").Trim();
          }
          else
          {
            objRel.Tablename = tableNames.Before("\r").Trim();
          }
       }
       ListofTable.Add(objRel);
   }
}

foreach (var item in ListofTable)
{
   string[] stringArray = textArrayAfterSelect;
   string value = item.Tablename.After(" ");
   var matchingvalues = stringArray.Where(stringToCheck => stringToCheck.Contains(value));
   List<string> listString = new List<string>();
   foreach (var match in matchingvalues)
   {
      listString.Add(match);
   }
   item.ColumnNames = listString;
}
StringBuilder builder = new StringBuilder();
foreach (var item in ListofTable)
{
   builder.Append(Environment.NewLine);
   builder.Append("Table name => " + item.Tablename + Environment.NewLine);
   foreach (var columns in item.ColumnNames)
   {
      builder.Append("Column name => " + columns + Environment.NewLine);
   }
}
string yourResult = builder.ToString();
MessageBox.Show(yourResult);

不是免费的代码编写服务。您应该尝试自己编写代码。之后,如果你有问题,你可以张贴你已经尝试了一个明确的解释什么是不工作,并提供一个解决方案。我建议你读一个好的问题和答案。另外,请确保将.tables作为依赖项。您能否连接到sql server实例并实际创建这些存储过程,以便最终以某种方式访问它们的AST?如果您告诉我们您尝试了什么以及您可以使用哪些工具/库来解决这个问题,它仍然可以成为一个非常好的问题。请详细说明要求:您是否仅限于单语句过程,或者它们是否复杂?我曾经对表和视图这样做过一次,如果有一种方法可以在列级别上这样做的话,我会支持这样做,因为我有一个复杂的存储过程。因此,我只需要通过.net工具获得确切的表名和列名。相关词语。但是我搬不动这个谢谢你。代码运行正常。但这是一个小问题。如果我有子查询或插入语句。我得不到价值。请给我一个关于这个例子的建议@balaji???我在我的存储库中有子查询、更新语句、插入语句和删除查询procedure@balajisachin上面的代码将用于您昨天早些时候提到的最简单的情况。您可以根据需要修改此代码。另外,如果我必须创建一个您想要的输出,我肯定会使用SQL来实现,但是您提到您希望在中使用它c@SMTBCJ15现在我正在从旧的存储过程中获取表名和列名。我有100多个存储过程。所以我准备了一个从存储过程中获取表和匹配列名的工具
public class ColumnTableRelation
{
    public string Tablename { get; set; }
    public List<string> ColumnNames { get; set; }
}
select t1.name, t2.roleid, t3.department, t4.country from 
dbo.user t1 
inner join dbo.role t2 on t1.roleid = t2.roleid 
inner join dbo.tbldepartment t3 on t1.departmentid= t3.departmentid 
inner join dbo.country t4 on t1.countryid = t4.countryid