Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

Робота з рядками в PowerShell.

Результатом роботи команди в PowerShell завжди є не текст, а об'єкт. Це стосується і роботи з текстом. Кожен рядок є окремим об'єктом зі своїми властивостями і методами, якими можна користуватися для обробки тексту.

Для прикладу створимо змінну, в яку помістимо рядок, а потім виведемо її властивості і методи:

$ string = "My name is Kirill"
$ string | Get-Member



Властивості

Почнемо з властивостей, яких у рядки виявилося небагато - всього два.Властивість Length містить довжину рядка, або кількість символів:

$ string.Length

А властивість Chars дозволяє звертатися до будь-якого символу в рядку по його номеру, наприклад:

$ string.Chars (4)



до речі, до символів в рядку можна звертатися без використання Chars, а як до елементів масиву, за індексом:

$ string [4]

а якщо вказати негативне число, то масив буде перебиратися з кінця:

$ string [-4]

Також крім одного символу можна вказати діапазон, наприклад:

$ string [0..2]
$ string [-17 ..- 15]



Методи

Тепер візьмемо рядок і почнемо з неї знущатися приступимо до методів.

Метод Insert служить для вставки підрядка в вихідну рядок, починаючи з зазначеного символу. Для прикладу вставимо ".N" в кінець рядка (після 17 символу):

$ string.Insert (17, ".N ")

Метод Remove видаляє символи з рядка починаючи з зазначеного символу, наприклад:

$ string.Remove (10)

Метод Replace знаходить в заданій стрічці подстроку і замінює її на іншу, наприклад:

$ string.Replace ( "Kirill", "Vasya")



Метод Split розбиває рядок на масив рядків за допомогою розділяє символу або групи символів.Наприклад так ми розіб'ємо рядок, використовуючи як роздільник пробіл:

$ string.Split ( "")

А так вкажемо як роздільник букву е:

$ string.Split ( "е")

Якщо необхідно вказати кілька роздільників, то досить просто перерахувати їх через кому:

$ string.Split ( "е", "i")



Метод Substring дозволяє отримати підрядок, сформовану з початкового рядка.Є два варіанти використання цього методу. Наприклад результатом виконання наступної команди буде рядок, отримана шляхом видалення з початкового рядка заданої кількості символів:

$ string.Substring (11)

А таким способом ми отримаємо подстроку, сформовану з вихідної рядки, що починається з вказаної позиції (8) і містить вказану кількість символів (9):

$ string.Substring (8,9)



Метод Clone створює точну копію вихідного об'єкта, наприклад:

$ string2 = $ string.Clone ()

Метод CompareTo виробляє порівняння двох рядків і видає 0, якщо рядки збігаються:

$ string.CompareTo ($ string2)

Що стосується розбіжності метод може видати -1 (якщо перший рядок більше другий) або 1 (якщо перший рядок менше другий).Також при використанні цього методу варто враховувати, що регістр символів впливає на результат порівняння. Якщо необхідно порівняти рядки без урахування регістру, то можна скористатися статичним методом Compare, про який трохи пізніше.

Метод Equals також порівнює два рядки і в залежності від результату повертає True або False:

$ string.Equals ($ string2)

До речі, такий же результат виходить при використанні оператора порівняння -eq:

$ string -eq $ string2



Метод Contains перевіряє наявність в рядку зазначеної підрядка, і в залежності від результату повертає True або False. Наприклад:

$ string.Contains ( "Kirill")

Метод StartsWith перевіряє, чи починається рядок з вказаною підрядка:

$ string.StartsWith ( "My")

а метод EndsWith перевіряє, чи закінчується вихідна рядок підрядком:

$ string.EndsWith ( "Vasya")

Зверніть увагу, що ці методи також чутливі до регістру символів.



Говорячи про залежність від регістру символів, варто згадати ще два методи.Метод ToUpper переводить вихідну рядок у верхній регістр:

$ string.ToUpper ()

а метод ToLower відповідно в нижній:

$ string.ToLower ()



З їх допомогою можна позбутися від регістру, наприклад при пошуку або порівнянні:

$ string.ToLower (). EndsWith ( "kirill")



Метод IndexOf знаходить індекс початку входження підрядка в заданій стрічці.Наприклад, створимо строкову змінну:

$ string = "substring one, substring two, substring three"

Тепер виведемо індекс початку входження підрядка (substring):

$ string.IndexOf ( "substring")

Як бачите, метод видав 0 - це номер першого символу (substring one, substring two, substring three) в заданій стрічці.

метод LastIndexOf показує індекс останнього входження підрядка, т.е. номер початку останнього входження зазначеної підрядка в заданій стрічці. Наприклад, наступна команда видасть 30 - номер останнього символу (substring one, substring two, substring three) в рядку:

$ string.LastIndexOf ( "substring")



метод IndexOfAny повертає перше, а метод LastIndexOfAny - останнє входження будь-якого символу з підрядка в заданій стрічці.Наприклад:

$ string.IndexOfAny ( "substring")

Ця команда, як і в випадку з IndexOf видасть 0 - номер першого символу (s) в рядку. А так ми отримаємо 42 - номер останнього символу підрядка (substring one, substring two, substring three) в рядку:

$ string.LastIndexOfAny ( "substring")



Методи PadLeft і PadRight дозволяють доповнити вихідний текст до потрібної кількості символів зліва чи справа.Для прикладу створимо нову змінну $ string і подивимося її довжину:

$ string = "my name is Vasya Pupkin"
$ string.Length

Як бачите, рядок містить 23 символу. Доповнимо її точками до 26 символів зліва:

$ string = $ string.PadLeft (26, ".")

а вийшла рядок доповнимо знаками питання до 30 символів справа:

$ string = $ string.PadRight (30, "?")

В принципі, процес можна не розбивати на частини, а доповнити відразу з двох сторін:

$ string = $ string.PadLeft (26, " . "). PadRight (30,"? ")



Методи TrimStart, TrimEnd і Trim обрізають повторювані символи з боків рядка. TrimStart обрізає символи на початку, TrimEnd в кінці рядка, а Trim - з обох сторін відразу.Як приклад візьмемо вийшла в минулий раз рядок і обрізаємо зайві точки на початку:

$ string = $ string.TrimStart ( ".")

і зайві знаки питання в кінці:

$ string = $ string.TrimEnd ( "?")



трохи про типах даних. Поточний тип даних можна подивитися за допомогою методу GetType, наприклад:

$ a = "string"
$ a.GetType ()

В полі Name зазначений тип даних String (рядок).



Строкові дані можна перетворити в інший тип даних, для чого у рядки є ряд методів. Для прикладу візьмемо метод ToCharArray і з його допомогою перетворимо рядок в масив символів:

$ b = $ a.ToCharArray ()

Якщо тепер перевірити тип даних, то замість String ми побачимо тип Char [].



Перетворити тип даних можна і за допомогою статичного методу Convert. Для прикладу створимо змінну, що містить рядок, а потім перетворимо її в число (Int32);

$ string = "123"
$ int = [convert] :: ToInt32 ($ string)



статичні методи

Крім звичайних до рядка можна застосовувати статичні методи.Вивести їх список можна все тією ж командою Get-Member з ключем -Static.



Методів багато , тому коротко пробіжимося за деякими з них.

Метод Concat використовується для об'єднання кількох рядків. Як приклад створимо три стічних змінних і об'єднаємо їх:

$ a = "one"
$ b = "two"
$ c = "three"
[string ] :: Concat ($ a, $ b, $ c)

Метод Join також об'єднує кілька рядків, але з використанням заданого роздільник.Наприклад, об'єднаємо рядки використовуючи як роздільник двокрапка:

[string] :: Join ( ":", $ a, $ b, $ c)



Метод Copy створює точну копію вихідної рядки:

$ string2 = [string] :: Copy ($ string)

Метод Compare виробляє порівняння двох рядків і видає 0 при їх збігу або 1 \ -1 при розбіжності, аналогічно методу CompareTo:

[string] :: Compare ($ string, $ string2, $ true )

Метод Equals також виробляє порівняння і видає результат у вигляді True \ False:

[string] :: Equals ($ string, $ string2)



Метод Compare відрізняється одним моментом - він дозволяє порівнювати рядки без урахування регістру символів.Для цього в ньому використовується перемикач $ true (без урахування регістру) або $ false (з урахуванням регістру). Для прикладу створимо дві змінних, що відрізняються тільки регістром символів:

$ a = "string"
$ b = "String"

А тепер порівняємо їх. Ця команда покаже, що рядки ідентичні:

[string] :: Compare ($ a, $ b, $ true)

А ця - що вони розрізняються:

[string] :: Compare ($ a, $ b, $ false)



І ще пара цікавих методів для перевірки рядків.Метод IsNullOrEmpty перевіряє наявність рядка, а також чи не є вона символом нового рядка:

$ string = ""
[string] :: IsNullOrEmpty ($ string)

Метод IsNullOrWhiteSpace теж перевіряє наявність рядка, а також те, що рядок містить лише white-space символи (пробіл, табуляція, символ нового рядка і т.п.):

[string] :: IsNullOrWhiteSpace ($ string)



На цьому мабуть закінчимо з рядками і їх властивостями і методами.Якщо раптом