1

「1.78M」「1.47B」などの数値文字列を整数変数に変換する簡単な方法を探しています。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

3

M==MBまたはM==を探しています1E6か? 前者の場合、PowerShell は KB、MB、GB、および TB を認識します。例:

C:\PS> Invoke-Expression "2MB"
2097152

Invoke-Expressionユーザー、ファイル、つまり信頼できないソースから文字列を取得している場合は、ここで大きな注意が必要です。実行には注意が必要です。文字列が"2MB; Remove-Item C:\ -Recurse -Force -Whatif -EA 0"であるとしましょうInvoke-Expression。ところで、私はここで -Whatif を追加して親切にしています。:-)

後者の場合は、regex -replace の後に強制を行うことができます。

C:\PS> [long]("3.34 B" -replace '(\d+)\s*(B)','$1E9')
3340000000
于 2012-09-12T17:47:11.533 に答える
1

100 万を表す M、10 億を表す B などのサフィックスをサポートするものは組み込まれていません。たとえば、「ファイル サイズ」サフィックスの組み込みサポートのみがあります。32KB -> 32768

あなたの問題に対処するための基本的なスクリプトバージョンでの私の試みは次のとおりです。これは、必要に応じて複数文字のサフィックスをサポートするか、サフィックスをまったくサポートしません。常に を返すため[int]、オーバーフローには注意してください (たとえば5.5B、int に収まらないため、エラーが発生します)。より大きな数をサポートするために、型を少し変更できます。

function ToNumber
{
   param([string] $NumberString)

   # add other multiplier suffixes to this table
   $multipliers = @{ 'B' = 1000000000; 'M' = 1000000; 'K' = 1000; '' = 1 }

   switch -regex ($numberString)
   {
      '^(?<base>[\d\.]+)(?<suffix>\w*)$'
      {
         $base = [double] $matches['base']
         $multiplier = [int] $multipliers[$matches['suffix']]

         if($multiplier)
         {
            [int]($base * $multiplier)
         }
         else
         {
            throw "$($matches['suffix']) is an unknown suffix"
         }
      }
      default
      {
         throw 'Unable to parse input'
      }
   }
}

C:\> ToNumber '1.7B'
1700000000
C:\> ToNumber '1.7K'
1700
于 2012-09-12T17:56:33.800 に答える