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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Помогите написать скрипт удаления не нужных абзацев в тексте. (http://forum.oszone.net/showthread.php?t=322914)

namin78 19-01-2017 07:36 2704650

Помогите написать скрипт удаления не нужных абзацев в тексте.
 
Желательно js/
Есть файл fb2. В нем есть лишние абзацы. Нужно при запуске скрипта, опросить начальную строку и конечную строку. И после нажатия "ок", удалить все между этих строк, включая эти строки.
Пример есть текст :

Скрытый текст
Обговорив с женой через интерфейс скафандров все обнаруженное мы пришли пока к решению не форсировать события и посмотреть что будет дальше. Общаться решили через интерфейс скафандра из за моей паранойи, в моем прошлом мире я слышал байки о том что сильный маг разума может подслушивать телепатическую связь на близком расстоянии, вот и решил перестраховаться. До ужина оставалось еще два часа, а потому мы решили просто полежать и отдохнуть.
Серж
Читать

Поиск

Копилка

FAQ

Почта

Глава 2
Примерно через час к нам зашел один из подчиненных Синтия и предложил переодеться в вещи достойные приема у Синтия, показав нам традиционные одежды для высшей аристократии из моего прошлого мира. Хоть я был признанным специалистом в своей области, но в связи с моим происхождением меня редко приглашали на приемы высшей аристократии. Если быть честным то только один когда помог одному графу с доставшимися в наследство древними артефактами. У нас в империи действовал закон, согласно которому все древние артефакты подлежат сдаче государству, а оно уже потом решает само что вернуть владельцу, а что оставить себе с минимальной компенсацией. Так вот граф попросил разобраться с артефактами и определить что у него там вообще есть, ведь действуя через официального оценщика артефакты почти сто процентов попали бы государству. И в благодарность за помощь граф заплатил мне пятьсот золотых и пригласил на помолвку своей дочери, хотя мне с моим торговым происхождениям там делать было нечего.



При запуске скрипта я ввожу начальную строку"Серж", конечную строку "Глава 2". Жму "ок". И на выходе получаю
Скрытый текст
Обговорив с женой через интерфейс скафандров все обнаруженное мы пришли пока к решению не форсировать события и посмотреть что будет дальше. Общаться решили через интерфейс скафандра из за моей паранойи, в моем прошлом мире я слышал байки о том что сильный маг разума может подслушивать телепатическую связь на близком расстоянии, вот и решил перестраховаться. До ужина оставалось еще два часа, а потому мы решили просто полежать и отдохнуть.

Примерно через час к нам зашел один из подчиненных Синтия и предложил переодеться в вещи достойные приема у Синтия, показав нам традиционные одежды для высшей аристократии из моего прошлого мира. Хоть я был признанным специалистом в своей области, но в связи с моим происхождением меня редко приглашали на приемы высшей аристократии. Если быть честным то только один когда помог одному графу с доставшимися в наследство древними артефактами. У нас в империи действовал закон, согласно которому все древние артефакты подлежат сдаче государству, а оно уже потом решает само что вернуть владельцу, а что оставить себе с минимальной компенсацией. Так вот граф попросил разобраться с артефактами и определить что у него там вообще есть, ведь действуя через официального оценщика артефакты почти сто процентов попали бы государству. И в благодарность за помощь граф заплатил мне пятьсот золотых и пригласил на помолвку своей дочери, хотя мне с моим торговым происхождениям там делать было нечего.


Таких кусков текста может быть несколько.

Iska 19-01-2017 09:11 2704658

Цитата:

Цитата namin78
Есть файл fb2. »

Образец файла упакуйте в архив и приложите к сообщению, либо выложите архив на RGhost/Яндекс.Диск. Укажите пример строк:
Цитата:

Цитата namin78
начальную строку"Серж", конечную строку "Глава 2" »

для выложенного образца. Желательно также, чтобы образец содержал указанное Вами:
Цитата:

Цитата namin78
Таких кусков текста может быть несколько. »


namin78 19-01-2017 09:48 2704664

Вложений: 1
Вот примерчик.http://forum.oszone.net/attachment.p...1&d=1484808471

Iska 19-01-2017 17:22 2704727

Попробуйте так (WSH/VBScript):
Скрытый текст
Код:

Option Explicit

Dim strSourceFile
Dim strFromString, strToString

Dim objDomDocument
Dim objXMLDOMElement

Dim boolDeletion


strSourceFile = "C:\Мои проекты\0037\пример\пример.fb2"

strFromString = InputBox("From string") ' "Rinat-106 M"
strToString  = InputBox("To string")  ' "С нами: 3 года 2 месяца"

Set objDomDocument = WScript.CreateObject("Microsoft.XMLDOM")
objDomDocument.load(strSourceFile)

boolDeletion = False

For Each objXMLDOMElement In objDomDocument.selectNodes("/FictionBook/body/section/p")
        If Not boolDeletion Then
                If StrComp(objXMLDOMElement.text, strFromString, vbTextCompare) = 0 Then
                        objXMLDOMElement.parentNode.removeChild objXMLDOMElement
                        boolDeletion = True
                End If
        Else
                objXMLDOMElement.parentNode.removeChild objXMLDOMElement
               
                If StrComp(objXMLDOMElement.text, strToString, vbTextCompare) = 0 Then
                        boolDeletion = False
                End If
        End If
Next

objDomDocument.Save strSourceFile
Set objDomDocument = Nothing

WScript.Quit 0


namin78 19-01-2017 21:10 2704757

Все работает. Огромное спасибо. Единственное вопрос по имени файла(пример.fb2), какой код добавить в начале в скрипт, чтобы скрипт работал с файлом, который я перетащил на него?

Разобрался сам. Огромное спасибо еще раз.

Iska 19-01-2017 22:21 2704793

Цитата:

Цитата namin78
чтобы скрипт работал с файлом, который я перетащил на него? »

Примерно так (не проверялось):
Скрытый текст
Код:

Option Explicit

Dim strSourceFile
Dim strFromString, strToString

Dim objXMLDOMElement

Dim boolDeletion


If WScript.Arguments.Count = 1 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        If WScript.CreateObject("Scripting.FileSystemObject").FileExists(strSourceFile) Then
                strFromString = InputBox("From string") ' "Rinat-106 M"
                strToString  = InputBox("To string")  ' "С нами: 3 года 2 месяца"
               
                With WScript.CreateObject("Microsoft.XMLDOM")
                        .load(strSourceFile)
                       
                        boolDeletion = False
                       
                        For Each objXMLDOMElement In .selectNodes("/FictionBook/body/section/p")
                                If Not boolDeletion Then
                                        If StrComp(objXMLDOMElement.text, strFromString, vbTextCompare) = 0 Then
                                                objXMLDOMElement.parentNode.removeChild objXMLDOMElement
                                                boolDeletion = True
                                        End If
                                Else
                                        objXMLDOMElement.parentNode.removeChild objXMLDOMElement
                                       
                                        If StrComp(objXMLDOMElement.text, strToString, vbTextCompare) = 0 Then
                                                boolDeletion = False
                                        End If
                                End If
                        Next
                       
                        .Save strSourceFile
                End With
        Else
                WScript.Echo "Can't find source file [" & strSourceFile & "]."
                WScript.Quit 2
        End If
Else
        WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
        WScript.Quit 1
End If

WScript.Quit 0


namin78 31-01-2017 17:41 2707781

Вложений: 1
Iska, Вечер добрый, Вы мне недавно помогли(за что спасибо).
Есть еще одна просьба. Тот же fb2 файл, очень многие диалоги, начинаются с маленькой буквы(должны с большой).
Код:

<p>— и что же? — спросил начальник абордажной команды, здоровенный бугай, с татуировкой на всю лысую голову, с изображением взбешённого осьминога.</p>
<p>— что? А вы заметили, сколько в городе на данный момент ушастых? Кстати, все они моряки, причём военные. Нашего капитана и его помощника, окучивают на предмет покупки кораблей, только цены дают… и требуют обучить их магов для пользования движителей, причём без всякой охраной клятвы.</p>
<p>— кэп запёрся в своей вотчине и никуда носа не кажет. Поговаривают даже стычка у него была с ребятами Мика. — влез в разговор ещё один из «печальных» пиратов.</p>

Надо проверить в начале строки наличие длинного тире, если есть, то проверить какая буква идет через пробел после тире, если строчная, поменять на заглавную, если заглавная ни чего не делать.
Заранее спасибо.

Iska 11-02-2017 17:28 2710915

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

Цитата namin78
какая буква идет через пробел после тире »

Там преимущественно неразрывные пробелы.

Примерно так: Файл 143377.

Оригинал будет сохранён в одноимённый файл с расширением .bak. Если таковой уже существовал — он будет перезаписан без подтверждения.

Iska 11-02-2017 17:46 2710921

И, похоже, это ещё не конец. Там и тире не все длинные :lol:.
Код:

<p>- Ты глянь какая громадина в косынке в таверну-то забрела?</p>

<p>- но как такое может быть?*— удивлённо взирает на безопастника император.</p>

и т.д.

Добавил уточнение в предыдущий код.

mwz 11-02-2017 18:09 2710933

Цитата:

Цитата Iska
на безопастника »

Н-да, в том тексте с грамотностью вообще не всё, мягко говоря, в порядке: споткнувшись на этом пассаже, посмотрел и остальные приведённые здесь строки того текста. :(

Iska 11-02-2017 18:13 2710934

Так. Ещё и движок форума меняет неразрывный пробел на звёздочку. Убрал код, заменил на вложение.

namin78 14-02-2017 07:49 2711590

Спасибо.


Время: 02:38.

Время: 02:38.
© OSzone.net 2001-