我下载了一个 txt 文件,其中包含以下格式的数据:
"data1":111,"data2":22,"data3":3,"data4":4444444,以此类推。
我需要提取数据,以便:
$data1 = 111
$data2 = 22
$data3 = 3
...and so on.
我怎样才能做到这一点?
我下载了一个 txt 文件,其中包含以下格式的数据:
"data1":111,"data2":22,"data3":3,"data4":4444444,以此类推。
我需要提取数据,以便:
$data1 = 111
$data2 = 22
$data3 = 3
...and so on.
我怎样才能做到这一点?
假设文件与您描述的完全一样,您要提取的数据以逗号分隔。您可以使用Get-Content cmdlet检索文件内容。
Get-Content myFile.txt | Out-String
上面的命令通过管道将 Get-Content 的输出输出到单个字符串。否则,如果文件有多行,那么您可以检索字符串集合。在这种情况下,最好使用单个字符串,因为您可以split
将基于分隔值的字符串放入一个集合中。例如:
PS C:\> $string = '"data1":111,"data2":22,"data3":3,"data4":4444444'
PS C:\> $data = $string.split(",")
PS C:\> $data
"data1":111
"data2":22
"data3":3
"data4":4444444
从那里,您可以通过识别需要删除的内容将字符串分解为数值。看起来像冒号之前的所有内容,包括冒号。所以我们想要-replace
这些值,就像这样:
# Create an empty array to store the parsed data.
PS C:\> $parsedData = @()
# For each element in the $data array, replace content up to the first colon.
PS C:\> foreach($i in $data) { $parsedData += $i -replace ".*:", "" }
PS C:\> $parsedData
111
22
3
4444444
从那里开始,将这些数组元素重新分配给您想要的任何变量名都是微不足道的。您可能想查看about_Comparison_Operators或此关于字符串操作的博客,以更全面地介绍解决此类问题。
最后,这类键值对非常适合哈希表数据结构。当您对 powershell 感觉更舒服时,请务必检查一下。与您提出的解决方案相比,它最终会提供一种更简洁的方式来处理您的数据……尽管如果密钥只是“dataX”,那么一个简单的数组也可能很好。
使用 spilt,然后对 '"data2":22' 使用 split,然后获取子字符串。
#method 1
$rawTxt='"data1":111,"data2":22,"data3":3,"data4":4444444'
$rawTxt -split ',' | ForEach-Object {
$temp= $_ -split ':'
"{0}={1}" -f $temp[0].Substring(1,$temp[0].Length-2),$temp[1]
} | ConvertFrom-StringData
#method 2
$rawTxt = '"data1":111,"data2":22,"data3":3,"data4":4444444,"data5":589'
$regex = [regex] '"(?<name>\w*)":(?<value>\d*),?'
$match = $regex.Match($rawTxt)
while ($match.Success) {
[PSCustomObject]@{
Name = $match.Groups['name'].Value
Value = $match.Groups['value'].Value
}
$match = $match.NextMatch()
}
尝试这个
Get-Content "c:\temp\test.txt" -delimiter "," | ConvertFrom-String -Delimiter ":" -PropertyNames Part1, Part2