Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
M1ct1an

Удалить в файле пустые строки, если их больше чем N штук подряд

19.08.2014, 18:13. Показов 7323. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
прошу помощи!
нужно в powershell удалить пустые строки в файле txt если их больше чем n штук подряд.
Спасибо
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2014, 18:13
Ответы с готовыми решениями:

Удалить в текстовом файле все пустые строки
Задан текстовый файл, удалить в нем все пустые строки. Выдать сообщение, что строки удалены или таковых строк не имеется.

Убрать пробелы из строки, если их больше одного подряд
Задание звучит так: В заданной строке с нулевым завершителем убрать пробелы, если их больше одного подряд. Определить количество символов...

Расчёт формулы 3 буквы 3 символа длина строки, сколько вариантов если больше 2 подряд не повторяются
Вот есть 3 символа abc (можно в виде цифр 123 так считать удобней) В строке может быть 3 символа, и варианты не повторяются. Таким...

7
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
21.08.2014, 20:52
Цитата Сообщение от M1ct1an Посмотреть сообщение
нужно в powershell удалить пустые строки в файле txt если их больше чем n штук подряд
У меня вот так получилось. Возможно не изящно, поскольку еще плохо знаю PoSh, но вроде работает.
Здесь берется ИСХОДНЫЙ файл forPowerShell.txt , а результат записывается в выходной файл forPowerShellResult.txt. Оба они находятся в корне диска С:\
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#Получаем содержимое нашего исходного файла
$strings= Get-Content c:\forPowerShell.txt
 
#Считаем допустимое количество пустых строк
$dopustimoeKolvoPustuxStrok = read-host "Please enter N:"
 
#Переменная в которой будет содержаться количество пустых строк, которые идут подряд
$nullStringCounter=0
 
#Переменная, в которой будет содержаться адрес НАЧАЛА того, что мы будем считывать в РЕЗУЛЬТИРУЮЩИЙ файл
$start=0
 
#Переменная, в которой будет содержаться адрес КОНЦА того, что мы будем считывать в РЕЗУЛЬТИРУЮЩИЙ файл
$finish=0
 
 
#перебираем каждую строку
for($i=0; $i -lt $strings.length; $i++){
 
     #если строка равна пустой
     if ($strings[$i] -eq ""){
     $nullStringCounter++
     continue
     }
    
    #если строка не равна пустой
    if ($strings[$i] -ne ""){
   
        #если количество пустых строк превысило допустимое
        if($nullStringCounter -gt $dopustimoeKolvoPustuxStrok) {
    
        $finish=$i-$nullStringCounter-1
       
            #перебираем каждую строку начиная со start и по finish и записываем в новый файл
            for($j=$start; $j -le $finish; $j++){
            Add-Content -path c:\forPowerShellResult.txt -value ($strings[$j])
            }
            
            #раз начались не пустые строки , то start=$i
            if ($strings[$i-1] -eq ""){
            $start=$i
            }   
         
        }
        
    #сбросить счетчик пустых строк
    $nullStringCounter=0      
    }
 
#finish=$i   
$finish=$i 
}
 
#Запишем концовку файла
for($j=$start; $j -le $finish; $j++){
Add-Content -path c:\forPowerShellResult.txt -value ($strings[$j])
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,912
Записей в блоге: 12
22.08.2014, 13:31
Лучший ответ Сообщение было отмечено volvo как решение

Решение



Зачем это все? Регулярки ж никто не отменял:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Получаем содержимое исходного файла
$content = [System.IO.File]::ReadAllText("D:\test\test.txt")
 
#Считаем допустимое количество пустых строк
$nValue = read-host "Please enter N"
 
#Составляем регулярное выражение для поиска соответствующего количества пустых строк
$re = "(?m)(^\s*\r?\n){" + $nValue + ",}"
 
#Заменяем найденное пустой строкой (удаляем из строки, фактически)
$res = $content -replace $re, ""
 
#И выводим в результирующий файл
[System.IO.File]::WriteAllText("D:\test\test_out.txt", $res)
1
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
25.08.2014, 22:41
А подскажите , пожалуйста, что нужно поюзать чтобы понять вот эти строки:
PowerShell
[System.IO.File]::ReadAllText
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
25.08.2014, 23:11
CJS, .NET.Весь пауэршелл на нём завязан
1
29.10.2014, 16:43

Не по теме:

powershell перлообразен и достаточно лаконичeн,
но на Perl5 задача решается например след. однострочником и не зависит от размера файла с данными:

Bash
1
perl -i.saved -p -e  "$n=3;  undef $_ if ++$empty > $n and (/^$/ or undef $empty)"  d:\test\test.txt
где в $n число неудаляемых пустых строк,
файл test.txt перезапишется, а его оригинальная версия сохранится под именем test.txt.saved



0
403 / 86 / 8
Регистрация: 16.02.2013
Сообщений: 356
30.10.2014, 10:13
volodin661 ,
1. Предоставленный Вами скрипт на перл не только не работает, но вдобавок портит исходный файл. Проверено на ActivePerl 5.18.2.1802

2. Если Вам нравится что бы все было в одну строку, то пример от UI легко трансформируется

PowerShell
1
[System.IO.File]::WriteAllText("D:\a_out.txt", ($([System.IO.File]::ReadAllText("D:\a.txt")) -replace "(?m)(^\s*\r?\n){2,}", ""))
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,917
30.10.2014, 17:24
Цитата Сообщение от Cat2 Посмотреть сообщение
1. Предоставленный Вами скрипт на перл не только не работает, но вдобавок портит исходный файл. Проверено на ActivePerl 5.18.2.1802
когда писал, Windows под рукой не было, только юникс, поэтому проверить не мог, просто заменил одинарные кавычки в ключе -e на виндусовые двойные.
Вот сейчас проверил на ActivePerl 5.16, все корректно работает.


Цитата Сообщение от Cat2 Посмотреть сообщение
2. Если Вам нравится что бы все было в одну строку, то пример от UI легко трансформируется
мне в одну строку нравится, если в этой строке будет не более 40-50 символов,
а если будет больше, то не понравится ни мне, ни кому-то ещё.

теперь что касается твоего примера, регулярное выражение составлено неверно,
оно просто с'ест все пустые строки.

а правильно как-нить вот так (через look behind) :

Perl
1
-replace "(?m)(?<=(\s*\r*\n){2,})(\s*\r*\n)", ""
Добавлено через 8 минут
ну и последнее:

я проверил на гигабайтном файле, powershell, ясен перец, отваливается по памяти,
мой пример, перец не менее ясен, работает, потому как весь файл в память не засасывает.

справедливости ради стоит отметить, что на 100mb файле powershell отработал вполне шустро.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2014, 17:24
Помогаю со студенческими работами здесь

В заданной матрице удалить строку, если положительных элементов в ней, больше чем отрицательных
Если в строке положительных чисел, больше чем отрицательных, то эту строку удалить. Помогите.

Если в строке количество пробелов больше, чем букв «а», то удалить каждый второй встречающийся пробел
Создать функцию программиста, которая подсчитывает в заданной строке количество заданных символов (вид символа вводится как параметр...

Если в строке количество пробелов больше, чем букв «а», то удалить каждый второй встречающийся пробел
Создать функцию программиста, которая подсчитывает в заданной строке количество заданных символов (вид символа вводится как параметр...

Удалить строки матрицы, в которых четных элементов больше, чем нечетных
Дана квадратная матрица A(nхn). Удалить строки матрицы, в которых четных элементов больше, чем нечетных.

Удалить те строки матрицы, в которых латинских букв больше, чем русских
В массив вводятся строки, содержащие русские и латинские буквы, цифры и другие символы. Удалить те строки, в которых латинских букв больше,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru