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