Pad alamat IP dengan 0 di depan - PowerShell

Saya ingin memasukkan alamat IP dengan 0

contoh
1.2.3.4 -> 001.002.003.004
50.51.52.53 -> 050.051.052.053

Mencoba ini:

[string]$paddedIP = $IPvariable
[string]$paddedIP.PadLeft(3, '0')

Juga mencoba split juga, tapi saya baru mengenal PowerShell...


person curiousPerson    schedule 24.09.2019    source sumber


Jawaban (2)


Anda dapat menggunakan kombinasi .Split() dan -join.

('1.2.3.4'.Split('.') | 
    ForEach-Object {$_.PadLeft(3,'0')}) -join '.'

Dengan pendekatan ini, Anda bekerja dengan string sepanjang waktu. Split('.') membuat elemen array di setiap . karakter. .PadLeft(3,'0') memastikan 3 karakter dengan angka nol di depan jika perlu. -join '.' menggabungkan array menjadi satu string dengan setiap elemen dipisahkan oleh ..


Anda dapat mengambil pendekatan serupa dengan operator format -f.

"{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f ('1.2.3.4'.Split('.') |
    Foreach-Object { [int]$_ } )

String format :dN mengaktifkan padding N (jumlah digit) dengan angka nol di depannya.

Pendekatan ini menciptakan array string seperti pada solusi pertama. Kemudian setiap elemen disalurkan dan dikonversi ke [int]. Terakhir, pemformatan diterapkan ke setiap elemen.

person AdminOfThings    schedule 24.09.2019

Untuk melengkapi jawaban bermanfaat AdminOfThings dengan alternatif yang lebih ringkas menggunakan -replace operator dengan blok skrip ({ ... }), yang membutuhkan PowerShell Core (v6.1+):

PSCore> '1.2.3.50' -replace '\d+', { '{0:D3}' -f [int] $_.Value }

001.002.003.050

Blok skrip dipanggil untuk setiap kecocokan regex \d+ (satu digit atau lebih), dan $_ di dalam blok skrip merujuk ke System.Text.RegularExpressions.Match yang mewakili pertandingan yang ada; properti .Value-nya berisi teks (string) yang cocok.

person mklement0    schedule 24.09.2019
comment
Ini barang bagus. Saya harus mengingat substitusi Scriptblock untuk versi Core. - person AdminOfThings; 24.09.2019
comment
@AdminOfThings: Ya, ini adalah fitur yang berguna, meskipun masih agak rumit, karena Anda perlu memahami struktur instance System.Text.RegularExpressions.Match yang dirujuk oleh $_. - person mklement0; 24.09.2019