【问题标题】:Can you convert a string with brackets and array formatting into an array?您可以将带有括号和数组格式的字符串转换为数组吗?
【发布时间】:2017-11-22 08:49:47
【问题描述】:

我正在处理一个 CSV 文件,其中一列是具有数组格式的字符串的单元格。以下是访问这些单元格的样子:

$csv = Import-Csv $filelocation
foreach ($line in $csv)
{
   Write-Host $line.ColumnName
}

输出:

[属性=[值1,值2,值3]] [属性=[值1,值2]] ...

可以看到每个单元格都输出一个带有数组结构的字符串。我想将每个单独的字符串视为带有Property[0] = value1 等的数组。

有没有简单的方法来做到这一点?否则,我认为我需要使用 Reg Ex。

【问题讨论】:

  • 您提供的示例输出似乎暗示属性值是字符串。如果是这样,那么如果字符串包含逗号,那么使用正则表达式将会很困难。能否提供 CSV 文件的实际内容?
  • 我无法共享整个文件,我认为它包含敏感数据,但这里是使用原始文本编辑器从中获取的部分 sn-p:,,,,,"[AsymmetricKey=[]]","[AppAddress=[[AddressType=Reply,Address=urn:ietf:wg:oauth:2.0:oob]]]","[AppAuxiliaryId=[]]",,,, 在这里您可以看到一堆空列以及其中一些“类似数组”的字符串。
  • 如果属性值包含逗号会怎样?
  • 我希望能够像一系列字典一样导航。类似:foreach($value in $line.ColumnName.AppAddress) { write-host $value.AddressType } 会为该行返回“回复”。
  • 如果属性值包含逗号会怎样?即[Property=[value1,"value2a,value2b",value3]]。然后,如果它包含"[Property=[value1,"value2a,value2b","value""3"""]]?

标签: arrays powershell csv


【解决方案1】:

你尝试做这样的事情:

$csv = Import-Csv Path:\testing!.csv -Header V1

foreach ($line in $csv) {
    $obj = New-Object -TypeName PSObject -Property @{
        First = $line
    } #| select First #
    @{Name='First';Expression={($_.First).Split(";")[1]}}
    $obj1 = $obj | select -ExpandProperty First
    $obj1.V1
}

【讨论】:

  • 这如何将"[Property=[value1,value2,value3]]"解析成数组?
【解决方案2】:

哦!抱歉...没有看到文件内容:,,,,,"[AsymmetricKey=[]]","[AppAddress=[[AddressType=Reply,A‌​ddress=urn:ietf:wg:o‌​auth:2.0: oob]]]","[A‌​ppAuxiliaryId=[]]",,‌​,, 好的...如果所有文件内容都像这样,我们可以这样做:

$patch = get-content 'D:\test\testing!.csv'

$pl = $patch.Length - 1

for ($i=0 ; $i -le $pl ; $i++) {

$patch[$i].Replace(",,,,,","").Replace(",,‌​,,","").Replace("Reply,A‌​ddress","Reply.A‌​ddress").Split(",")[0]
$patch[$i].Replace(",,,,,","").Replace(",,‌​,,","").Replace("Reply,A‌​ddress","Reply.A‌​ddress").Split(",")[1]
$patch[$i].Replace(",,,,,","").Replace(",,‌​,,","").Replace("Reply,A‌​ddress","Reply.A‌​ddress").Split(",")[2]
$patch[$i].Replace(",,,,,","").Replace(",,‌​,,","").Replace("Reply,A‌​ddress","Reply.A‌​ddress").Split(",")[3]
}

【讨论】:

    【解决方案3】:

    如果你想搜索一些信息,认为它可以工作(但不确定):

    $patch = get-content 'D:\test\testing!.csv' $pl = $patch.Length - 1

    for ($i=0 ; $i -le $pl ; $i++) {
    
    $regex = "urn:ietf:wg:o‌​auth:2.0:o2b"
    
    $val = $patch[$i].Replace(",,,,,","").Replace(",,‌​,,","").Replace("Reply,A‌​ddress","Reply.A‌​ddress").Split(",")[1]
      if ($val.Contains($regex)) 
      {
     $val
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2019-02-01
      相关资源
      最近更新 更多