如何使用if语句设置数组项

时间:2019-04-18 17:07:51

标签: powershell

我试图遍历管道描绘的文件。
文件的每一行看起来都是这样

123456|Doe Jean|2019/04/16|NOTICE_xxx|pdfname_1.pdf

NOTICE_xxx可能是大约10个三位数字之一。我当前正在遍历文本文件的每一行,将每一行拆分为一个数组$linearray,并想用该数组中的其他一些文本替换NOTICE_xxx。当我运行脚本时,出现此错误

  

您不能在空值表达式上调用方法。   在C:\ test \ ArchiveNotice_Index_Maker.ps1:12 char:8   + if($ linearry.Contains('NOTICE_320')){$ linearray [3] =“ Notc-Notic ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [],RuntimeException       + FullyQualifiedErrorId:InvokeMethodOnNull

我尝试使用if elseif语句,但似乎不起作用。

#Set Fold Directory
$fileDirectory = "C:\test\"
#Loop though each line in file
foreach($line in Get-Content -Path $fileDirectory\index.txt){
$splitter = "|"
$linearray = $line.Split($splitter)

#Replace Notice Type With Notice Name
if($linearry.Contains('NOTICE_320')){$linearray[3] = "Notice Name 1"}
    elseif($linearry.Contains('NOTICE_322')){$linearray[3] = "Notice Name 2"}
    elseif($linearry.Contains('NOTICE_333')){$linearray[3] = "Notice Name 3"}
    elseif($linearry.Contains('NOTICE_351')){$linearray[3] = "Notice Name 4"}
    elseif($linearry.Contains('NOTICE_370')){$linearray[3] = "Notice Name 5"}
    elseif($linearry.Contains('NOTICE_372')){$linearray[3] = "Notice Name 6"}

  $noticeType = $linearray[3]

    write-host("$noticeType") 
}

1 个答案:

答案 0 :(得分:0)

如Lee Dailey所建议,可以通过将文件视为管道分隔的CSV文件(听起来像这样)来简化此过程。我还建议使用sum语句,而不要使用大量的Switch语句。假设您没有标题,则可以执行以下操作:

If/ElseIf

如果您确实有标头,则可以省略#Set Fold Directory $fileDirectory = "C:\test\" #Import data $Data = Import-Csv -Path $fileDirectory\index.txt -Delimiter '|' -Header 'ID','Name','Date','Notice','File' #Loop though each line in file, and update Notice field Switch ($Data){ {$_.Notice -eq 'NOTICE_320'}{$_.Notice = "Notice Name 1"} {$_.Notice -eq 'NOTICE_322'}{$_.Notice = "Notice Name 2"} {$_.Notice -eq 'NOTICE_333'}{$_.Notice = "Notice Name 3"} {$_.Notice -eq 'NOTICE_351'}{$_.Notice = "Notice Name 4"} {$_.Notice -eq 'NOTICE_370'}{$_.Notice = "Notice Name 5"} {$_.Notice -eq 'NOTICE_372'}{$_.Notice = "Notice Name 6"} } 部分,并更新-header以匹配标头名称。

或者,您可以使用哈希表来设置以下值:

.Notice

同样,标题,不包含标题,就像第一个示例一样。