Powershell:从文本文件获取数据
大家好, 我正在尝试获取每个组的批准者列表。下面的代码是我正在尝试进行的一些编码的示例 预期产出 有什么线索吗 多谢各位Powershell:从文本文件获取数据,powershell,Powershell,大家好, 我正在尝试获取每个组的批准者列表。下面的代码是我正在尝试进行的一些编码的示例 预期产出 有什么线索吗 多谢各位 $file = 'textfile.txt' $groups foreach($line in Get-Content $file){ $Lines = Get-Content $file $Output = For( $i = 0; $i -lt $Lines.Length; ++$i) { If($Line.StartsWith("# APPROVER:
$file = 'textfile.txt'
$groups
foreach($line in Get-Content $file){
$Lines = Get-Content $file
$Output =
For( $i = 0; $i -lt $Lines.Length; ++$i)
{
If($Line.StartsWith("# APPROVER:"))
{
$Lines[$i]
# Need to ignore lines in between
:LookForGroup Do
{
++$i
If( $Lines[$i].StartsWith($groups))
{
$Lines[$i]
""
Break LookForGroup
}
} While($true)
}
}
}
$Output
看起来您正在拆分并替换它,以便将文件内容分成单独的行。但是,默认情况下,“获取内容”会执行此操作。此外,在代码中,$line&$content将具有相同的值 我想尝试一下,但我认为您要做的是通过一系列行查找组名,在您发现“批准者”后,这些组名可能会出现在任意点上 我手动键入了一个文件,与您在修改后的问题中演示的内容非常匹配。提出了以下建议。这也是我脑子里想不出来的,但它似乎按照你上面的口述工作 注意:我添加$Groups数组只是为了模拟您在上次评论中所说的内容
$File = 'C:\Temp\InputTest.txt'
$Groups = @( 'Group1','Group2','Group3','Group4','Group5' )
$Lines = Get-Content $File
$Output =
For( $i = 0; $i -lt $Lines.Length; ++$i )
{
If( $Lines[$i] -match '^# approver' )
{
$Approver = $Lines[$i].split(':').Trim()[1]
# Need to ignore lines in between
:LookForGroup Do
{
++$i
ForEach ( $Group in $Groups )
{
If( $Lines[$i] -match "^$Group" )
{
$Approver + ' ' + $Lines[$i]
++$i
}
ElseIf( $Lines[$i] -match "(^$|\r\n|^######)")
{# Looking for a signal to move on...
Remove-Variable Approver #Maybe don't need this???
Break LookForGroup
}
}
} While($true)
}
}
#This will display the output, you can do something else with it...
$Output
我所做的是使用$I,有点像光标。一旦发现一个审批人行,我将遍历每个组,查看该行是否与组名匹配。如果匹配,我将按照您的指定输出审批人和组名。然后我增加$I,从而在文件中向前移动一行。如果行与组不匹配,我会检查一些特征,看看我们是否到达了一个部分的末尾(如您的示例所定义)。如果是,我将中断Do循环,这将导致For循环继续,注意:$I将保留为我们设置的值
我承认这是一个小麻烦让我知道…请不要添加文本作为图像链接,而是将它们作为格式化文本插入问题。当然,你有解决方案吗?输入太乱了。你如何决定什么是有效的组名,什么不是?嗨,西奥,输入已经编辑。嗨,史蒂夫,谢谢你的努力。我知道你在这件事上花了很多时间。不幸的是,上面的代码没有给我任何解决方案,我不知道为什么。我将用一些额外的图片重新编辑上面的代码并再次共享。请注意,我已经将我的组名保存在$group中。因此,我想使用Startswith运算符而不是match/eq。请查看上述代码并提出建议。谢谢我修改了答案以便更好地匹配你的描述。。。让我知道。。。注意:我之所以使用-match,是因为.StartsWith()区分大小写,与使用.ToLower()之类的东西进行规范化类似……嗨,史蒂文,谢谢你的努力。代码似乎运行良好。我得到的唯一问题是,有比我得到的结果更多的组。除此之外,数据和代码是正确的。请让我知道我们是否可以做出任何改进。如果没有真正的输入文件,我很难进一步改进。就像我说的,这个练习真的是我脑子里想不出来的。我想如果文件不完美。。。也许有些团体没有批准人;除非你能在某一点上依赖于模式,否则逻辑将失败。在这种非结构化的情况下,您必须了解您的输入,并对发现的每个异常进行代码调整。如果还有什么我能做的,请告诉我。谢谢。目的是寻找一个信号,我不需要继续寻找团体。由于没有真正的输入,再次受到部分抑制;正则表达式用于匹配一个空行或一整串哈希符号(因为审批人行也以哈希开头)。