如何将字符串转换为可用格式

How to convert a string into a useable format

提问人:Ollie99th 提问时间:2/10/2023 更新时间:2/10/2023 访问量:43

问:

我正在尝试自动化一个过程,本质上我们收到一个文件的错误代码和行号。我正在编写的脚本需要获取错误代码和行号,然后深入研究文件并检索行。

除了将错误代码和行号解析为某种可用的格式之外,一切都在工作,以便我可以遍历它们

格式为:

错误代码行号

1234 00232,00233,00787

3333 00444

1111 01232,2132

我试过了

$a = $a -replace "\s+","="
$a|ConvertFrom-StringData

但是,在循环浏览哈希表和处理偶尔的 CSV 值时,我画了一个空白。

我确实想过将整个事情转换为 CSV,但我遇到了我知识的边缘......

数组字符串 PowerShell 哈希表 数据操作

评论

0赞 Walter Mitty 2/10/2023
您可能需要考虑转换为每个条目都有一个错误代码和一个行号的 csv 文件。这将非常容易循环。

答:

1赞 Mathias R. Jessen 2/10/2023 #1

使用与空格匹配的正则表达式,后跟数字或大写字母,然后将所述匹配替换为分隔符,最后将生成的字符串解析为 CSV 文档:

# read target file into memory for later extraction
$fileContents = Get-Content C:\path\to\source\file.txt

# define error report, replace with `Get-Content` if data if coming from file too
$errorReport = @'
Error code Line number
1234 00232,00233,00787
3333 00444
1111 01232,2132
'@

# replace the middle space and parse as CSV
$errorMappingList = $errorReport -replace '(?-i) (?=\p{Lu}|\d)', '|' |ConvertFrom-Csv -Delimiter '|'

# go through each entry in the error mapping list
foreach($errorMapping in $errorMappingList){
    # go through each line number associated with the error code
    foreach($lineNo in $errorMapping.'Line Number' -split ','){
        # extract the line from the file contents, output 1 new object per line extracted
        [pscustomobject]@{
            ErrorCode  = $errorMapping.'Error code'
            LineNumber = $lineNo
            Line       = $fileContents[$lineNo - 1]
        }
    }
}

评论

0赞 Ollie99th 2/10/2023
太棒了,谢谢!我不得不稍微修改一下,因为实际的字符串有多个空格,但我只是调整了正则表达式并做了一些其他简单的替换。我从来没有走得那么远!