2014-10-31 1 views
2

Как получить количество строк перед пустой строкой. Например:Подсчитайте строку # перед пустой строкой в ​​PowerShell

 
This is a paragraph 
This is a paragraph 
This is a paragraph 

This is a paragraph 
This is a paragraph 
This is a paragraph 
This is a paragraph 

Первый комплект должен рассчитывать 3 строки, а второй набор - 4 строки. Я использовал Get-Content .\testing.txt | Measure-Object -line, который возвращает общее количество строк, но это не то, что я хотел.

ответ

2

Get-Content возвращает массив, поэтому любые возврат каретки или возврат строки теряются. Предполагая, что нет пробелов, следующие возвращения. 3. Отрегулируйте соответственно обрезку «пробелов», если они не считаются символами. $a = Get-Content .\testing.txt ; [array]::IndexOf($a,'')

Редактировать: Следующие элементы заполняют Контент и выводит количество строк, предшествующих пустой строке. Пустая строка или строка с любым количеством пробелов считаются пустыми. Чтобы обрабатывать пробелы как не пустую строку, удалите «.trimend».

$a = Get-Content C:\powershell\tmp.txt ; $i = 0; 
while([array]::IndexOf($a.trimend(' '),'', $i) -gt 0) 
{ 
    $j = [array]::IndexOf($a.trimend(' '),'', $i); $j - $i; $i = $j + 1 ; 
} 
+0

спасибо @Ottak. Это может получить общее количество первого набора. Но как получить общее количество строк второго набора? –

+0

@JasonTang См. Дополнительное редактирование. Я добавил к оригинальному ответу. Он будет работать для любого файла длины. Протестировано в файле с 20 наборами, включая последовательные пустые наборы строк. – Ottak

+0

Спасибо! Я использовал другой подход, поскольку сценарий изменился, но ваше решение ответило на мой первоначальный вопрос. :) –

1

Это будет переход по строкам файла, чтобы найти первый пробел.

$lines = Get-Content C:\Dev\PS\3.txt 
for ($i = 0; $i -le $lines.Length; $i++) { 
    if ($lines[$i].Length -eq 0) { 
     break 
    } 
} 
echo $i 
+0

Спасибо @JasonW. Любые идеи, как получить общее количество обоих наборов? –

+0

Как вы имеете в виду оба набора? В том же файле, чтобы вы хотели вывести 3, а затем 4 в разных строках для одного и того же файла? –