|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Построчное чтение файла и работа с элементами строки |
|
PowerShell - Построчное чтение файла и работа с элементами строки
|
Новый участник Сообщения: 1 |
Здравствуйте! Никак не получается разобраться: Нужно прочитать текстовый файл, и в каждой строке попарно заменить слова между собой (1-е со 2-м, 3-е с 4-м и т.д)
|
|
Отправлено: 11:43, 05-10-2020 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать было бы неплохо увидеть пример строки, а еще лучше пример файла.
Ну и так, немного на вентилятор: чем разделяются "слова"; что делать если количество слов в строке нечетное; какая кодировка у файла; чем строки заканчиваются; куда, наконец, резльтат записывать? |
Отправлено: 14:38, 05-10-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать По рабоче-крестьянски:
Скрытый текст
Полагаю, можно быстрее сделать замену регуляркой. |
Отправлено: 17:24, 05-10-2020 | #3 |
Ветеран Сообщения: 1758
|
|
Отправлено: 18:23, 05-10-2020 | #4 |
Забанен Сообщения: 793
|
Длина строк (количество слов в строке), как и пунктуация, действительно автором темы не были оговорены. А так можно подбросить решение в "функциональном" стиле.
$text = @' два один четыре три пять это а длинная просто строка тестовая '@ $text | ConvertFrom-Csv -Delimiter ' ' -Header (($arr = 1..($text.Split("`n") | Sort-Object Length -Bottom 1 | Measure-Object -Word).Words )) | Select-Object -Property ([String[]]$arr.ForEach{$_ + ($_ % 2 -eq 0 ? -1 : 1)}) | ConvertTo-Csv -Delimiter ' ' -UseQuotes 0 | Select-Object -Skip 1 |
|
Последний раз редактировалось greg zakharov, 05-10-2020 в 21:20. Отправлено: 21:15, 05-10-2020 | #5 |
Забанен Сообщения: 793
|
Одно из возможных решений при наличии пунктуации в тексте - токенизация на манер того, как это реализовано в PSParser.
@' каждый И в, вечер назначенный час, (это Иль снится только мне?) стан Девичий, схваченный шелками, туманном В окне движется. медленно И, меж пройдя пьяными, без Всегда одна, спутников, духами Дыша туманами и, садится Она окна у. '@.Split("`n").ForEach{ $i, $str = 0, $_ $arr = ($str -split '(\p{L}+|\p{P})(?:\s+)?').Where{$_}.ForEach{ [PSCustomObject]@{ Type = $_ -match '\p{P}' ? 'Punctuation' : 'Word' Index = ++$i Value = $_ } } $w = $arr.Where{$_.Type -eq 'Word'} $sz = $w.Count % 2 -eq 0 ? $w.Count : $w.Count - 1 for ($i = 0; $i -lt $sz; $i += 2) { $w[$i].Index, $w[$i + 1].Index = $w[$i + 1].Index, $w[$i].Index } ($w + $arr.Where{$_.Type -eq 'Punctuation'} | Sort-Object Index).Value -join ' ' -replace '\s(\p{P})', '$1' } |
Отправлено: 22:39, 10-10-2020 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Построчное чтение файла и запись в другой | acefoster | Скриптовые языки администрирования Windows | 11 | 28-03-2024 08:02 | |
[решено] Построчное чтение файла в Bash | FATruden | Программирование в *nix | 11 | 19-05-2017 00:44 | |
VBS/WSH/JS - [решено] Построчное чтение из файла в переменную | Elven | Скриптовые языки администрирования Windows | 10 | 05-02-2015 16:55 | |
VBS/WSH/JS - [решено] Построчное чтение "большого" файла и замена символов | phenoMANon | Скриптовые языки администрирования Windows | 6 | 23-08-2013 10:44 | |
CMD/BAT - [решено] Чтение строки из файла в переменную | Николя | Скриптовые языки администрирования Windows | 42 | 17-01-2010 19:42 |
|