PowerShell'de Belirli Bir Konumdaki Bir Dizedeki Karakter Nasıl Değiştirilir?
Son zamanlarda, bir dizedeki bir karakteri belirli bir konumla değiştirme gereksinimi duyduğum bazı dize manipülasyonları üzerinde çalışıyordum. Bu eğitimde, farklı yöntemler kullanarak PowerShell'de belirli bir konumdaki bir dizedeki bir karakterin nasıl değiştirileceğini açıklayacağım.
Substring yöntemini kullanarak PowerShell'de belirli bir konumdaki bir dizedeki karakteri değiştirmek için dizeyi parçalara ayırabilir, karakteri değiştirebilir ve parçaları tekrar bir araya getirebilirsiniz. Örneğin, SSN 123-45-6789'daki son segmentin ilk rakamını 0 olarak değiştirmek için şunu kullanabilirsiniz:
$ssn = "123-45-6789"
$position = 7
$newChar = "0"
$newSsn = $ssn.Substring(0, $position) + $newChar + $ssn.Substring($position + 1)
Write-Output $newSsnBu yöntem, dizenin hedef konumdan önceki ve sonraki kısımlarını çıkarır ve yeni karakteri araya ekler.
PowerShell'de Belirli Bir Konumdaki Bir Dizedeki Karakteri Değiştirme
PowerShell, bir dizedeki belirli bir konumdaki karakteri değiştirmek için çeşitli yöntemler sağlar.
Size her yöntemi örneklerle göstereceğim.
Yöntem 1: Substring Yöntemini Kullanma
Substring yöntemi, dizeyi parçalara ayırmak, karakteri değiştirmek ve ardından parçaları tekrar birleştirmek için kullanılabilir.
İşte bir örnek.
Diyelim ki Sosyal Güvenlik Numaranız 123-45-6789 ve son bölümün ilk rakamını 0 ile değiştirmek istiyorsunuz.
$ssn = "123-45-6789"
$position = 7
$newChar = "0"
$newSsn = $ssn.Substring(0, $position) + $newChar + $ssn.Substring($position + 1)
Write-Output $newSsnBu örnekte $position 7'dir çünkü dize indeksleme 0'da başlar. Substring yöntemi, dizenin konumdan önceki ve sonraki kısımlarını çıkarmak için kullanılır ve ardından arasına yeni karakter eklenir.
Yukarıdaki PowerShell betiğini VS kodunu kullanarak çalıştırdım ve tam çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz:
PowerShell'de Sekme Karakterine Göre Bölünmüş Dizeyi Oku
Yöntem 2: Dizi Dizine Eklemeyi Kullanma
PowerShell, dizeleri doğrudan değiştirilebilen karakter dizileri olarak değerlendirmenize olanak tanır. Dizi indekslemeyi kullanarak bir dizedeki belirli bir konumdaki bir karakteri değiştirmenin bir örneğini burada bulabilirsiniz.
İkinci rakamı 8 olarak değiştirmek istediğiniz 90210 posta kodunu düşünün.
$zip = "90210"
$charArray = $zip.ToCharArray()
$charArray[1] = '8'
$newZip = -join $charArray
Write-Output $newZipBurada ToCharArray yöntemi, dizeyi bir karakter dizisine dönüştürerek her karaktere indeksiyle doğrudan erişime olanak tanır. İstenilen karakteri değiştirdikten sonra diziyi tekrar dizeye dönüştürmek için -join operatörü kullanılır.
Yukarıdaki PowerShell betiğini çalıştırdıktan sonra çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz.
Yöntem 3: Değiştirme Operatörünü Normal İfadelerle Kullanma
Daha karmaşık senaryolarda, bir dizede belirtilen konumdaki bir karakteri değiştirmek için -replace operatörünü normal ifadelerle birlikte kullanabilirsiniz.
Size bir örnek göstereyim.
(123) 456-7890 biçiminde bir telefon numaranız olduğunu ve alan kodunu 999 olarak değiştirmek istediğinizi varsayalım.
$phoneNumber = "(123) 456-7890"
$newPhoneNumber = $phoneNumber -replace '^\(\d{3}\)', '(999)'
Write-Output $newPhoneNumberBu örnekte, ^\(\d{3}\) normal ifadesi alan koduyla eşleşir ve -replace operatörü bunu (999) ile değiştirir. .
Yukarıdaki PowerShell betiğini VS kodunu kullanarak çalıştırdıktan sonra aşağıdaki ekran görüntüsünde görebileceğiniz çıktı.
PowerShell'de Belirli Bir Dizeyle Başlayan Satırları Bulma'yı Okuyun
Yöntem 4: Büyük Dizeler için StringBuilder'ı Kullanma
Büyük dizeler veya sık yapılan değişiklikler için StringBuilder'ı kullanmak daha verimli olabilir. Burada, StringBuilder kullanılarak PowerShell'de belirli bir konumdaki bir dizedeki bir karakterin nasıl değiştirileceğine dair bir örnek verilmiştir.
İşte bir örnek.
Belirli bir konumdaki bir karakteri değiştirmeniz gereken bir adres dizesi düşünün. Aşağıdaki gibi bir script yazabilirsiniz.
Add-Type -TypeDefinition @"
using System.Text;
public class StringBuilderHelper {
public static string ReplaceAtPosition(string input, int position, char newChar) {
var sb = new StringBuilder(input);
sb[position] = newChar;
return sb.ToString();
}
}
"@
$address = "1600 Pennsylvania Avenue NW, Washington, DC 20500"
$newAddress = [StringBuilderHelper]::ReplaceAtPosition($address, 5, 'X')
Write-Output $newAddressBu durumda, belirli bir konumdaki bir karakteri değiştirmek için StringBuilder'ı kullanacak bir C# yardımcı sınıfı tanımlarız. Büyük dizelerle çalışıyorsanız bu yöntemi kullanın.
Çözüm
Bu eğitimde, PowerShell kullanarak bir dizede belirli bir konumdaki bir karakterin nasıl değiştirileceğini açıkladım. Substring, dizi indeksleme, normal ifadelerle -replace operatörünü veya StringBuilder vb.'yi kullanabileceğiniz gibi çeşitli yöntemler vardır.
Umarım bu örnekler size yardımcı olacaktır!


