2012-06-11 5 views
1

У меня есть несколько отчетов в html-файле. Мне нужно разместить их, чтобы преуспеть и внести некоторые изменения, поэтому я подумал, что могу сделать эти изменения заранее, используя powershell. Некоторые из строк находятся в фиксированных местах, другие - нет, поэтому мне нужно удалить их, заставив скрипт распознать шаблон.Powershell, удалить строки текста из html-файла

фиксированных линий, начиная с верхней: 12-14,17,19,25-27,30-32,40-42 фиксированных линий, начиная от дна: 3-13, 48-60

Шаблон я нужно найти и удалить, это:

<td align="center">random string</td> 
<td align="left">random string</td> 
<td align="left">random string</td> 
<td align="left">random string</td> 
<td align="right">random string</td> 

для фиксированных линий, которые я нашел, я могу это сделать:

(gc $maindir\Report23.HTML) | ? {(12..14) -notcontains $_.ReadCount} | out-file $maindir\Report23b.HTML 

он работает, как он удаляет строки 12-14, но мне нужно, чтобы поставить остаток номеров фиксированной линии в той же команде, и я не могу понять, как это сделать. Также размер файла выходного файла в два раза больше оригинала, который я нахожу странным. Я попытался использовать set-content, который создает размер файла, близкий к оригиналу, но прерывает кодировку текста в определенных частях.

Я понятия не имею, как идти о признания шаблона, хотя ...

ответ

0

Размер файла выходного файла в два раза больше оригинала, потому что исходный файл был, вероятно, ASCII-кодированным, новый файл по умолчанию кодируется в кодировке Unicode. Попробуйте следующее:

$length = (gc $maindir\Report23.HTML).length 
$rangefrombottom = ($length-60)..($length-48)+($length-13)..($length-3) 
$rangefromtop = 12..14+17,19+25..27+30..32+40..42 
(gc $maindir\Report23.HTML) | ? {$rangefromtop -notcontains $_.ReadCount} | ? {$rangefrombottom -notcontains $_.ReadCount} | out-file -encoding ASCII $maindir\Report23b.HTML 
+0

Это хорошо работало для удаления фиксированных линий :) О шаблоне я мог бы сделать smth like (gc $ maindir \ Report23.HTML) | Где {$ _ -notmatch '. * 'n . * ...'} ...? – kokotas

+0

В итоге я создал макрос excel, но я буду отмечать ваш ответ как принятый, поскольку он охватывает большую часть того, чего я пытался достичь. Только одна коррекция: $ rangefrombottom = ($ length-59) .. ($ length-47) + ($ length-12) .. ($ length-2) – kokotas

0

не могли бы вы сделать что-то вроде:

$lines = 12..14 
$lines += 17 
$lines += 25..27 
$lines += 30..32 
$lines += 40..42 

, а затем использовать этот массив в вашем где предложение:

+0

Хм нет, он заменяет только 12-14. – kokotas