VovaMozg

Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Ребята помогите решить задачку. В общем есть 2 текстовых файла (большие куски из одного текста) один зашифрованый, другой незашифрованый. Нужно расшифровать зашифрованый файлик путём составления частот букв в файлах и замены. Уже практически сделал, вот код Цитата: Const alf_length = 256 Const alf = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя " Dim massiv_from_normal_file(alf_length, 3) 'Массив символов в незашифрованном файле Dim massiv_from_shifr_file(alf_length, 4) 'Массив символов в зашифрованном файле Dim Shape_Width Const epsilon = 0.0015 Const epsilon_1 = 0.0051 Const my_round = 4 Private Sub Command1_Click() 'Сначала зададим нужные переменные 'Открываем зашифрованный файл на чтение Set FSO = CreateObject("Scripting.FileSystemObject") 'Открываем незашифрованный файл на чтение Set FSO = CreateObject("Scripting.FileSystemObject") Set File = FSO.GetFile(Text2.Text) Set TextStream = File.OpenAsTextStream(1) k_normal = 1 While Not TextStream.AtEndOfStream 'Читаем файл построчно temp_str = TextStream.ReadLine() temp_str = LCase(temp_str) For i = 1 To Len(temp_str) If Mid$(temp_str, i, 1) = "ё" Then Mid$(temp_str, i, 1) = "е" If Mid$(temp_str, i, 1) = "ь" Then Mid$(temp_str, i, 1) = "ъ" ok = False 'перебираем все символы For j = 1 To k_normal If Mid$(temp_str, i, 1) = massiv_from_normal_file(j, 1) Then massiv_from_normal_file(j, 2) = massiv_from_normal_file(j, 2) + 1: ok = True Next j ok_1 = False For j = 1 To Len(alf) If Mid$(temp_str, i, 1) = Mid$(alf, j, 1) Then ok_1 = True Next j If (ok = False) And (ok_1 = True) Then massiv_from_normal_file(k_normal, 1) = Mid$(temp_str, i, 1): massiv_from_normal_file(k_normal, 2) = 1: k_normal = k_normal + 1 Next i Wend k_normal = k_normal - 1 TextStream.Close 'Всё массив создали 'Теперь отсортируем его For i = 1 To k_normal - 1 temp_max = i For j = i To k_normal If massiv_from_normal_file(temp_max, 2) < massiv_from_normal_file(j, 2) Then temp_max = j Next j If temp_max > i Then temp = massiv_from_normal_file(i, 2): massiv_from_normal_file(i, 2) = massiv_from_normal_file(temp_max, 2): massiv_from_normal_file(temp_max, 2) = temp: temp = massiv_from_normal_file(i, 1): massiv_from_normal_file(i, 1) = massiv_from_normal_file(temp_max, 1): massiv_from_normal_file(temp_max, 1) = temp Next i 'Посчитаем сколько всего русских символов temp_simv_norm = 0 For i = 1 To k_normal temp_simv_norm = temp_simv_norm + massiv_from_normal_file(i, 2) Next i 'посчитаем частоту символов For i = 1 To k_normal massiv_from_normal_file(i, 2) = Round(massiv_from_normal_file(i, 2) / temp_simv_norm, my_round) Next i 'отсортировали незашифрованный файл 'выведем то что получилось Set File = FSO.GetFile(Text1.Text) Set TextStream = File.OpenAsTextStream(1) k_shifr = 1 While Not TextStream.AtEndOfStream 'Читаем файл построчно temp_str = TextStream.ReadLine() temp_str = LCase(temp_str) 'перебираем все символы For i = 1 To Len(temp_str) If Mid$(temp_str, i, 1) = "ё" Then Mid$(temp_str, i, 1) = "е" If Mid$(temp_str, i, 1) = "ь" Then Mid$(temp_str, i, 1) = "ъ" ok = False For j = 1 To k_shifr If Mid$(temp_str, i, 1) = massiv_from_shifr_file(j, 1) Then massiv_from_shifr_file(j, 2) = massiv_from_shifr_file(j, 2) + 1: ok = True: Next j ok_1 = False For j = 1 To Len(alf) If Mid$(temp_str, i, 1) = Mid$(alf, j, 1) Then ok_1 = True Next j If (ok = False) And (ok_1 = True) Then massiv_from_shifr_file(k_shifr, 1) = Mid$(temp_str, i, 1): massiv_from_shifr_file(k_shifr, 2) = 1: k_shifr = k_shifr + 1: Next i Wend k_shifr = k_shifr - 1 TextStream.Close 'Теперь отсортируем массив по убыванию For i = 1 To k_shifr - 1 temp_max = i For j = i To k_shifr If massiv_from_shifr_file(temp_max, 2) < massiv_from_shifr_file(j, 2) Then temp_max = j Next j If temp_max > i Then temp = massiv_from_shifr_file(i, 2): massiv_from_shifr_file(i, 2) = massiv_from_shifr_file(temp_max, 2): massiv_from_shifr_file(temp_max, 2) = temp: temp = massiv_from_shifr_file(i, 1): massiv_from_shifr_file(i, 1) = massiv_from_shifr_file(temp_max, 1): massiv_from_shifr_file(temp_max, 1) = temp Next i 'Считаем сколько всего русских символов temp_simv_shifr = 0 For i = 1 To k_shifr temp_simv_shifr = temp_simv_shifr + massiv_from_shifr_file(i, 2) Next i 'Сделаем частоту For i = 1 To k_shifr massiv_from_shifr_file(i, 2) = Round(massiv_from_shifr_file(i, 2) / temp_simv_shifr, my_round) Next i 'проставляем позиции 'теперь в массив из шифрованного файла на 4-е место поставим позиции на которые будем заменять For i = 1 To k_shifr For j = 1 To k_normal ' If massiv_from_shifr_file(i, 3) = massiv_from_normal_file(j, 3) Then massiv_from_shifr_file(i, 4) = massiv_from_shifr_file(i, 4) + massiv_from_normal_file(j, 1) ': temp_ok = True If Abs(massiv_from_shifr_file(i, 2) - massiv_from_normal_file(j, 2)) <= epsilon_1 Then massiv_from_shifr_file(i, 4) = massiv_from_shifr_file(i, 4) + massiv_from_normal_file(j, 1) Next j Next i 'если замена больше одной буквы, то берем её в скобки For i = 1 To k_shifr If Len(massiv_from_shifr_file(i, 4)) > 1 Then massiv_from_shifr_file(i, 4) = "(" + massiv_from_shifr_file(i, 4) + ")" Next i 'Открываем зашифрованный файл на чтение Set FSO = CreateObject("Scripting.FileSystemObject") Set File_1 = FSO.GetFile(Text1.Text) Set File_2 = FSO.GetFile(Text3.Text) Set TextStream_1 = File_1.OpenAsTextStream(1) Set TextStream_2 = File_2.OpenAsTextStream(2) While Not TextStream_1.AtEndOfStream 'Читаем файл построчно temp_str_1 = TextStream_1.ReadLine() temp_str_2 = "" For i = 1 To Len(temp_str_1) ok = False For j = 1 To k_shifr If Mid$(temp_str_1, i, 1) = massiv_from_shifr_file(j, 1) Then temp_str_2 = temp_str_2 + massiv_from_shifr_file(j, 4): ok = True Next j If ok = False Then temp_str_2 = temp_str_2 + Mid$(temp_str_1, i, 1) Next i TextStream_2.writeline (temp_str_2) Wend TextStream_1.Close TextStream_2.Close MsgBox "Готово" End Sub | зашифрованный и незашифрованный файлик находятся тут: http://slil.ru/24956562 Нужно лишь додлеть программу, чтобы получался нормально расшифрованный файл
---------- В конце концов причина причин оказалась в начале начал... |
|