none
метод contains в get-content RRS feed

  • Вопрос

  • Товарищи не очень ясно как работает эта привязка.

    По сути $content = get-content C:\log.txt

    $content.contains("Hi") должен вернуть true/false а на деле говорит что такого метода нет. хотя в get-content  | get-member он есть

     

    Спасибо

    24 января 2011 г. 7:36

Все ответы

  • $content[0].gettype().fullname - тип System.String,у которого есть метод Contains. $content.gettype().fullname - System.Object[] ,нет метода Contains.

    А если внимательно посмотреть, $content | gm ,то увидим - TypeName: System.String

    Используйте лучше Select-String,-match.

     

    24 января 2011 г. 13:19
    Отвечающий
  • Можно так

    $content -contains "Hi"

    24 января 2011 г. 14:59
  • Можно так

    $content -contains "Hi"

    Только в том случае,если кроме Hi в строке ничего нет.Это оператор сравнения(только всегда возвращает True или False),похожий на -eq,так что не корректно его использовать.
    24 января 2011 г. 15:25
    Отвечающий
  • $content -contains "Hi"

    Проверяет наличие "\AHi\Z" в $content. Это и требовалось по условию ТС. Если же необходимо найти подстроку в строке, то:

    $content | ? { $_.contains("Hi") }

    Вернет строку содержащую ".*Hi.*", независимо от того какого типа $content (строка или массив).

    24 января 2011 г. 16:35
  • $content -contains "Hi"

    Проверяет наличие "\AHi\Z" в $content. Это и требовалось по условию ТС. Если же необходимо найти подстроку в строке, то:

    $content | ? { $_.contains("Hi") }

    Вернет строку содержащую ".*Hi.*", независимо от того какого типа $content (строка или массив).

    Судя по вопросу ТС,речь идет о методе contains у System.String,который работает иначе ,чем оператор сравнения -contains.Именно от типа зависит,будет ли доступен метод contains или нет.Если нет разницы почему же вы используете pipe,а не вызываете напрямую?
    24 января 2011 г. 17:23
    Отвечающий
  • > Если нет разницы почему же вы используете pipe,а не вызываете напрямую?

    Потому что -contains не находит подстроку, а только строку целиком. Я же написал выше.

    Пример:

     051 > "Неу, Hi" -contains "Hi"
    False
     052 > "Неу, Hi".contains("Hi")
    True

    А pipe, на случай если $content это массив.

    24 января 2011 г. 17:38