none
Powershell script работа со строками. RRS feed

  • Вопрос

  • Продолжаю подготавливать файлы адресной книги для ip телефонов.

    Для некоторых моделей нужно иметь файл вида

    АТСка формирует файл в таком виде:

    <?xml version="1.0" encoding="utf-8"?>
    <AddressBook>
      <Contact>
        <LastName>Temp</LastName>
        <FirstName />
        <Phone>
          <phonenumber>1000</phonenumber>
          <accountindex>0</accountindex>
        </Phone>
      </Contact>
      <Contact>
        <LastName>Faks</LastName>
        <FirstName>Ventafax ENG</FirstName>
        <Phone>
          <phonenumber>7100</phonenumber>
          <accountindex>0</accountindex>
        </Phone>
      </Contact>
      <Contact>
        <LastName>Alimov</LastName>
        <FirstName>Aleksandr</FirstName>
        <Phone>
          <phonenumber>7314</phonenumber>
          <accountindex>0</accountindex>
        </Phone>
      </Contact>
      </AddressBook>
    Нужно при помощи PS привести файл к нужному формату

    Запутался я совсем с кодом.

    Сначала я пытался прочитать файл, разделить его на буквы (ToCharArray()) а потом, при появлении символа ">" начать писать в переменную, а при появлении "</" заканчивать.

    Потом пытался делить файл при помощи метода Split()  но вывод также тяжело отфильтровать.

    Закавырка в том что ">" не всегда начинает нужную мне часть файла.

    В итоге коряво, но я смог получить первые символы нужной мне инфы, а что делать дальше не пойму

    Вод мои творенья

    cls
    	$inString = Get-Content "C:\vbs\gs.xml"
    
        $outCHR=""
    	
    	$flagif = 0
        $inCHR = $inString.ToCharArray()
    	
        foreach ($CHR in $inCHR)
        {
          	$flag = 0	
    		if ($flag = "1" -and $CHR -ne "<")
       	    {
    			write-host $CHR
    			$flag
    			$flag = 0
    		}
    		if ($CHR -eq ">" )
       	    {
    			$flag = 1 
    			$outCHR+=$CHR
    		}
    		else
    		{
    		 $flag = 0
    		}
    	}

    Знаний и опыта по PS мало, поэтому прошу помощи у экспертов.

    24 января 2014 г. 13:32

Ответы

  • $file = [xml](Get-Content "C:\vbs\gs.xml")
    $file.AddressBook.Contact | Foreach {"{0} {1},{2}" -f $_.LastName,$_.FirstName,$_.Phone.phonenumber}
    
    Вывод:
    Temp ,1000
    Faks Ventafax ENG,7100
    Alimov Aleksandr,7314

    • Предложено в качестве ответа Sergey Korotkov 24 января 2014 г. 17:20
    • Помечено в качестве ответа Alexandr Alimov 27 января 2014 г. 5:05
    24 января 2014 г. 14:30
    Отвечающий

Все ответы

  • $file = [xml](Get-Content "C:\vbs\gs.xml")
    $file.AddressBook.Contact | Foreach {"{0} {1},{2}" -f $_.LastName,$_.FirstName,$_.Phone.phonenumber}
    
    Вывод:
    Temp ,1000
    Faks Ventafax ENG,7100
    Alimov Aleksandr,7314

    • Предложено в качестве ответа Sergey Korotkov 24 января 2014 г. 17:20
    • Помечено в качестве ответа Alexandr Alimov 27 января 2014 г. 5:05
    24 января 2014 г. 14:30
    Отвечающий
  • Спасибо Сергей Вам большое прибольшое. Ваш код прекрасен.

    Буду изучать как PS умеет работать с xml.

    27 января 2014 г. 5:07