gpt4 book ai didi

powershell - 获取内容并结合 “continued lines”

转载 作者:行者123 更新时间:2023-12-03 01:13:44 25 4
gpt4 key购买 nike

我有一个使用Get-Content将txt文件提取到数组中的数组,该数组使用_作为行继续标记,并且连续行的数量可以是一到多。所以文字可能看起来像这样...

Jrn.Directive "DocSymbol"  _
, "[Commercial-Default.rte]"
Jrn.Directive "GlobalToProj" _
, "[Commercial-Default.rte]", "Floor Plan: Level 1" _
, 0.01041666666667 _
, 1.00000000000000, 0.00000000000000, 0.00000000000000 _
, 0.00000000000000, 1.00000000000000, 0.00000000000000 _
, 0.00000000000000, 0.00000000000000, 1.00000000000000 _
, 0.00000000000000, 0.00000000000000, 0.00000000000000

我想重新格式化而不换行,并且我想知道是否有某种我看不到的超优雅方法?因为我认为前进的方式是$ array中的foreach $ line,并且如果EndsWith(“”)行将开始索引设置为lines索引,则向前搜索直到一行没有EndsWith(“”)为止设置结束索引,组合位并写入临时数组,然后在主循环继续读取行时跳过两个索引之间的差异。如果没有一些更详细的伪代码,这是有道理的。
无论如何,它看起来笨拙而笨拙,我想知道是否有更好的方法?

我最初的想法是Get-Content可能内置了一些内容,但是看起来您可以定义的唯一定界符是行尾(默认为\ n)。

因此,基于Anthony的输入,并意识到我需要首先合并行,然后删除不相关的行(开始时可能是多行)。
$target = 'Z:\Support\Px 3.0\RFO Benchmark\Journal Cleanup\journal.0010.txt'
$cleanFile = 'Z:\Support\Px 3.0\RFO Benchmark\Journal Cleanup\journal.0010.CLEAN.txt'

$sourceFile = Get-Content $target

$cleanData = @()


function Relavant {
[CmdletBinding()]
param (
[string]$line
)

$irrelevant = @('Jrn.Directive “Username"', 'Jrn.Directive "IdleTimeTaskSymbol"', 'Jrn.Directive "WindowSize"', 'Jrn.Size')

foreach ($item in $irrelevant) {
if ($line.StartsWith($item)) {
$relevant = $false
} else {
$relevant = $true
}
}

$relevant
}

$string = ''
$continue = $false
$tempData = $(foreach ($line in $tempData) {
if ($line -match '^[^,]') {
$string = ''
$continue = $true
}
if ($continue) {
$string += $line
}
if ($line.EndsWith('_')) {
$continue = $true
} else {
$continue = $false
$string -replace '\s?_'
}
})

# Remove comments & irrelevant lines and do basic formatting
foreach ($line in $tempData) {
$line = $line.Trim()
if (-not ($line.StartsWith("'"))) {
if (Relavant $line) {
$line = $line -replace " ,", ","
$line = $line -replace '\s+', ' '
$cleanData += $line
}
}
}

Add-Content $cleanFile "' Cleaned by PxJournalCleaner`n"
foreach ($line in $cleanData) {
Add-Content $cleanFile $line
}

它运行良好,但我怀疑我会再次采用替代方法,仅出于教育方面的考虑,否则就不再使用。我也不确定我是否完全了解Anthony的做法,所以我显然还有很多事情要做。谢谢大家!

最佳答案

您应该使正则表达式匹配更精确一些,但这对我有用

$file = gc 'C:\temp\new 1.txt'

$string = ''
$cont = $false
$result = $(foreach ($line in $file) {
if ($line -match '^[^,]') {
$string = ''
$cont = $true
}
if ($cont) {
$string += $line
}
if ($line.EndsWith('_')) {
$cont = $true
} else {
$cont = $false
$string -replace '\s?_'
}
})

$result

关于powershell - 获取内容并结合 “continued lines”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com