Войти

Показать полную графическую версию : [решено] вырезать часть текста и скопировать его в новый файл


Страниц : [1] 2

temphard
26-03-2017, 00:30
Доброго времени суток.
Существует файл 1.txt. В нем содержится много текста (html код).
Необходимо найти определенные части текста и скопировать их в файл 2.txt построчно.
Пример части текста <url><loc>https://mysite.com/files/promo-category-copy/12345</loc><lastmod>Перед этим текстом и после него находится еще очень много другого текста.

Более конкретней:
Вот эта часть: <url><loc>https://mysite.com/files/ никогда не меняется.
Вот эта часть: promo-category-copy/12345 всегда меняется.
Вот эта часть: </loc><lastmod> никогда не меняется.

Задача:
Найти эту часть: promo-category-copy/12345 скопировать ее и вставить в отдельную строку файла 2.txt.
Затем найти следующую такую же часть текста, скопировать ее и вставить в отдельную строку файла 2.txt и так далее.
Если с помощью CMD/BAT такая задача в принципе не возможна, то вполне подойдет VBS.

Заранее благодарен.

Здесь образец:
http://forum.oszone.net/attachment.php?attachmentid=144494&d=1490531050

Условие:
Необходимо найти информацию, которая всегда содержится между этим uploader info=" и этим "> текстом (в данном случае это ссылка), скопировать ее и вставить в файл 2.txt в одной строке и так далее.
Спасибо.

Iska
26-03-2017, 03:49
temphard, несколько образцов файлов упакуйте в архив и приложите к сообщению.

temphard
26-03-2017, 12:57
Цитата Iska:
приложите к сообщению »
Добавил образец к первому сообщению.

Iska
26-03-2017, 14:55
temphard, вложение недоступно.

temphard
26-03-2017, 15:25
вложение недоступно »
Старнно. Обновил. Должно быть доступно.

Iska
26-03-2017, 16:32
Превосходно. Первым делом мы выясняем, что это не txt, не html, а xml :). Теперь давайте таки определимся, так какой же именно тэг Вас интересует (ибо после Вашей правки первого сообщения всё токмо запуталось):
http://i.imgur.com/humY78J.png
и опять же — целиком, или только какая-то его часть.

temphard
26-03-2017, 20:53
целиком, или только какая-то его часть »
В этом случае целиком, именно то, что находится между заданными параметрами между этим uploader info=" и этим "> текстом
Суть в том, чтобы в скрипте можно было задавать (менять) параметры поиска текста.
Указал одну и вторую часть текста, а то что находится между этими частями, скрипт мог находить и копировать в отдельный файл. Примерно так.

Iska
26-03-2017, 22:16
temphard, с xml работают по совсем другому принципу, а именно: указывая путь и условия отбора внутри иерархии документа.

На WSH:
Option Explicit

Dim strSourceFile
Dim strDestFile

Dim objFSO

Dim objXMLDOMSelection
Dim objXMLDOMElement


strSourceFile = "C:\Мои проекты\0054\01.txt"
strDestFile = "C:\Мои проекты\0054\Result.txt"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strSourceFile) Then
With WScript.CreateObject("Microsoft.XMLDOM")
.load strSourceFile

Set objXMLDOMSelection = .selectNodes("/urlset/url/video:video/video:uploader")

If Not objXMLDOMSelection Is Nothing Then
With objFSO.CreateTextFile(strDestFile, True)
For Each objXMLDOMElement In objXMLDOMSelection
.WriteLine objXMLDOMElement.Attributes.getNamedItem("info").text
Next

.Close
End With
End If

Set objXMLDOMSelection = Nothing
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

temphard
26-03-2017, 22:20
На WSH »
Этот код надо поместить в блокнот? А с каким расширением сохранить файл?
Извините , но никогда ранее не пользовался WSH

Я создал текстовый документ, вставил в него вышеуказанный скрип (поправил путь к файлу 1.txt), сохранил с расширением WSH и запустил.
Выдало окно с надписью: Сценарий не указан
Что я делаю не так?

temphard
26-03-2017, 22:45
Так, немного почитал...
Расширение файла со скриптом должно быть *.js. Изменил WSH на JS.
Запустил и выдало ошибку:
Ошибка: Предполагается наличие ';'
Что делать дальше?

glukin
26-03-2017, 23:07
temphard, *.vbs попробуйте. )))

temphard
26-03-2017, 23:20
Цитата glukin:
vbs попробуйте »
Спасибо, попробовал, вроде работает.
А если нужная для поиска ссылка обрамлена вот так <url><loc>https://mysite.com/files/promo-category-copy/12345</loc><lastmod>, то какие параметры поиска необходимо указывать?
Хочу вникнуть в суть, чтобы в дальнейшем быть независимым в этом вопросе

Iska
26-03-2017, 23:20
Что делать дальше? »
Использовать расширение «.vbs». Это VBScript.

WSH — Windows Script Host, сервер сценариев для Windows. По умолчанию поставляется в комплекте с двумя языками — VBScript и JScript, но в принципе может быть расширен и другими языками со стороны. «.wsh» — расширение для файла описания сценария.

А если нужная для поиска ссылка обрамлена вот так <url><loc>https://mysite.com/files/promo-category-copy/12345</loc><lastmod>, то какие параметры поиска необходимо указывать? »
Нужно видеть полную структуру файла xml. По куску текста сказать ничего нельзя.

temphard
26-03-2017, 23:38
Нужно видеть полную структуру файла xml »
144505
Здесь полный файл xml.
В нем много разных ссылок, но нужно найти и скопировать например только такие ссылки: https://3docean.net/item/mini-cooper-rev/17352183, то есть у которых обязательно присутствует вот эта часть: https://3docean.net/item/

Iska
27-03-2017, 00:30
Option Explicit

Dim strSourceFile
Dim strDestFile

Dim objFSO

Dim objXMLDOMSelection
Dim objXMLDOMElement


strSourceFile = "C:\Мои проекты\0054\02.txt"
strDestFile = "C:\Мои проекты\0054\Result.txt"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strSourceFile) Then
With WScript.CreateObject("Microsoft.XMLDOM")
.load strSourceFile

Set objXMLDOMSelection = .selectNodes("/urlset/url/loc")

If Not objXMLDOMSelection Is Nothing Then
With objFSO.CreateTextFile(strDestFile, True)
For Each objXMLDOMElement In objXMLDOMSelection
.WriteLine objXMLDOMElement.text
Next

.Close
End With
End If

Set objXMLDOMSelection = Nothing
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

temphard
27-03-2017, 00:37
Цитата Iska:
Скрытый текст »
Шикарно, спасибо.
Воспользовавшись XML Notepad понял, как формируется вот эта строка скрипта Set objXMLDOMSelection = .selectNodes("/urlset/url/loc")Все работает, и кстати быстро.
И еще:
Можно ли воспользоваться данным скриптом пакетно?
Например каким образом указать, чтобы скрипт обработал последовательно все файлы в определенном каталоге и записал нужную информацию в один файл?

Iska
27-03-2017, 01:57
Можно ли воспользоваться данным скриптом пакетно?
Например каким образом указать, чтобы скрипт обработал последовательно все файлы в определенном каталоге и записал нужную информацию в один файл? »
Данный код изначально не предполагался для подобного использования. Посему — никак.

На WSH:
Option Explicit

Const strDestFile = "Result.txt"


Dim strSourceFolder

Dim objFSO
Dim objTS
Dim objFile

Dim objXMLDOMSelection
Dim objXMLDOMElement


If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
Set objTS = objFSO.CreateTextFile(strDestFile, True)

With WScript.CreateObject("Microsoft.XMLDOM")
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
If StrComp(objFSO.GetExtensionName(objFile.Name), "xml", vbTextCompare) = 0 Then
.load objFile.Path

Set objXMLDOMSelection = .selectNodes("/urlset/url/loc")

If Not objXMLDOMSelection Is Nothing Then
For Each objXMLDOMElement In objXMLDOMSelection
objTS.WriteLine objXMLDOMElement.text
Next
End If

Set objXMLDOMSelection = Nothing
End If
Next
End With

objTS.Close
Set objTS = Nothing
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If

Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
WScript.Quit 1
End If

WScript.Quit 0
Исходный каталог указывается аргументом скрипта (можно также просто перетянуть исходную папку на скрипт в Проводнике). Обработке подлежат только файлы с расширением .xml, все прочие игнорируются. Результат записывается в текущий каталог в файл Result.txt.

temphard
27-03-2017, 03:33
Цитата Iska:
Исходный каталог указывается аргументом скрипта
То есть вместо значения <Source folder> нельзя указать нужный каталог? Я уже попробовал, но не работает.
Вы уж извините, но понятие: аргументы в скриптах для меня еще темный лес.
можно также просто перетянуть исходную папку на скрипт в Проводнике
Воспользовался этим советом - работает!
В любом случае огромная благодарность. Скрипт главную задачу выполняет, вопрос решен!

Iska
27-03-2017, 05:44
То есть вместо значения <Source folder> нельзя указать нужный каталог? Я уже попробовал, но не работает. »
Можно, конечно, и напрямую в коде указывать (подправив сам код), но это не рационально.

vavamedved@vk
08-11-2017, 23:07
Ребят, не силен в программировании, поэтому искал более простой путь и он такой:
Запускаем cmd и пишем findstr /C:"<loc>" file.xml > url.txt
имеем на выходе за пару секунд текстовый файл с построчными ссылками в виде <loc>www.com</loc>




© OSzone.net 2001-2012