Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Заменить Имя месяца на цифру (http://forum.oszone.net/showthread.php?t=308943)

c4uran 08-12-2015 16:44 2582748

Заменить Имя месяца на цифру
 
есть переменная с месяцами:

Код:

[array]$Times = "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December"
на что нужно поменять переменную в цикле:

Код:

$File = "myfile-1.July.2015"

foreach ($T in $Times) {
                    $File = $File.Replace($T,??)
            }

чтобы на выходе было myfile-1.7.2015

IVa_ 08-12-2015 17:06 2582750

about_Switch

Kazun 08-12-2015 17:07 2582751

Код:

$m = [datetime]::ParseExact($T,"MMMM",[Globalization.CultureInfo]::InvariantCulture).Month
$File = $File.Replace($T,$m)

Или создать hashtable^

Код:

$Times = @{
"January" = 1
"February" = 2
}
foreach ($T in $Times.GetEnumerator()) {
        $File = $File.Replace($T.Name,$T.Value)
}


Foreigner 08-12-2015 19:39 2582791

Код:

$Times = "January","February","March","April","May","June","July","August","September","October","November","December"
$File = "myfile-1.July.2015"

foreach ($T in $Times)
{
    $File = $File.Replace($T,($Times.indexof($T) + 1))
}
$File


greg zakharov 08-12-2015 20:26 2582805

Foreigner, едва ли кто-то в здавом уме и трезвой памяти станет строчить массив названий месяцев вручную. Kazun в этом плане более лаконичен. Есть еще вариант, не столь лаконичный, но без создания массива названий месяцев вручную:
Код:

$File = 'myfile-1.July.2015'
$j = ($i = (
  $$ = [Globalization.DateTimeFormatInfo]::InvariantInfo.MonthNames
).IndexOf(
  $$.Where({$File -match $_})[0]
)) + 1
$File.Replace($$[$i], $j)


Foreigner 08-12-2015 20:35 2582810

greg zakharov,
Цитата:

Цитата c4uran
есть переменная с месяцами: »


greg zakharov 08-12-2015 20:46 2582821

Foreigner, так незаметно форум с Вашей помощью превращается в цитатник.

Foreigner 08-12-2015 21:06 2582832

greg zakharov, Я заметил другую тенденцию, Ваше стремление со всеми поссориться

c4uran 09-12-2015 09:18 2582944

Спасибо всем кто ответил, я думал о варианте Foreigner, все варианты интересные и разберу их, спасибо

c4uran 09-12-2015 09:47 2582953

greg zakharov, ваш метод вывалил ошибку:

Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Where".
+ $$ = [Globalization.DateTimeFormatInfo]::InvariantInfo.MonthNames

и

Сбой операции индексирования, индекс массива вычислен как NULL.
+ $File.Replace($$[$i], $j)

Kazun, а ваш метод(который первый) крутой, даже не могу понять как он работает, справочку?:)

Iska 09-12-2015 11:05 2582979

Цитата:

Цитата c4uran
даже не могу понять как он работает, справочку? »

CultureInfo.InvariantCulture Property (System.Globalization)DateTime.ParseExact Method (String, String, IFormatProvider) (System)DateTime.Month Property (System).

greg zakharov 09-12-2015 11:16 2582982

Цитата:

Цитата c4uran
Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Where".

Версию PowerShell озвучьте, ибо писано было на четверке.

c4uran 09-12-2015 11:37 2582992

greg zakharov, Да у меня видимо только 3.

Код:

$PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
3      0      -1    -1

Iska, Так это вызов .NET, только я вот не могу понять как можно сообразить когда средства PS заканчиваются и нужно копать так глубоко, вот не зная .NET же невозможно догадаться до подобного вызова

Iska 09-12-2015 16:10 2583094

Цитата:

Цитата c4uran
не зная .NET же невозможно догадаться до подобного вызова »

Совершенно верно. PoSH — это .Net. И, Вы правы — тут только именно знать.


Время: 22:47.

Время: 22:47.
© OSzone.net 2001-