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

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

KOD65001 17-06-2020 14:49 2925328

Скопировать определенные строки в кодировке "UTF-8" из .txt - файлов
 
Есть папка "111" в ней много разных подпапок с разными уровнями. В подпапках текстовые файлы в количестве примерно 14500 штук с расширением .txt большая часть текстовых файлов сохранены в кодировке юникода "UTF-8", также НЕКОТОРЫЕ из них сохранены в кодировке ANSI. Внутри этих текстовых файлов имеются строки в количестве примерно от 5 до 500 СТРОК в каждом текстовом файле.
В каждой строке МОГУТ содержаться пробелы в начале, в конце, в середине, даже пробелы есть после и перед разделителями (":" "=" "-") и пустые строки между строками.
Вот пример того, какой текст содержится в одном текстовом файле внутри:
(текст с непонятными иероглифами - это тайский язык, взят для примера)


РуЧкА!$#
БоЧкА:© นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
БоЧкА : © นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ

https://taxi.yandex.ru/
БоЧкА =Ґ ©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ © นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥Iв™

диск
www.avito.ru/sankt-peterburg/
БоЧкА - !@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()


http://www.avito.ru/
БоЧкА Д!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
БоЧкАФ!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
serVeR !!!"""№№№;;;%% %:::???***((()))!!!"""№№№;;;%%%:::???* **((()))
serVeR:© นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
serVeR : © นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
serVeR =Ґ ©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ © นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥Iв™

Адреса сайтов...

https://www.avito.ru/irkutsk/
serVeR - !@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()

диск
serVeR Д!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()

serVeR!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()



Нужно чтобы после запуска VBS скрипта с помощью использования "ADO"
Создался ОДИН текстовый файл с расширением .txt в него скопировать строки идущие после разделителя и без разделителя, указанных слов..в нашем примере это:"БоЧкА" "serVeR". А те части строчки которые идут после разделителей ":" где адреса сайтов будут игнорироваться, адреса сайтов мне не нужны! В основу кода можно взять то что они начинаются со строк "https" "http" "www"! Слова "БоЧкА" "serVeR" взяты чисто для примера, но по возможности нужно сделать так, чтобы их можно было в скрипте vbs поменять на свои, они могут быть написаны русскими словами или английскими ("указынные слова" не используют спецсимволы юникода). Убрать все пробелы которые которые идут между разделителем (":" "=" "-") и началом части строки (которая в юникоде записана), удалить пустые строки. Заранее извиняюсь, если я не все объяснил, просто я новичок, прошу сильно не пинать. Я только начинаю изучать создание скриптов VBS. Рассматривать буду разные методы решения одной и той же задачи НА VBS - это для моего познания так сказать :)
Вот что должно получиться после запуска VBS скрипта с помощью использования "ADO"



© นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
© นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
Ґ ©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ © นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥Iв™
!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
Д!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
Ф!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
!!!"""№№№;;;%% %:::???***((()))!!!"""№№№;;;%%%:::???* **((()))
© นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
© นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥I♥©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ
Ґ ©Спасибо♥ ¤ © 办公室 λ ½ ▅ & $ 4 Рё En ц™ มิ © นี่คือวันอันยิ่งใหญ่ ♥ SёЁщы©♥Iв™
!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
Д!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()
!@#$%^&*() !@#$%^&*() !@#$%^&*()!@# $%^&*()!@# $%^&*()!@#$%^&*()

Fors1k 22-06-2020 13:01 2925877

Код:

param(
    $PathIn  = "C:\Files\111",
    $PathOut = "C:\result.txt",
    $words  = ("serVeR","БоЧкА"),
    $delims  = ("-"," ", "=",":")
)cls

gci  $pathin  *.txt|%{(((gc  $_.FullName -raw)|
sls  "(?<=($($words -join '|'))).*"-a).Matches.
Value).TrimStart($delims)|out-file $PathOut -a}


KOD65001 26-06-2020 12:13 2926348

Вложений: 1
Цитата:

Цитата Fors1k
param(
$PathIn = "C:\Files\111",
$PathOut = "C:\result.txt",
$words = ("serVeR","БоЧкА"),
$delims = ("-"," ", "=",":")
)cls
gci $pathin *.txt|%{(((gc $_.FullName -raw)|
sls "(?<=($($words -join '|'))).*"-a).Matches.
Value).TrimStart($delims)|out-file $PathOut -a} »


KOD65001 26-06-2020 12:15 2926349

Fors1k, во время запуска появляется окно с ошибкой, строка 1 символ 7

Fors1k 26-06-2020 12:51 2926358

Этот код вам нужно выполнить в PowerShell.

KOD65001 26-06-2020 13:26 2926364

Вложений: 1
Да, догадался что в PowerShell нужно выполнить :) ...но тем не менее все равно и в PowerShell ошибки красные показывает...я видимо что то не так делаю. Сохранял в буфер обмена код и вставлял, потом пробовал просто файл с кодом сохранить в расширении .ps1 и нажимал выполнить в PowerShell, красные ошибки повторяются в разных вариантах, хотя пути пробовал ставить как в коде. Скриншот ошибки в PowerShell во вложении

Fors1k 26-06-2020 13:41 2926371

Нужно разрешить выполнение скриптов.
Запустите powershell от администратора, и выполните
Код:

Set-ExecutionPolicy Unrestricted -Force
После запускайте нужные скрипты.

KOD65001 26-06-2020 14:27 2926374

Спасибо Fors1k! :) Код Работает отлично! Данные из текстового файла сохраняет нужные! Но это только при условии, если все текстовые файлы расположены по пути C:\Files\111\eee.txt Можно ли сделать так чтобы проверялись в "указанной папке" и все ее "ПОДПАПКИ" (текстовые файлы) + как то сделать так чтобы в "текстовом файле результата" не повторялись строчки т.е. чтобы не были строчки одинаковыми. Дело в том, что среди многочисленных текстовых файлах может встретиться одинаковая строчка, хотя имя текстового файла может быть разным.

Fors1k 26-06-2020 18:42 2926387

Код:

param(
    $PathIn  = "C:\Files\111",
    $PathOut = "C:\result.txt",
    $words  = ("serVeR","БоЧкА"),
    $delims  = ("-"," ", "=",":")
)cls

gci $pathin  *.txt -rec|%{(((gc  $_.FullName -raw)|
sls  "(?<=($($words -join '|'))).*"  -all).Matches.
Value).TrimStart($delims).Trim()|%{if($_ -notin $t)
{$_|out-file  $PathOut -append;[string[]]$t+= $_}}}


KOD65001 27-06-2020 15:54 2926473

Теперь код выполняет все что нужно! Код - супер! :) Большая благодарность Fors1k за предоставленный код! Задача можно сказать уже решена. Мне будет еще интересно узнать, какими еще вариантами можно выполнить эту же задачу? Это для моего познания. :) В PowerShell все хорошо работает, а например на vbs или даже в bat вот такое возможно ли реализовать?

DJ Mogarych 27-06-2020 22:18 2926504

Возможно, но гораздо геморройнее.

Iska 28-06-2020 09:49 2926538

Цитата:

Цитата KOD65001
Мне будет еще интересно узнать, какими еще вариантами можно выполнить эту же задачу? Это для моего познания. В PowerShell все хорошо работает, а например на vbs или даже в bat вот такое возможно ли реализовать? »

WSH можно, но нуднее. На пакетных файлах — лучше и не пытаться.


Время: 00:01.

Время: 00:01.
© OSzone.net 2001-