VBScript для сравнения каждой строки строки с каждой строкой текстового файла и замены - PullRequest
2 голосов
/ 24 марта 2019

Я создаю небольшой инструмент переводчика .srt, который будет очищать каждую текстовую строку файла .srt, переводить с помощью google translate и вносить замены в новый файл.У меня все сделано, кроме как сделать фактические замены.Кажется, это должно быть легко, но я борюсь с итерацией.

Вот мой код:

Set IE = CreateObject("internetexplorer.application")
Set objFSO = CreateObject("Scripting.FileSystemObject")

SourceCaptionFile = objFSO.GetParentFolderName(WScript.ScriptFullName) & "\captions.srt"
OutputCaptionFile = objFSO.GetParentFolderName(WScript.ScriptFullName) & "\NEW_captions.srt"

on error resume next

langURL_es = "https://translate.google.com/#view=home&op=translate&sl=en&tl=es"

'============================================================

Set objFile = objFSO.OpenTextFile(SourceCaptionFile, 1, true) 'for reading

Do until objFile.AtEndOfStream

    if instr(objFile.Readline,">") then
        capText = capText & objFile.ReadLine & vbcrlf
    end if
loop

objFile.Close

'============================================================

'Navigate to translator and get translations
IE.Visible = true
IE.Navigate langURL_es
Do While IE.Busy or IE.ReadyState <> 4: WScript.sleep 100: Loop
Do Until IE.Document.ReadyState = "complete": WScript.sleep 100: Loop

wscript.sleep 1000

capline = split(capText,vbcrlf)

for i = 0 to ubound(capline)

    ie.document.getelementbyid("source").innertext = capline(i)

    Do While IE.Busy or IE.ReadyState <> 4: WScript.sleep 100: Loop
    Do Until IE.Document.ReadyState = "complete": WScript.sleep 100: Loop

    for each div in ie.document.getelementsbytagname("div")
        if div.getAttribute("class") = "result-shield-container tlid-copy-target" then
            captrans = captrans & capline(i-1) & "," & div.innertext & vbcrlf
        end if
    next
next

'============================================================
'**************THIS IS THE SECTION THAT'S NOT WORKING RIGHT**************

'compare translations against captions.srt file and make replacements

Set objFile = objFSO.OpenTextFile(SourceCaptionFile, 1, true) 'for reading

splitfile = split(objfile.readall,vbcrlf)

for each a in splitfile

    arrCaptrans = split(captrans,",")

    for i = 0 to ubound(arrCaptrans)

            if a = arrCaptrans(i) then
                newline = newline & arrCaptrans(i+1) & vbcrlf
            else
                newline = newline & a & vbcrlf
            end if
    next
next

objFile.Close

wscript.echo newline
'============================================================
'Write translated file

Set objTransFile = objFSO.OpenTextFile(OutputCaptionFile, 2, true) 'for writing

objTransFile.write newline
objTransFile.Close


'============================================================

wscript.echo "Done"

Вот результат, который я ожидаю:

1
00: 00: 06,800 -> 00: 00: 11,040
-¡Tenemos que averiguar cómo abrir esto!

2
00: 00: 11,080 -> 00: 00: 13,040
-¿Qué haces con ese nickel?

3
00: 00: 13,160 -> 00: 00: 20,440
-Por eso necesitamos sacar el dinero del chocolate de aquí.

4
00: 00: 20,440 -> 00: 00: 22,080
-No hay chocolate dentro de eso.

5
00: 00: 22,580 -> 00: 00: 23,960
-Sí hay

Вот содержимое моего исходного файла "captions.srt":

1
00:00:06,800 --> 00:00:11,040
-We have to figure out how to open this!

2
00:00:11,080 --> 00:00:13,040
-What are you doing with that nickel?

3
00:00:13,160 --> 00:00:20,440
-That's why we need to get the chocolate money out of here

4
00:00:20,440 --> 00:00:22,080
-There's no chocolate inside that.

5
00:00:22,580 --> 00:00:23,960
-Yes there is

* РЕДАКТИРОВАТЬ: я пытаюсь сравнить каждую строку исходного файла .srt сСтрока, которую я назвал "Captrans".«captrans» содержит строки «sourcetext, translationtext».Я разделяю запятые, читая каждую строку исходного файла, и если строка исходного файла соответствует (до запятой) captrans, то меняю на (после запятой) captrans.Надеюсь, это имеет смысл ...

Спасибо за любую помощь, которую вы можете предоставить!

...