Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удалить первые/последние N символов каждой строки (http://forum.oszone.net/showthread.php?t=352714)

Asdshka 03-01-2023 19:24 3000157

Удалить первые/последние N символов каждой строки
 
Приветствую, помогите пожалуйста сделать BAT скрипт, который удаляет первые N символов каждой строки текстового файла
И второй скрипт, который удаляет последние N символов каждой строки текстового файла

Почему решил BAT, потому что файл больше 100МБ, плюсы и шарп долго очень обрабатывают и кушают ОЗУ

DJ Mogarych 03-01-2023 20:31 3000159

Powershell
Код:

$n = 6

# первые
(gc "C:\temp\Untitled 1.txt") -replace "^.{$n}" > "C:\temp\Untitled 2.txt"

# последние
(gc "C:\temp\Untitled 1.txt") -replace ".{$n}$" > "C:\temp\Untitled 2.txt"


Asdshka 03-01-2023 20:57 3000161

Цитата:

Цитата DJ Mogarych
Powershell »

Благодарю, но мне бы лучше батник.

Проверил сейчас ваш код, работает медленно, к сожалению.
Но меня очень удивило то, что исходный файл 10МБ, а на выходе (без 2 первых символов) 10МБ. Как такое возможно?) Кодировка?

NickM 03-01-2023 21:10 3000162

Цитата:

Цитата Asdshka
работает медленно, к сожалению. »

Происходит запись на носитель;

Цитата:

Цитата Asdshka
что исходный файл 10МБ, а на выходе (без 2 первых символов) 10МБ. Как такое возможно?) »

А что именно не так?
2 символа - 2 байта.

YuS_2 04-01-2023 10:47 3000190

Цитата:

Цитата Asdshka
мне бы лучше батник. »

Лучше чем, что?

Цитата:

Цитата Asdshka
Проверил сейчас ваш код, работает медленно, к сожалению. »

И Вы думаете, что батник победит все рекорды скорости? :)

Цитата:

Цитата Asdshka
скрипт, который удаляет первые N символов каждой строки текстового файла »

Код:

$fin = 'test.txt'
$fout = 'out.txt'
$n = 2
$pattern = "^.{$n}"

$reader = [io.streamreader]::new($fin)
$writer = [io.streamwriter]::new($fout)
while ($reader.peek() -ne -1) {
        $writer.writeline($reader.readline() -replace $pattern)
}
$reader.dispose();$reader.close()
$writer.dispose();$writer.close()

Результат работы с файлом, размером 127Mb:
TotalSeconds : 8,0404748

Цитата:

Цитата Asdshka
второй скрипт, который удаляет последние N символов каждой строки текстового файла »

Для этого будет достаточно заменить шаблон регэкспа...

Asdshka 04-01-2023 20:45 3000272

Цитата:

Цитата NickM
А что именно не так? »

Я опечатался. Исходная 10МБ, а на выходе 19МБ

Цитата:

Цитата YuS_2
И Вы думаете, что батник победит все рекорды скорости? »

Нет, просто для меня это было бы очень удобно, но и за этот вариант огромное спасибо

А подскажите, пожалуйста, какой $pattern использовать для того, чтобы был не номер символа, а конкретный символ.
Например до символа "@" и после символа "@"

YuS_2 05-01-2023 07:35 3000287

Цитата:

Цитата Asdshka
до символа "@" »

Код:

"^.+(?=@)"
Цитата:

Цитата Asdshka
после символа "@" »

Код:

"(?<=@).+$"

DJ Mogarych 05-01-2023 14:32 3000321

Если разделитель @ не нужен
Код:

("etete@ututu.fi") -replace '@.+'
etete
("etete@ututu.fi") -replace '.+@'
ututu.fi



Время: 10:22.

Время: 10:22.
© OSzone.net 2001-