none
Powershell - Выделить кусок текста между разделителями RRS feed

  • Вопрос

  • Добрый день!

    Начинаю осваивать powershell и никак не могу найти решение такой задачи:

    Есть текстовый файл в кодировке OEM

    Например:

    Любой текст

    Любой текст

    Любой текст

    Любой текст

    BEGIN1 Начало1

    Нужные данные формата:

    1,1,

    1.0123,1,

    Цифры могут быть любые, количество значений через запятую тоже (не более 5), нужны только первые два

    END1 Конец1

    Любой текст

    Любой текст

    BEGIN2 Начало2

    1,1,

    1.0123,1,

    END2 Конец2

    Мне нужно взять значение строк между begin и end (по-русски я добавил начало и конец, потому как в качестве begin и end могут выступать русские слова) и засунуть в хэш-массив.

    Пример:

    BEGIN Ф1

    111,1,12,12

    555,2,33,31

    122,10,1111,111,111

    END Ф1

    Должен получиться массив name - value

    111 - 1

    555 - 2

    122 - 10

    То что получилось у меня в части определения содержимого между begin end

    [bool]$bg=$false
    foreach ($str in $f134) 
    {
    #	if ([bool]$bg -eq $true) {$str -Split ","}
    	if ($str -contains "BEGIN Ф1") 
    	{
    		[bool]$bg=$true	
    		Write-Host $bg
    		}
    	if ($str -contains "END Ф1") 
    {
    [bool]$bg=$false
    }
    
    }

    Этот монстр не работает =(

    Подскажите способ?

    Спасибо!


    • Изменено Kono88 12 апреля 2013 г. 12:15
    12 апреля 2013 г. 12:13

Ответы

  • $hash = @{}
    $txt = Get-Content file.txt
    
    for($i=0;$i -lt $txt.length;$i++)
    {
    	if($txt[$i] -match "^(Begin|Начало)")
    	{
    		$global:i++
    		while($txt[$i] -notmatch "^(End|Конец)" -and $i -le $txt.length)
    		{
    			$t = $txt[$i].split(",")
    			$hash.Add($t[0],$t[1])
    			$global:i++
    		}
    	}
    }
    $hash


    • Изменено KazunEditor 12 апреля 2013 г. 12:56
    • Помечено в качестве ответа Kono88 17 апреля 2013 г. 6:56
    12 апреля 2013 г. 12:53
    Отвечающий

Все ответы