PowerShell'de NewLine'da Metin Dosyasını Böl [2 Yol]


Get-Content Cmdlet'ini kullanma

Belirtilen metin dosyasını her yeni satıra göre bir diziye bölmek için birden fazla yol kullanabiliriz. Bu yöntem ve komutları uygulamak için aşağıdaki içeriğe sahip file.txt dosyasını kullanacağız. Elbette metin dosyanızı da oluşturabilir veya kullanabilirsiniz.

Dosya.txt'nin içeriği:

This is line one.
This is line two.
This is three and four on the same line. We didn't write it on a new line.
This is line five.

Aşağıdaki çözümleri öğrenmeye devam edelim.

Bir metin dosyasını her yeni satıra göre bir diziye bölmek için Get-Content cmdlet'ini kullanın.

Get-Content Cmdlet'ini kullanın:

$lines = Get-Content -Path .\file.txt
$lines.GetType()
$lines

ÇIKTI:

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
This is line one.
This is line two.
This is three and four on the same line. We didn't write it on a new line.
This is line five.

Belirlediğimiz bir metin dosyasının içeriğini almak için Get-Content cmdlet'ini kullandık. Bu cmdlet'i kullanmak en basit yaklaşımlardan biridir çünkü bu, varsayılan olarak metnin her satırını dize nesnesi olarak döndürür. Sonuç olarak PowerShell nesnesinin koleksiyonu, dize nesnesinin bir dizisi haline gelir. Yani onu bölmemize gerek yok; bu zaten $lines değişkenine kaydettiğimiz Get-Content cmdlet'i tarafından yapılıyor.

Get-Content'in içeriği alacağı öğenin yolunu belirtmek için -Path parametresini kullandık. Bizim durumumuzda, geçerli dizinde bulunan file.txt'dir (. ile temsil edilir); dosyanızın tam yolunu da kullanabilirsiniz. Yolların kapsayıcılara değil öğelere işaret etmesi gerektiğini unutmayın; bu, bir veya daha fazla dosyaya giden yoldan bahsedebileceğimiz ancak bir dizine yönlendiremeyeceğimiz anlamına gelir.

Metin dosyasını her yeni satıra göre başarıyla bir diziye böldüğümüzden emin olmak için GetType() yöntemini $lines değişkeniyle zincirledik. Evet, bunu yaptık; görebileceğiniz gibi, yukarıdaki çıktıda BaseType System.Array şeklindedir. Belirli bir indeksin bir öğesini $lines[2] olarak yazdırabiliriz; dizi indekslerinin 0 ile başladığını ve n-1 ile bittiğini unutmayın; burada n, bir dizinin boyutudur.

Şimdi, file.txt dosyasını tek bir dize olarak okumak ve ardından bunları her yeni satıra göre bölmek gibi özel bir gereksiniminiz varsa, o zaman -Raw parametresini şu şekilde kullanmanız gerektiğini düşünün: aşağıdaki örnekte gösterilmiştir. Diğer yararlı parametreleri burada bulabilirsiniz.

-Raw Parametresi ile Get-Content Cmdlet'i kullanın:

$string = Get-Content -Path .\file.txt -Raw
$lines = $string -split "`n"
$lines.GetType()
$lines

ÇIKTI:

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
This is line one.
This is line two.
This is three and four on the same line. We didn't write it on a new line.
This is line five.

Yeni satır karakterlerini yok saymak ve file.txt dosyasının tüm verilerini, 'e kaydettiğimiz yeni satır karakterleri korunarak tek bir dize olarak elde etmek için -Raw parametresini kullandık. $string değişkeni. Daha sonra, metin dosyasını her yeni satırı temel alan bir diziye bölmek için ayırıcı (sınırlayıcı) olarak yeni satırla birlikte -Split operatörünü kullandık.

Benzer şekilde .Split() yöntemini de şu şekilde kullanabiliriz:

-Raw Parametresi ile Get-Content Cmdlet'i kullanın:

$string = Get-Content -Path .\file.txt -Raw
$lines = $string.Split("`n")
$lines.GetType()
$lines

ÇIKTI:

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
This is line one.
This is line two.
This is three and four on the same line. We didn't write it on a new line.
This is line five.

-Split ve .Split(), bir dizeyi verilen ayırıcıya dayalı olarak bir alt dize dizisine bölmek için kullanılır. PowerShell'de bunlar birbirinin yerine kullanılır ancak daha kısa ve yazılması kolay olduğu için -Split tercih edilir. Ancak dizeyi karmaşık ve zorlu sınırlayıcılara göre bölüyorsanız .Split() yöntemini kullanmak daha iyidir.

-Raw parametresi yalnızca dosya sistemi sürücülerinde çalışır.

System.IO.File.ReadAllLines Yöntemini Kullanma

Bir metin dosyasını her yeni satıra dayalı olarak bir diziye bölmek için System.IO.File.ReadAllLines() yöntemini kullanın.

.ReadAllLines() Yöntemini kullanın:

$lines = [System.IO.File]::ReadAllLines("E:\Test\file.txt")
$lines.GetType()
$lines

ÇIKTI:

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String[]                                 System.Array
This is line one.
This is line two.
This is three and four on the same line. We didn't write it on a new line.
This is line five.

Burada File sınıfının .ReadAllLines() yöntemini kullandık; aynı zamanda bu makaledeki ilk örnekte öğrendiğimiz Get-Content cmdlet'i gibi tek satırlık bir çözümdür. .ReadAllLines() yöntemi, file.txt dosyasının tam yolunu aldı, tüm satırları okudu ve bunları dosyasına kaydettiğimiz bir dize dizisi olarak döndürdü. $lines değişkeni.

.ReadAllLines() yönteminin iyi yanı, tüm içeriği okuduktan sonra dosyayı da kapatmasıdır, ancak burada bulduğunuz birkaç nedenden dolayı birkaç istisnayla karşılaşmanız gerekebilir.

Hepsi PowerShell'de Newline'daki metin dosyasının nasıl bölüneceğiyle ilgili.

İlgili makaleler