arrays - PowerShell将字符串拆分为二维数组

标签 arrays string powershell multidimensional-array split

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/

    相关文章:

    c - 为什么数组变量等于它的地址?

    C - 打印一个充满 Unicode 符号的数组

    android - Android Studio-无法在通知中显示字符串

    arrays - 更新 redux 数组中的多个项目

    ios - 如何快速将数组映射到字典中的键?

    c - 在c中逐行读取文件

    c - 如何将字符串标记输入二维数组?

    powershell - 为什么 Powershell -replace 会改变对象的类型

    Powershell通过网络复制文件

    windows - 在使用 get-content 回显到屏幕时,如何启用 powershell 来解释 ansi 颜色代码?