Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/56: Рейтинг темы: голосов - 56, средняя оценка - 4.68
4 / 4 / 0
Регистрация: 21.05.2011
Сообщений: 80

Удалить переносы строк в большом текстовом файле

11.09.2020, 20:01. Показов 12213. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Имеется огромный текстовый файл, нужно удалить все переносы строк.

Было:
Code
1
2
3
4
5
Слово1
Цифра1
еще слово
Потом фраза1
тут опять цифра
Стало:
Code
1
Слово1Цифра1еще словоПотом фраза1тут опять цифра
Строк в файле 50000-100000
Возможно ли сделать это с помощью PowerShell в разумные временные рамки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2020, 20:01
Ответы с готовыми решениями:

Удалить переносы строк в файле
Нужен код программы который будет считывать с файла стихотворение( 2 четверостишья) вот пример В дверях эдема ангел нежный Главой...

Удалить в текстовом файле перенос строк
Здравствуйте! Как удалить в текстовом файле разрыв страницы !? Спасибо

Оставить в текстовом файле 20 строк, остальные удалить
есть файл .txt с бесконечным числом строк. как оставить в нем первые 20, а остальные удалить?

28
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
18.09.2020, 18:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от YuS_2 Посмотреть сообщение
он, в общем-то так и работает.
Если он работает так, то почему мы получаем разные результаты:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
function Join([string[]]$objToJoin){
    $objToJoin.GetType().Name  # Всегда будет String[]
    if($objToJoin.count -lt 1) # Проверка второго условия
    {write-error "Нарушено второе условие. Прощайте."}
    else{$objToJoin -join "*"}
}
cls
[string[]]$obj=@()
 
join $obj     # Ошибка есть, так как количество строк в массиве 0, а не "1 или более"
 
$obj -join "" # Ошибки нет, хотя количество строк в массиве 0, а не "1 или более"
Получается, если он может работать со String[] из нуля элементов, то тогда должно быть написано String[] - Specifies any count of strings to be joined. Все-таки в описании ошибка
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
18.09.2020, 20:11
Цитата Сообщение от Fors1k Посмотреть сообщение
мы получаем разные результаты
Потому, что неверно пытаемся имитировать работу -join

Цитата Сообщение от Fors1k Посмотреть сообщение
join $obj     # Ошибка есть, так как количество строк в массиве 0, а не "1 или более"
Ошибка есть, потому, что Count = 0 и в этой проверке участвуют внешние операторы...

Цитата Сообщение от Fors1k Посмотреть сообщение
$obj -join "" # Ошибки нет, хотя количество строк в массиве 0, а не "1 или более"
Ошибки нет, потому, что здесь получить массив с Count = 0, просто невозможно, он всегда будет 1, т.е.:
$null будет преобразован в [string[]]"", в отличии от внешней функции...

Цитата Сообщение от Fors1k Посмотреть сообщение
Получается, если он может работать со String[] из нуля элементов, то тогда должно быть написано
Не так. Мы не можем получить массив из нуля элементов. По сути, сначала преобразовывается тип к "String", а далее он уже преобразуется в массив из одного элемента...
$null -> [string]"" и далее уже -> [string[]]""
у нас получается:
PowerShell
1
2
$a = $null
$a.count
а должно быть так:
PowerShell
1
2
3
4
$b = $null
$b.count
$b = ,$b
$b.count
функция должна быть, приблизительно, такой:
PowerShell
1
2
3
4
5
6
7
function Join([string[]]$objToJoin){
    if (!$objToJoin) {$objToJoin = ,""}
    $objToJoin.GetType().Name  # Всегда будет String[]
    if($objToJoin.count -lt 1) # Проверка второго условия
    {write-error "Нарушено второе условие. Прощайте."}
    else{$objToJoin -join "*"}
}
и вызывать такой join можно даже так:
PowerShell
1
join $([string]$null)
или даже так:
PowerShell
1
join $null
но всё это, происходит внутри этого реального оператора...
1
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
19.09.2020, 00:06
Цитата Сообщение от YuS_2 Посмотреть сообщение
Мы не можем получить массив из нуля элементов.
Так по идее можем:
PowerShell
1
2
3
4
5
$arr=[string[]]::new(0)
nv arr -Value 777    # Ошибка, переменная уже существует 
$arr.GetType().name  # String[]
$arr.Count           # 0
$arr -join ""        # Ни каких возражений
Ну да ладно, видимо, внутри Join действительно просто стоит return по умолчанию [string]::new(""), и плевать ему на наши попытки вывести его из себя
-join"" он даже так работает, и без пустого массива)
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
19.09.2020, 07:10
Цитата Сообщение от Fors1k Посмотреть сообщение
Так по идее можем
снаружи можем, конечно... но нам ведь не это требовалось...

Цитата Сообщение от Fors1k Посмотреть сообщение
плевать ему на наши попытки вывести его из себя
именно! Он преобразует типы и массивы так, как устроено у него внутри, независимо от того, что мы ему на вход подаем...

Цитата Сообщение от Fors1k Посмотреть сообщение
-join"" он даже так работает, и без пустого массива
угу, он ведь умеет быть унарным...
применимы оба вида синтаксиса:
-Join <String[]>
<String[]> -Join <Delimiter>
0
 Аватар для volodin661
7152 / 2340 / 353
Регистрация: 10.12.2013
Сообщений: 8,116
19.09.2020, 12:11
а попроще решения нет для удаления \n из файла ?

Добавлено через 13 минут
чисто для сравнения
Bash
1
tr -d "\n" < file.txt
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
20.09.2020, 07:44
Цитата Сообщение от volodin661 Посмотреть сообщение
а попроще решения нет для удаления \n из файла ?
Отчего же нет? есть.
PowerShell
1
(gc test.txt -raw -enc utf8) -replace '\r?\n'
Только, условия-то неполные... а вдруг там 100 тыщщ строк по 100 тыщщ символов, в каждой строке?
Потоковое чтение-запись, в таком случае, понадежнее будет...
0
1659 / 274 / 66
Регистрация: 03.06.2020
Сообщений: 707
20.09.2020, 14:25
Цитата Сообщение от YuS_2 Посмотреть сообщение
Отчего же нет? есть.
Тут идет зависимость размер-скорость. На относительно небольших файлах (100К строк) Get-Set-Content даже немного выигрывает. А на файлах в миллион строк Stream-Reader-Writer уже быстрее.

Создал файл (где-то 96 Мб):
PowerShell
1
2
3
4
5
6
7
8
$writer = [IO.StreamWriter]::new("$HOME\Desktop\file.txt")
 
foreach ($i in (0..1000000))
{
    $writer.write(('a' * 100) + "`n")
}
 
$writer.Close()
Протестировал:
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
using namespace System.Diagnostics
using namespace System.IO
 
$reader = [StreamReader]::new("$HOME\Desktop\file.txt")
$writer = [StreamWriter]::new("$HOME\Desktop\result-stream.txt")
 
$sw = [StopWatch]::new()
$sw.Start()
 
while ($reader.Peek() -ge 0)
{
    $writer.write($reader.ReadLine() -join '')
}
 
$reader.Close()
$writer.Close()
 
$sw.Stop()
'Read-Write-Stream: {0}' -f $sw.Elapsed.Milliseconds
$sw.Reset()
 
$sw.Start()
 
(Get-Content file.txt -raw) -replace '\r?\n' | Set-Content result-replace.txt
 
$sw.Stop()
'Get-Set-Content: {0}' -f $sw.Elapsed.Milliseconds
$sw.Reset()
Результат:
Code
1
2
Read-Write-Stream: 193
Get-Set-Content: 709
Все файлы UTF8. Осталось добраться до ноута с линукс и сравнить pwsh и /usr/bin/tr

PS. StopWatch быстрее Measure-Command
0
1659 / 274 / 66
Регистрация: 03.06.2020
Сообщений: 707
22.09.2020, 14:28
Проверил tr:
Bash
1
2
3
4
5
time tr -d "\n" < file.txt >res.txt
 
real    0m0,429s
user    0m0,209s
sys     0m0,220s
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
22.09.2020, 22:20
Цитата Сообщение от lesser Посмотреть сообщение
Протестировал:
Немного скорректировал тест, сделал два отдельных скрипта:
PS_5.1> .\script1.ps1
Read-Write-Stream: 69
PS_5.1> .\script2.ps1
Get-Set-Content: 402
PS_7.1> .\script1.ps1
Read-Write-Stream: 117
PS_7.1> .\script2.ps1
Get-Set-Content: 143
- что говорит о том, что в pwsh ускорили работу get-content и out-file, теперь они сравнимы по скорости, а вот по:
Цитата Сообщение от lesser Посмотреть сообщение
зависимость размер
в случае с get-content, будет швах, ибо с увеличением количества символов неизбежно случится переполнение, в отличие от streamreader-streamwriter... так что под эту задачу, сравнивать эти методы незачем, ибо при отсутствии исходных данных, лучше использовать более безопасный/надежный код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2020, 22:20

Удалить в текстовом файле символы-разделители в конце строк
Прошу помощи у хороших знатаков библиотеки cstdio, C++. Вроде бы задача не сложная, но никак не могу правильно написать. Напишите...

Удалить в текстовом файле символ распределитель в конце строк
Нужно создать програму, что будет удалять в текстовом файле символ распределитель(пробел, символ табуляции) в конце строк. Нужно...

Поиск по маске в большом текстовом файле
Возник вопрос, имеются текстовые файлы, содержащие от 300 000 строк, в них надо найти определенные слова, желательно по маске вида:...

Напишите программу, которая удаляет все переносы слов, встречающиеся в текстовом файле
6. Напишите программу, которая удаляет все переносы слов, встречающиеся в текстовом файле. Считайте, что слов, пишущихся через дефис, в...

Написать программу, которая в заданном текстовом файле выполняет или убирает переносы в словах с сохранением правой гран
Написать программу, которая в заданном текстовом файле выполняет или убирает переносы в словах с сохранением правой границы текста. Ключи: ...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru