Я создаю небольшой инструмент переводчика .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.Надеюсь, это имеет смысл ...
Спасибо за любую помощь, которую вы можете предоставить!