Что нового

[Данные, строки] Парсер html страниц с заменой текста между известными тегами

Статус
Закрыто для дальнейших ответов.

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Tapok [?]
я хочу вставить новую илл. посередине, то ее номер должен быть скажем 5, а он уже занят
Я не понимаю, этот текст, кто будет задавать?
Вставить в таблице можно в любом порядке, заменять будет лишь соответствия.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Текст задаю я. Если у нас 500 иллюстраций, все пронумерованы от 1 до 500, гиперссылки на них расположены на 50 листах и я хочу в начало документа вставить новую иллюстрацию, то как мне это сделать, чтобы нумерация не поехала?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Tapok [?]
я хочу в начало документа вставить новую иллюстрацию, то как мне это сделать, чтобы нумерация не поехала?
В начало документа, или речь про скрипт?
Последний скрипт всего навсего делает замены по шаблонам, ему не важно где находится искомый текст.
Если речь всё же про документ, то почему не вставлять в конец, или в нужную позицию? Почему нумерация должна куда то ехать, ведь текст задаётся жёстко, и заменяется соответственно.

Если требуется сортировка по тексту, то это уже другая песня (тема).
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
В начало документа, или речь про скрипт?
В начало документа.
Если речь всё же про документ,
Речь идет о документе.
то почему не вставлять в конец,
Если идет описание чего-либо (введение) и в нем есть иллюстрации, то вставлять иллюстрацию для введения (самого начала описания чего-либо) в конец документа нет смысла, она должна быть рядом с описанием (в начале документа-во введении).
или в нужную позицию? Почему нумерация должна куда то ехать, ведь текст задаётся жёстко, и заменяется соответственно.
Как раз в нужную позицию документа я и хочу вставить дополнительную иллюстрацию, но допустим там уже вся нумерация занята, как быть?
Изначально, ссылки расставляются там, где нужно, но потом, при необходимости внутрь документа вклиниваются дополнительные иллюстрации, которые портят нумерацию, и в этом случае, видимо следует отсортировать все ссылки в документе, переназначив нумерацию. :blink:
Если требуется сортировка по тексту, то это уже другая песня (тема).
В целом же, если никаких новых иллюстраций внутрь документа с уже проставленными иллюстрациями не добавлять, то приведенный код очень даже подходит и на 100% выполняет свою задачу! :smile:

Еще раз большое спасибо! :beer:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok [?]
Как раз в нужную позицию документа я и хочу вставить дополнительную иллюстрацию, но допустим там уже вся нумерация занята, как быть?
1. Найти нужную позицию в документе.
2. Вставить в эту позицию ссылку на иллюстрацию.
3. Пересчитать (исправить) нижеследующую нумерацию иллюстраций.
4. Сформировать новый документ.

P.S. IMHO для каждой задачи есть свой инструмент, однако как пелось в одной песне: "Нормальные герои всегда идут в обход" :smile:
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
А можно уточнить вышеприведенный код так, чтобы номер иллюстрации был вида "4.1.15" т.е. (см. илл. 4.1.15)
Как для этого случая написать код? :-\
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok [?]
чтобы номер иллюстрации был вида "4.1.15"
Код:
Dim $aTable[][] = _
    [ _
        [1, 'Ягоды'], _
        [5, 'Фрукты'], _
        ['4.1.15', 'Овощи'] _
    ]

$sSpan = '<span ID="ACH-LINK" class="pic_ill/picture/Илл.%s.%s.png_name_Илл.^%s.^%s" title="">%s</span>'
$sFind = '(см. илл. %s)'

$sString = _
    '<p>1.3.4 Заголовок</p>' & @CRLF & _
    '<p>Подзаголовок 1 </p>' & @CRLF & _
    '<p>Текст 1</p>' & @CRLF & _
    '<p>Подзаголовок 2 </p>' & @CRLF & _
    '<p>Начало текста  (см. илл. 4.1.15) окончание текста. </p>' & @CRLF & _
    '<p>Начало текста  (см. илл. 5) окончание текста. </p>' & @CRLF & _
    '<p>Подзаголовок 3 </p>' & @CRLF & _
    '<p>Следующий текст  (см. илл. 5).</p>' & @CRLF

For $i = 0 To UBound($aTable) - 1
    $sFindFrmtd = StringFormat($sFind, $aTable[$i][0])

    $sString = StringReplace($sString, _
        $sFindFrmtd, _
        StringFormat($sSpan, $aTable[$i][0], $aTable[$i][1], $aTable[$i][0], $aTable[$i][1], $sFindFrmtd))
Next

ConsoleWrite($sString & @LF)
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Спасибо! Работает!!! :IL_AutoIt_1:

Еще вопрос, если файл для просмотра и замены один, то будет так:

$sString=FileRead("d:\project\start.txt")

А если их несколько, как сделать просмотр всех txt (html) файлов в папке?
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Да, действительно, есть такое!
В моем случае будет:
$FileList=_FileListToArray("d:\project\html", "*.html", 1)

Спасибо! :smile:


Добавлено:
Сообщение автоматически объединено:

УРА! Оно проверяет и делает замену во всех файлах! :smile:
Код:
#include <File.au3>
#include <Array.au3>

$FileList=_FileListToArray("d:\project\html_0", "*.html", 1)
If @error=4 Then
    MsgBox (0,"","Файлы/папки не найдены.")
    Exit
EndIf
;_ArrayDisplay($FileList,"$FileList")

Dim $aTable[][] = _
    [ _
        ['5', 'Ягоды'], _
        ['4.1', 'Фрукты'], _
        ['4.1.15', 'Овощи'] _
    ]

$sSpan = '<span ID="ACH-LINK" class="pic_ill/picture/Илл.%s.%s.png_name_Илл.^%s.^%s" title="">%s</span>'
$sFind = '(см. илл. %s)'

For $j = 1 To $FileList[0] Step 1

$sString=FileRead("d:\project\html_0\"&$FileList[$j])

For $i = 0 To UBound($aTable) - 1
    $sFindFrmtd = StringFormat($sFind, $aTable[$i][0])

    $sString = StringReplace($sString, _
        $sFindFrmtd, _
        StringFormat($sSpan, $aTable[$i][0], $aTable[$i][1], $aTable[$i][0], $aTable[$i][1], $sFindFrmtd))
Next

;ConsoleWrite($sString & @LF)

FileWriteline("d:\project\html\"&$FileList[$j], $sString & @LF)

Next


Спасибо! :IL_AutoIt_1:


Добавлено:
Сообщение автоматически объединено:

Теперь надо вынести заполнение соответствия номер-название иллюстрации из файла Autoit в отдельный файл txt и из него читать

Код:
Dim $aTable[][] = _
    [ _
        ['5', 'Ягоды'], _
        ['4.1', 'Фрукты'], _
        ['4.1.15', 'Овощи'] _
    ]


Причем количество строк (соответствий) заранее не задано :-\

Файл соответствий видимо должен выглядеть так:

5, Ягоды
4.1, Фрукты
4.1.15, Овощи
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok [?]
Причем количество строк (соответствий) заранее не задано
undecided.gif
IMHO вам в стол заказов.
Это раздел регулярных выражений! Ваши вопросы больше подходят для разделов AutoIt для новичков и Стол заказов

К выше сказанному, осмелюсь ещё раз заострить ваше внимание на замечание в ответе №19.
А именно:
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.





Тема закрыта.
 
Статус
Закрыто для дальнейших ответов.
Верх