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

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

11.09.2020, 20:01. Показов 12086. Ответов 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
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,022
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
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru