Advertisement
Guest User

MakeDicGroups.vbs

a guest
May 8th, 2012
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.67 KB | None | 0 0
  1. ' Group single direction dictionary remover for Lingvo X5
  2. ' by Pasha ZZZ v1.0 2011-06-24
  3.  
  4. Option Explicit
  5.  
  6. Const ForReading = 1, ForWriting = 2, ForAppending = 8
  7. Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
  8. Const IniGroup = "Group:", IniDict = "Dictionary:"
  9. Const CSIDL_LOCAL_APPDATA = &h1C, CSIDL_COMMON_APPDATA = &h23
  10.  
  11. Dim WSH, WSEnv, FSO, IniFN, IniF, IniS, S, S1, S2, S3, IsGroupMulti, Arr1, Arr2, A, D
  12. Dim DicCnt, DDicCnt, SGrpCnt, MGrpCnt, CUAD, eCUN, AUAD, IniFound, ShApp
  13.  
  14. Set ShApp = CreateObject("Shell.Application")
  15. Set WSH = WScript.CreateObject("WScript.Shell")
  16. Set WSEnv = WSH.Environment("PROCESS")
  17.  
  18. eCUN = WSEnv("USERNAME")
  19.  
  20. AUAD = ShApp.Namespace(CSIDL_COMMON_APPDATA).Self.Path & "\ABBYY\Lingvo\15.0\Dic\dictconf.ini"
  21. CUAD = ShApp.Namespace(CSIDL_LOCAL_APPDATA).Self.Path & "\ABBYY\Lingvo\15.0\Dic\dictconf.ini"
  22.  
  23. IniS = ""
  24.  
  25. Set FSO = CreateObject("Scripting.FileSystemObject")
  26.  
  27. IniFound = 0
  28. If FSO.FileExists(AUAD) Then IniFound = 1
  29. If FSO.FileExists(CUAD) Then IniFound = IniFound + 2
  30.  
  31. IniFN = ""
  32.  
  33. Select Case IniFound
  34. Case 1
  35. A = MsgBox("Найден файл конфигурации для всех пользователей:" & Chr(13) & AUAD & Chr(13) & Chr(13) & "Удалить в нем одноязычные словари с мультиязычных полок?", vbOKCancel + vbQuestion, "Обнаружен файл конфигурации")
  36. If A = 1 Then IniFN = AUAD
  37. Case 2
  38. A = MsgBox("Найден файл конфигурации для текущего пользователя (" & eCUN & "):" & Chr(13) & CUAD & Chr(13) & Chr(13) & "Удалить в нем одноязычные словари с мультиязычных полок?", vbOKCancel + vbQuestion, "Обнаружен файл конфигурации")
  39. If A = 1 Then IniFN = CUAD
  40. Case 3
  41. A = MsgBox("Найден файл конфигурации для всех пользователей:" & Chr(13) & AUAD & Chr(13) & Chr(13) & "Найден файл конфигурации для текущего пользователя (" & eCUN & "):" & Chr(13) & CUAD & Chr(13) & Chr(13) & "Да - удалить одноязычные словари с многоязычных полок в файле для всех пользователей" & Chr(13) & "Нет - удалить одноязычные словари с многоязычных полок в файле для текущего пользователя", vbYesNoCancel + vbQuestion, "Обнаружены 2 файла конфигурации")
  42. If A = 6 Then IniFN = AUAD Else If A = 7 Then IniFN = CUAD
  43. End Select
  44.  
  45. If Len(IniFN) = 0 Then
  46. If IniFound = 0 Then
  47. MsgBox "Выполнение программы прервано:" & Chr(13) & "не найдены файлы конфигурации полок/словарей." & Chr(13) & Chr(13) & "Установите Lingvo X5 и запустите хотя бы 1 раз!", vbCritical, "Файлы конфигурации не найдены"
  48. Else
  49. MsgBox "Выполнение программы прервано." & Chr(13) & "Изменения не произведены.", vbCritical, "Остановлено пользователем"
  50. End If
  51. WScript.Quit
  52. End If
  53.  
  54. Set IniF = FSO.OpenTextFile(IniFN, ForReading, False, TristateTrue)
  55.  
  56. IsGroupMulti = False
  57. DicCnt = 0
  58. DDicCnt = 0
  59. SGrpCnt = 0
  60. MGrpCnt = 0
  61. Do Until IniF.AtEndOfStream
  62. S = Trim(IniF.ReadLine)
  63. If Len(S)>0 And Left(S, 1)<>";" Then
  64. If Left(S, 1)="[" Then
  65. IsGroupMulti = False
  66. S1 = Mid (S, 2, InStr(S, "]") - 2)
  67. If Left(S1, Len(IniDict))=IniDict Then DicCnt = DicCnt + 1
  68. If Left(S1, Len(IniGroup))=IniGroup Then
  69. Arr1 = Split(Right(S1, Len(S1) - Len(IniGroup)), "-")
  70. If Arr1(0)<>Arr1(1) Then
  71. IsGroupMulti = True
  72. MGrpCnt = MGrpCnt + 1
  73. Else
  74. SGrpCnt = SGrpCnt + 1
  75. End If
  76. End If
  77. Else
  78. If IsGroupMulti Then
  79. S1 = Left(S, InStr(S, "="))
  80. S2 = ""
  81. Arr1 = Split(Trim(Right(S, Len(S) - Len(S1))), ";")
  82. For A = 0 To UBound(Arr1)
  83. D = InStrRev(Arr1(A), "(")
  84. Arr2 = Split(Mid(Arr1(A), D + 1, InStrRev(Arr1(A), ")") - D - 1), "-")
  85. If Arr2(0)<>Arr2(1) Then S2 = S2 + Arr1(A) + ";" Else DDicCnt = DDicCnt + 1
  86. Next
  87. If Len(S2)>0 Then S = S1 + Left(S2, Len(S2) - 1) Else S = "; " + S1 + "<no dictionaries for this group>"
  88. End If
  89. End If
  90. End If
  91. IniS = IniS + S + ChrW(13) + ChrW(10)
  92. Loop
  93. IniF.Close
  94.  
  95. If DDicCnt>0 Then
  96. If FSO.FileExists(IniFN & ".org") Then FSO.DeleteFile IniFN & ".org", True
  97. FSO.MoveFile IniFN, IniFN & ".org"
  98. Set IniF = FSO.CreateTextFile(IniFN, True, True)
  99. IniF.Write(IniS)
  100. IniF.Close
  101. MsgBox "Найдено всего полок словарей: " & CStr(MGrpCnt + SGrpCnt) & Chr(13) & " - из них одноязычных - " & CStr(SGrpCnt) & Chr(13) & " - мультиязычных - " & CStr(MGrpCnt) & Chr(13) & Chr(13) & "Найдено словарей всего: " & CStr(DicCnt) & Chr(13) & "Удалено словарей с полок: " & CStr(DDicCnt), vbOKOnly + vbInformation, "Изменение конфигурации завершено"
  102. Else
  103. MsgBox "Найдено всего полок словарей: " & CStr(MGrpCnt + SGrpCnt) & Chr(13) & " - из них одноязычных - " & CStr(SGrpCnt) & Chr(13) & " - мультиязычных - " & CStr(MGrpCnt) & Chr(13) & Chr(13) & "Найдено словарей всего: " & CStr(DicCnt) & Chr(13) & "Лишних словарей на полках не найдено!", vbOKOnly + vbExclamation, "Конфигурация не изменена"
  104. End If
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement