Orion9

|
Posted: Tue Jan 06, 2026 13:07 Post subject: |
|
|
Avada
А Russian.cedf с поправками когда будет доступен?
Дело не в спешке. Я просто забыл приложить скрипт для сравнения cedf-файлов, а вдруг он кому-то будет интересен.
 Hidden text | Code: | RegisterCommand 60042 "CompareTwoCedfs"
Func CompareTwoCedfs()
Local txt, rex, out, i = 0, bCtrl = IsPressed(0x11)
Local dir = COMMANDER_PATH & "\Tools\UltraEditors\Data Files"
Local rus = dir & "\Russian.cedf", eng = dir & "\English.cedf"
Local T1 = GetUptime(), T2 = T1, T3
If Not FileExist(rus) Then
MsgBox("Файл не найден " & rus)
Return
EndIf
If Not FileExist(eng) Then
MsgBox("Файл не найден " & eng)
Return
EndIf
ShowOptHint("Parsing.")
Sleep(200)
# чтение файлов
Local txt_rus = FileRead(rus)
Local txt_eng = FileRead(eng)
# наполнение массивов
Local aRus1 = List(), aEng1 = List()
Local aRus2 = List(), aEng2 = List()
rex = RegExp('<key name="(.*?)" file="(.*?)" section="(.*?)" default="(.*?)" version="(.*?)".*?' & _
'<description>(.*?)</description>', txt_rus)
If rex.Exec() Then
Do
i += 1
aRus1.Add("[" & rex.Match[3] & "]" & Chr(9) & rex.Match[1])
aRus2.Add("[" & rex.Match[3] & "]" & Chr(9) & rex.Match[1] & Chr(9) & '"' & rex.Match[4] & '"')
T3 = GetUptime()
If Round(T3 - T2, 0) > 400 Then
#ShowOptHint("Keys processed: " & i & auCRLF & rus)
T2 = T3
EndIf
Until Not rex.ExecNext()
EndIf
Free(rex)
rex = RegExp('<key name="(.*?)" file="(.*?)" section="(.*?)" default="(.*?)" version="(.*?)".*?' & _
'<description>(.*?)</description>', txt_eng)
If rex.Exec() Then
i = 0
Do
i += 1
aEng1.Add("[" & rex.Match[3] & "]" & Chr(9) & rex.Match[1])
aEng2.Add("[" & rex.Match[3] & "]" & Chr(9) & rex.Match[1] & Chr(9) & '"' & rex.Match[4] & '"')
T3 = GetUptime()
If Round(T3 - T2, 0) > 400 Then
#ShowOptHint("Keys processed: " & i & auCRLF & eng)
T2 = T3
EndIf
Until Not rex.ExecNext()
EndIf
Free(rex)
ShowOptHint(aRus1.Count & " Russian keys total." & auCRLF & aEng1.Count & " English keys total.")
Sleep(1100)
# сравнение массивов
ShowOptHint("Comparing.")
out &= "--------------------------------------" & auCRLF
out &= " Russian.cedf -> English.cedf" & auCRLF
out &= "--------------------------------------" & auCRLF
Local j = 0
Local idx, val
For i = 0 To aRus1.Count - 1
# поиск несуществующих ключей
If Not bCtrl And aEng1.IndexOf(aRus1[i]) = -1 Then
j += 1
out &= StrFormat("%03d", j) & " " & aRus1[i] & auCRLF
# поиск отличающихся ключей
ElseIf bCtrl And aEng1.IndexOf(aRus1[i]) <> -1 Then
idx = aEng1.IndexOf(aRus1[i])
If aEng2[idx] <> aRus2[i] Then
j += 1
val = StrPart(aEng2[idx], auTAB, 3)
out &= StrFormat("%03d", j) & " " & aRus2[i] & " <> " & val & auCRLF
Endif
EndIf
Next
out &= auCRLF
out &= "--------------------------------------" & auCRLF
out &= " English.cedf -> Russian.cedf" & auCRLF
out &= "--------------------------------------" & auCRLF
j = 0
For i = 0 To aEng1.Count - 1
If Not bCtrl And aRus1.IndexOf(aEng1[i]) = -1 Then
j += 1
out &= StrFormat("%03d", j) & " " & aEng1[i] & auCRLF
ElseIf bCtrl And aRus1.IndexOf(aEng1[i]) <> -1 Then
idx = aRus1.IndexOf(aEng1[i])
If aRus2[idx] <> aEng2[i] Then
j += 1
val = StrPart(aRus2[idx], auTAB, 3)
out &= StrFormat("%03d", j) & " " & aEng2[i] & " <> " & val & auCRLF
Endif
EndIf
Next
Free(aRus1, aEng1, aRus2, aEng2)
out = StrReplace(out, "[[", "[")
out = StrReplace(out, "]]", "]")
out = StrReplace(out, Chr(9), " ")
Sleep(300)
ClipPut(out)
ShowOptHint("Скопировано в буфер.")
EndFunc
Func ShowOptHint(Text)
SetHintParam("ShowHint", "Font", 13, "Arial")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint(Text, "", "", 0, 0)
Sleep(50)
SetHintParam("ShowHint", "Reload")
EndFunc |
Когда будет готово, можно еще раз прогнать оба файла на поиск отличий. Кнопка для скрипта:
 Hidden text TOTALCMD#BAR#DATA
60042
%COMMANDER_EXE%,4
Russian.cedf и English.cedf|Поиск несуществующих ключей|Ctrl - Поиск отличающихся ключей
-1 |
|