none
Примитивный скрипт RRS feed

  • Вопрос

  • Добрый день, небольшой вопрос по PS, начал писать скрипт и остановился на примитивном участке кода(очень обидно), суть такова есть файл в котором нужно определить запятые при этом скопировав части предложения которые они разделяли построчно в массив (для систематизации), а но выдает мне Индекс находился вне границ массива.

    [string]$p='';
    [string[]]$mas=@();
    $c=',';
    $z=0;
    $p=Get-Content -Path h:\Server\PowerShell\1.txt
    for($i=0; $i -le $p.Length; $i++){
      if ($c -eq $p[$i]){$z++}
      elseif ($c -ne $p[$i]){$mas[$z]+=$p[$i]} 
    }
    write-host $p
    write-host $mas[$z]
    

    Индекс находился вне границ массива.
    H:\Server\PowerShell\Безымянный5.ps1:8 знак:26
    +   elseif ($c -ne $p[$i]){$mas[$z]+=$p[$i]}
    +                          ~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], IndexOutOfRangeException
        + FullyQualifiedErrorId : System.IndexOutOfRangeException

     
    2 апреля 2014 г. 21:39

Ответы

Все ответы

  • Зачем так усложнять? 

    [string]$p='';
    [string[]]$mas=@();
    $c=',';
    $z=0;
    $p=Get-Content -Path C:\proj\1.txt
    $mas = $p.Split(',')


    3 апреля 2014 г. 3:47
    1. $mas у Вас не содержит элементов, так что естественно, что при попытке обращения к ним происходит ошибка.
    2. В цикле следует использовать -lt, а не -le.
    3. Почему бы просто не использовать оператор -split?
      Get-Content -Path h:\Server\PowerShell\1.txt|ForEach-Object {$_-split','}
    3 апреля 2014 г. 3:55
  • весь смысл в том что не хочется использовать регулярные выражения

    Доработал

    [string]$p='';
    [string[]]$mas=@();
    $c=',';
    [string]$z=''
    $p=Get-Content -Path h:\Server\PowerShell\1.txt
    for($i=0; $i -le $p.Length; $i++){
      if ($c -ne $p[$i]){$z+=$p[$i]}
        elseif ($c -eq $p[$i]){$mas+=$z; $z='';} 
    }
    for($i=0; $i -lt $mas.Count; $i++){
    write-host $mas[$i]
    }

    спасибо всем за участие


    3 апреля 2014 г. 19:42