提问人:Ollie99th 提问时间:2/10/2023 更新时间:2/10/2023 访问量:43
如何将字符串转换为可用格式
How to convert a string into a useable format
问:
我正在尝试自动化一个过程,本质上我们收到一个文件的错误代码和行号。我正在编写的脚本需要获取错误代码和行号,然后深入研究文件并检索行。
除了将错误代码和行号解析为某种可用的格式之外,一切都在工作,以便我可以遍历它们
格式为:
错误代码行号
1234 00232,00233,00787
3333 00444
1111 01232,2132
我试过了
$a = $a -replace "\s+","="
$a|ConvertFrom-StringData
但是,在循环浏览哈希表和处理偶尔的 CSV 值时,我画了一个空白。
我确实想过将整个事情转换为 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
太棒了,谢谢!我不得不稍微修改一下,因为实际的字符串有多个空格,但我只是调整了正则表达式并做了一些其他简单的替换。我从来没有走得那么远!
评论