PDA

Показать полную графическую версию : Скопировать определенные строки в кодировке "UTF-8" из .txt - файлов


KOD65001
17-06-2020, 14:49
Есть папка "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
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
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
Fors1k, во время запуска появляется окно с ошибкой, строка 1 символ 7

Fors1k
26-06-2020, 12:51
Этот код вам нужно выполнить в PowerShell.

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

Fors1k
26-06-2020, 13:41
Нужно разрешить выполнение скриптов.
Запустите powershell от администратора, и выполните
Set-ExecutionPolicy Unrestricted -Force
После запускайте нужные скрипты.

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

Fors1k
26-06-2020, 18:42
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
Теперь код выполняет все что нужно! Код - супер! :) Большая благодарность Fors1k за предоставленный код! Задача можно сказать уже решена. Мне будет еще интересно узнать, какими еще вариантами можно выполнить эту же задачу? Это для моего познания. :) В PowerShell все хорошо работает, а например на vbs или даже в bat вот такое возможно ли реализовать?

DJ Mogarych
27-06-2020, 22:18
Возможно, но гораздо геморройнее.

Iska
28-06-2020, 09:49
Мне будет еще интересно узнать, какими еще вариантами можно выполнить эту же задачу? Это для моего познания. В PowerShell все хорошо работает, а например на vbs или даже в bat вот такое возможно ли реализовать? »
WSH можно, но нуднее. На пакетных файлах — лучше и не пытаться.




© OSzone.net 2001-2012