TL:DR
使用PowerShell,我想先用换行符(\ n)分割文本字符串,将其存储到数组中,然后用逗号将这些数组项分割成二维数组。我在访问(或可能创建)第二维信息时遇到麻烦。
信息:
我有以下字符串(存储为$services
):
SUPER-PC,Microsoft Office ClickToRun Service,ClickToRunSvc,C:\Program Files\Microsoft Office 15\ClientX64\OfficeClickToRun.exe /service,Auto
SUPER-PC,Adobe Acrobat Update Service,AdobeARMservice,C:\Program Files (x86)\Common Files\Adobe\ARM\1.0\armsvc.exe,Auto
所需结果:
我想将字符串分割两次:
我希望它的最终结果是我可以引用的二维数组。 (例如:
$services[0][0]
等。)使用的命令:
为了完成新的行拆分,我一直在使用以下命令:
$services= $services -split "\n"
要访问新数组结构中的拆分字符串,我可以执行以下操作:
$services[0]
PowerShell仅显示
$services
的第一行接下来,我使用:
$services[0] = $services[0] -split ','
问题:
当我尝试使用
$services[0][0]
访问第一个数组的第二维时,它显示S
,它是字符数组的第一个字符(“SUPER-PC”是字符串的开头),而不是我要创建的二维数组。我要去哪里错了?
最佳答案
-split
返回类型为string[]
的对象,这意味着您不能在不更改整个数组类型的情况下将字符串以外的任何东西分配给单个项目。
相反,当解析器看到您试图为现有$services
字符串数组中的项之一分配新数组时,它将自动将新数组转换为由$OFS
连接的字符串。由于$OFS
默认为空格,因此您实际上将以下字符串转换为:
SUPER-PC,Microsoft Office ClickToRun Service,ClickToRunSvc,C:\Program Files\Microsoft Office 15\ClientX64\OfficeClickToRun.exe /service,Auto
到这个字符串中:
SUPER-PC Microsoft Office ClickToRun Service ClickToRunSvc C:\Program Files\Microsoft Office 15\ClientX64\OfficeClickToRun.exe /service Auto
相反,创建一个全新的数组来保存结果数组:
$Services = @'
SUPER-PC,Microsoft Office ClickToRun Service,ClickToRunSvc,C:\Program Files\Microsoft Office 15\ClientX64\OfficeClickToRun.exe /service,Auto
SUPER-PC,Adobe Acrobat Update Service,AdobeARMservice,C:\Program Files (x86)\Common Files\Adobe\ARM\1.0\armsvc.exe,Auto
'@
# I prefer a more OS-agnostic newline pattern
$Services = $Services -split "`r?`n"
# Create a new array, defaults to Object[], so can contain arrays as well
$MultiDimensionalServices = @()
# Iterate over each string in $Services
foreach($ServiceString in $Services){
# use the unary array operator (,) to avoid flattening the array
$MultiDimensionalServices += ,@($ServiceString -split ',')
}
关于arrays - PowerShell将字符串拆分为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37795607/