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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   [решено] Продвинутая замена текста (http://forum.oszone.net/showthread.php?t=340899)

vk_k14m@vk 12-06-2019 00:06 2875315

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

Пример таких кодов
Код:

@texton
@interlude_start
@r
  [wrap text="It"]It [wrap text="was"]was [wrap text="a"]a [wrap text="thrust"]thrust [wrap text="like"]like [wrap text="lightning."]lightning.[l][r]
  [wrap text="A"]A [wrap text="spearhead"]spearhead [wrap text="thrust"]thrust [wrap text="to"]to [wrap text="pierce"]pierce [wrap text="my"]my [wrap text="heart."]heart.[l][r]
  [wrap text="Trying"]Trying [wrap text="to"]to [wrap text="dodge"]dodge [wrap text="it"]it [wrap text="would"]would [wrap text="be"]be [wrap text="useless."]useless.[l][r]
  [wrap text="Being"]Being [wrap text="lightning,"]lightning, [wrap text="it's"]it's [wrap text="invisible"]invisible [wrap text="to"]to [wrap text="the"]the [wrap text="human"]human [wrap text="eye."]eye.[l][r]
@textoff
@se file=se085 nowait=true
@blackout rule=右から左へ vague=64 time=200
@se file=se088 nowait=true
@quakeT time=1200 vmax=15 hmax=30

Как вы наверно догадались, я о кодах [wrap text=""]. У этих кодов есть понятная закономерность, в скобках отображается тот же текст, что и после закрытия квадратной скобки до первого пробела или другой квадратной скобки.
[wrap text="It"]It
[wrap text="was"]was
[wrap text="a"]a
и т.д.

И вот мне нужен способ удаления этих кодов вместе с тем что находится в скобках. В результате должно получится нечто такое
Код:

@texton
@interlude_start
@r
  It was a thrust like lightning.[l][r]
  A spearhead thrust to pierce my heart.[l][r]
  Trying to dodge it would be useless.[l][r]
  Being lightning, it’s invisible to the human eye.[l][r]
@textoff
@se file=se085 nowait=true
@blackout rule=右から左へ vague=64 time=200
@se file=se088 nowait=true
@quakeT time=1200 vmax=15 hmax=30

Не подскажите как бы это можно было б сделать?

З.Ы. Если есть более подходящий раздел для этого вопроса, не затруднитесь подсказать...

a_axe 12-06-2019 01:06 2875319

Цитата:

Цитата vk_k14m@vk
У этих кодов есть понятная закономерность, в скобках отображается тот же текст, что и после закрытия квадратной скобки до первого пробела или другой квадратной скобки. »

Если удалить нужно все, что находится между знаками "[" и "]", то как один из вариантов содержимое можно скопировать в Word, тогда задача решается поиском и заменой по строке "[^0091]*[^0093]" без кавычек с опцией "подстановочные знаки", но при этом будет удален весь текст между скобками, в том числе [l][r].

Если задача удалить только то, что дублируется после квадратных скобок - вероятно нужно писать скрипт.

Добавлено:
Если в каждом выражении обязательно присутствует текст "[wrap text=", то поиск можно сузить запросом:
[^0091]wrap text="*"[^0093]

Iska 12-06-2019 01:15 2875320

Ну, например, на PowerShell:
Скрытый текст
Код:

$oRegExp = New-Object -TypeName 'System.Text.RegularExpressions.Regex' -ArgumentList '\[wrap text=\".*?\"\]'


Get-ChildItem -Path 'C:\Мои проекты\0264\*.txt' |`
    ForEach-Object -Process {
        $sContent = Get-Content -Path $_.FullName -Raw -Encoding 'Unicode'
        Write-Host $_.FullName -NoNewline

        if($oRegExp.IsMatch($sContent)) {
            $sContent = $oRegExp.Replace($sContent, '')
            Rename-Item -Path $_.FullName -NewName "$($_.BaseName).bak"
            Set-Content -Path $_.FullName -Value $sContent -Encoding 'Unicode'

            Write-Host "`tOk"
        } else {
            Write-Host "`tPattern not found"
        }
    }


Задайте Ваши пути, расширения файлов и правильную кодировку.


Время: 14:01.

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