【发布时间】:2017-03-09 10:28:15
【问题描述】:
我有一个烦人的问题,即第三方向我提供了一个文件,该文件基本上是一组巨大的类(C# 供参考)。我现在已经对这个类进行了几次修订,出于某种未知原因,第三方开发人员将文件中的类从一个修订版移到另一个修订版。这使得处理对以前版本的任何更改都变得困难且耗时。
public class Abc
{
...
}
public class Xyz
{
...
}
因此,我希望能够将他们交付的文件拆分为多个文件(以他们的类命名,例如 Abc.cs、Xyz.cs 等)。我会有更多文件,但至少我可以轻松查看任何更改,因为我可以在交付的文件上运行相同的脚本,并且可以对生成的文件执行差异以确定对该特定类的任何修订.
我在使用 Powershell 和 Regex 方面都有经验,我认为这在 PS 中是可能的,但老实说,我的脑袋正在碰壁。在我有些蹩脚的尝试中,我设法从文件中提取了每个结束类括号 (}),仅此而已。我还尝试对"\r\npublic class " 和"\r\n}" (\r\npublic class(.*)\r\n}\r\n) 之间的所有内容进行正则表达式,但这要么导致仅输出第一个类,要么移动整个文件,要么根本不工作。这清楚地表明我没有迭代 public class 的实例,而且我的示例非常类似于更适合拆分 CSV 而不是多行解决方案的解决方案。
应该注意的是,在所有情况下,public class 声明和右括号都在新行上,因此不应该有任何边缘情况会出错。该文件不是特别大(Get-Content 读取它根本不需要时间。我最初的研究建议我使用StreamReader,但这对我的用例来说是不必要的。
任何正确方向的指针都将在此不胜感激。
在此先感谢
【问题讨论】:
-
这可能是Roslyn 的工作。
标签: regex windows powershell scripting