我正在尝试从文本文件中提取子字符串,将这些子字符串批量保存到数组中。我尝试了以下变体。这会将所有选定的字符串输出到屏幕,但仅将最终输出保存到变量中。有没有办法模仿 outvariable 中 =+ 运算符的功能,以便所有项目都存储在数组中?
$FILES = ls "*.txt"
foreach($f in $FILES){
$in=Get-Content $f
$in | Foreach { Select-String -Path "$f" -Pattern "Ad ID" -outvariable
array1 }}
如果我的策略被误导,将子字符串拉入数组的总体目的是拥有这些文本文件的多个独立子字符串数组。然后,我将把这些值连接成一个 csv。我正在尝试提取元素而不是重新排列文本文件,因为文本文件中的子字符串顺序不同。例:
Txt文件一:
Ad Id: xxxx
Ad Text: blah blah
Ad placement: spaceship
Txt文件二:
Ad Id: yyyy
Ad placement: zoo
Ad Text: blah blah
最终期望的结果(除了元素的顺序外,这部分工作(
CSV 文件
xxxx, spaceship, blah blah
yyyy, zoo, blah blah
这是构建您正在谈论的数组的一种方法。我不认为这是解决这个问题的最好方法。这不会对结果的顺序执行任何操作,也不会创建.csv文件。
$FILES = Get-ChildItem -File -Filter "*.txt"
$array1 = $()
foreach($f in $FILES) {
Get-Content -Path $f |
Select-String -Pattern "Ad Id.*" |
ForEach-Object { $array1 += @($_.Matches.Value) }
}
$FILES.Count
$array1.Count
$array1
试试这个:
$files = ls "*.txt"
$dictionary = @{}
foreach($f in $files) {
$in = Get-Content $f
$in.Split([Environment]::NewLine) | ForEach-Object {
$key,$value = $_.Split(':')
$dictionary[$key] = $value
}
$dictionary['Ad Id'] + ', ' + $dictionary['Ad placement'] + ', ' + $dictionary['Ad Text'] | Out-File -FilePath '.results.csv' -Append
}
排序输出:
$files = ls "fil*.txt"
$dictionary = @{}
[System.Collections.Generic.List[String]]$list = @()
foreach($f in $files) {
$in = Get-Content $f
$in.Split([Environment]::NewLine) | ForEach-Object {
$key,$value = $_.Split(':')
$dictionary[$key] = $value
}
[void]$list.Add( $dictionary['Ad Id'] + ', ' + $dictionary['Ad placement'] + ', ' + $dictionary['Ad Text'] )
}
[void]$list.Sort()
$list | Out-File -FilePath '.results.csv' -Append
另一种略有不同的方法。
- 正则表达式解析$Line并创建一个变量,其名称在冒号之前(不带
Ad
(并评估后面的内容 - 在每个处理的文件之后,var 将作为自定义对象输出
$Data = ForEach ($File in (Get-ChildItem File*.txt)){
$Id,$Text,$Placement="","",""
ForEach ($Line in (Get-Content $File)){
If ($Line -Match "AD (?<Label>.*?): (?<Value>.*)"){
Set-Variable -Name "$($Matches.Label)" -Value $Matches.Value
}
}
[PSCustomObject]@{ID = $Id
Placement = $placement
Text = $Text}
}
$Data
$Data | Export-CSv ".Result.csv" -NoTypeInformation
示例输出:
ID Placement Text
-- --------- ----
xxxx spaceship blah blah
yyyy zoo blah blah