0

以下のコードでエラーが発生します。180文字を超えるテキストファイルの行を取得し、それらを新しい行に解析しようとしています。行に必要な初期データが含まれているため、最初の22文字を取得し、パート2から挿入する必要があります。

$data = get-content "C:\TestFile.txt"
$strAcct= @()
$strPart1= @()
$strPart2= @()
$strLength= @()
foreach($line in $data)
{
   if ( $line.length -gt 181)
   { $strLength = $line.length
     $strAcct += $line.substring(0,22) 
     $strPart1 += $line.substring(0,180)
     $strPart2 += $line.substring(181,$strLength)

     Add-Content "C:\TestFile-Output.txt" $strPart1
     Add-Content "C:\TestFile-Output.txt" $strAcct $strPart2



   } 
   Else {
   Add-Content "C:\TestFile-Output.txt" $line

   }

}
4

1 に答える 1

1

サブストリングはインデックスを取り、そのインデックスから始まる文字数を取ります。文字列にあるよりも多くの文字を取得しようとしているため、3番目の部分文字列爆弾。$ strLength-181に変更します。または、2番目のパラメーターを完全に省略して、最初のパラメーターのインデックスから始まる文字列の残りの部分だけを取得することもできます。

これを変える:

$line.substring(181, $strLength) 

これに:

$line.substring(181)

またはこれさえ:

$line.substring(181, $strLength - 181)
于 2012-09-21T17:51:44.373 に答える