Курсовая работа: Перекодировка текстовых файлов

Курсовая работа: Перекодировка текстовых файлов




👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































1.
Структура заданного исходного файла и структуры данных, соответствующие данным файла

Файл – это последовательность байтов, хранящаяся в памяти.
Текстовый файл – это так же последовательность байтов, но каждый байт текстового файла можно представить кодом символа.
Заданный исходный файл – текстовый, так как в каждом байте хранится код символа.
Пределы воспламеняемости некоторых газов и паров в воздухе и в кислороде, % (объемы). Давление 1 бар, температура 20 °С.

Вещество Нижний предел в воздухе Верхний предел в воздухе Нижний предел в кислороде Верхний предел в кислороде

Диэтиловый эфир С4Н10О 1,7 36 2,0 82

Текст разбит на строки непечатными (управляющими) символами CR/LF.
Первая строка никак не разделена и в программе будет представлена типом String.
Вторая строка разбита на элементы непечатным (управляющим) символом горизонтальной табуляции (НТ). Для представления второй строки в программе будет использоваться строковый массив типа String.
Третья и последующие строки, так же как и вторая, разбиты на элементы символом горизонтальной табуляции (НТ), но элементы имеют разные типы (строковые и числовые), поэтому будет использоваться ЗАПИСЬ пользовательского типа “param”, состоящего из одной переменной типа String и массива типа Single - для одной строки
и массив ЗАПИСЕЙ – для нескольких строк.
В тексте также вместо чисел встречается символ «дефис» («-»), что затрудняет сортировку строк, поэтому данный символ программа будет заменять на число ноль.
Для последовательного чтения строк из файла будет использован цикл DOUNTIL, условием выхода из цикла будет являться состояние EOF (EndOfFile-конец файла). Конец файла определяется размером файла. Подпрограмма находится в отдельном модуле и вызывается главной программой.
Sub InputData(name As String, nf1 As Integer, st() As String, sk() As String, k As Integer)
Кодировка представляет собой таблицу символов, где каждой букве алфавита (а также цифрам и специальным знакам) присвоен свой уникальный номер - код символа.
Стандартизирована только половина таблицы, т.н. ASCII-код - первые 128 символов, которые включают в себя буквы латинского алфавита. И с ними никогда не бывает проблем. Вторая же половина таблицы (а всего в ней 256 символов - по количеству состояний, который может принять один байт) отдана под национальные символы, и в каждой стране эта часть различна. Но только в России было придумано целых 5 различных кодировок. Термин "различные" обозначает то, что одному и тому же символу соответствует разный цифровой код. Т.е. если неправильно определить кодировку текста, то пользователю предстанет абсолютно нечитаемый текст.
Использование множества кодировок в современном ПО создаёт много неудобств не только программистам, но и пользователям. Согласно рациональной точке зрения, справиться с непонятными символами можно, если программы будут автоматически распознавать кодировку входящего текста.
Для однобайтных кодировок можно учитывать тот факт, что частота использования разных букв сильно различается (например, в русском часто используется «о», но редко «ъ»). Поэтому, зная язык текста, можно легко выбрать кодировку, в которой частота байтов лучше соответствует частоте букв данного языка.
Для определения кодировки текстового файла нужно выполнить следующий план действий:
1. Поочередно перебирая символы из текста, определять код символа и проверять принадлежность его к каждой кодовой таблице.
2. Увеличивать на 1 счетчики тех кодовых таблиц, которым не противоречит код символа.
3. Найти максимальное значение среди счетчиков – оно укажет на наиболее вероятную кодировку.
Текст, кодированный в Unicode, выглядит иначе. Каждый символ в Unicode кодируется двумя байтами, в первом байте памяти хранится код символа Unicode, а во втором всегда 04. Поэтому чтобы определить имеет ли текст кодировку Unicode, достаточно проверить второй байт памяти, он должен хранить код 04.
Подпрограмма проверки принадлежности текста к одной из шести кодовых таблиц:

Sub FindCP(stroky() As String, msg1 As String, msg2 As String, index As Integer)
ks = "Ваш текст предположительно имеет кодировку "
If cp1(kod) Then scp(0).vol = scp(0).vol + 1: scp(0).name = "КОИ-8R"
If cp2(kod) Then scp(1).vol = scp(1).vol + 1: scp(1).name = "Cp1251"
If cp3(kod) Then scp(2).vol = scp(2).vol + 1: scp(2).name = "OEM"
If cp4(kod) Then scp(3).vol = scp(3).vol + 1: scp(3).name = "Cp866"
If cp5(kod) Then scp(4).vol = scp(4).vol + 1: scp(4).name = "Mac"
If cp6(kod) Then scp(5).vol = scp(5).vol + 1: scp(5).name = "ISO"
If cp71(symb) Then scp(6).vol = scp(6).vol + 1: scp(6).name = "Unicode"
'При совпадении счетчиков "КОИ-8R" и "cp1251" кодировка текста определяется как "cp1251"
If ((scp(0).vol = scp(1).vol) And index <= 1) Then index = 1
Данная подпрограмма использует функции проверки принадлежности кода к заданному диапазону. Функции находятся в отдельном модуле.
Функции проверки принадлежности кода к заданному диапазону:

Function cp1(kod As Byte) As Boolean
Function cp2(kod As Byte) As Boolean
Function cp3(kod As Byte) As Boolean
a = x1 <= kod: b = kod <= X2: c = x3 <= kod: d = kod <= x4
a1 = X5 <= kod: b1 = kod <= X6: c1 = X7 <= kod: d1 = kod <= X8
a2 = X9 <= kod: b2 = kod <= X10: c2 = X11 <= kod: d2 = kod <= X12
a3 = X13 <= kod: b3 = kod <= X14: c3 = X15 <= kod: d3 = kod <= X16
a4 = X17 <= kod: b4 = kod <= X18: c4 = X19 <= kod: d4 = kod <= X20
cp3 = (a And b) Or (c And d) Or (a1 And b1) Or (c1 And d1) Or (a2 And b2) Or (c2 And d2) Or (a3 And b3) Or (c3 And d3) Or (a4 And b4) Or (c4 And d4)
Function cp4(kod As Byte) As Boolean
Function cp5(kod As Byte) As Boolean
Function cp6(kod As Byte) As Boolean
'Кодовая таблица Unicode (младшие разряды)
Function cp7(kod As Byte) As Boolean
'Продолжение Unicode (старшие разряды(04))
Function cp71(symb As String) As Boolean
3.
Алгоритмы перекодировки файла в
cp1251

Зная кодировку (п.2) можно составить алгоритм перекодировки текста исходной кодировки в заданную-ср1251. Мною были выбраны шесть кодовых таблиц: КОИ-8R, OEM, cp866, ISO, MAC и Unicode.
С первыми пятью кодировками все просто:
1. Выбрать из строки поочередно каждый символ.
2. Определить код символа заданной кодировки.
3. Добавить (отнять) к коду разницу от кода такого же символа в кодировке 1251.
4. Определить символ по полученному новому коду.
5. Добавить полученный символ в новую строку.
Подпрограмма выбора варианта перекодировки (КОИ-8R, 1251, OEM, 866, MAC, Unicode):

Sub Decoder(Fmas() As String, IndxCP As Integer, r As Integer, Smas() As String)
IfIndxCP = 1 ThenExitSub'если кодировка cp1251, то выход из процедуры без перекодирования
OutStr = OutStr & Chr(cpKoiTo1251(code))
OutStr = OutStr & Chr(cpOEMTo1251(code))
OutStr = OutStr & Chr(cp866To1251(code))
OutStr = OutStr & Chr(cpMACTo1251(code))
OutStr = OutStr & Chr(cpISOTo1251(code))
· В начало текста (Unicode) добавляется два символа «я» и «ю». Их нужно удалить.
· Перекодировать нужно только первый байт, во втором байте всегда 04.
· Символы такие как «точка», «запятая» и другие, кодируются в памяти двумя байтами, но второй байт будет пустой.
1. Выбрать из строки поочередно каждый символ и определить его код.
2. Выбрать следующий за ним символ и определить его код.
3. Если первый байт не равен 4, а второй байт равен 4, то первый байт Unicode перекодируется в cp1251.
4. Иначе если первый байт не равен 4 и второй байт не равен 4, то перекодировка не требуется.
5. Добавить полученный символ в новую строку.
Подпрограмма обработки текста кодированного в Unicode для перекодировки в cp1251:

Sub DecUnicodeTo1251(TextUnicode() As String, Text1251() As String)
'В тексте кодированном в cpUnicode в начале добавляется два символа "ю" и "я"
fstr = Right(TextUnicode(0), Len(TextUnicode(0)) - 2) 'удаление символов "ю" и "я"
smb2 = Mid(TextUnicode(i), n + 1, 1)
'Если второй байт равен 4, то первый байт Unicode перекодируется в cp1251
If (code1 <> 4 And code2 = 4) Then OutStr = OutStr & Chr(cpUnicodeTo1251(code1))
'Если первый байт не равен 4, то символ ASCII, и не требует перекодировки
If (code1 <> 4 And code2 <> 4) Then OutStr = OutStr & Chr(code1)
Функции перекодировки кода заданной кодировки в код ср1251:

'перекодирование кода символа из cpКОИ-8R в cp1251
Function cpKoiTo1251(code As Byte) As Byte
'перекодирование кода символа из cpOEM в cp1251
Function cpOEMTo1251(code As Byte) As Byte
'перекодирование кода символа из cp866 в cp1251
Function cp866To1251(code As Byte) As Byte
'перекодирование кода символа из Unicode в cp1251
Function cpUnicodeTo1251(code As Byte) As Byte
'перекодирование кода символа из cpMAC в cp1251
Function cpMACTo1251(code As Byte) As Byte
'перекодирование кода символа из cpISO в cp1251
Function cpISOTo1251(code As Byte) As Byte
4.
Алгоритм сортировки записей исходного файла

Задача сортировки файла формулируется следующим образом. Имеется файл, состоящий из последовательности записей. Одно из полей в составе каждой записи является полем ключа. Файл целиком размещается во внутренней памяти. Требуется вывести файл на внешний носитель так, чтобы записи располагались в заданном порядке следования ключей.
Из возможного множества алгоритмов сортировки файлов более эффективными будут те, которые требуют меньше перестановок записей. В работе рассматривается такой алгоритм, который вообще не требует ни одной перестановки: после подготовительных процедур записи выводятся в файл в заданном порядке следования ключей.
Данное, которое находится в составе записи и значения, которого должны учитываться при сортировке, называется ключом.
Для сортировки записей по заданному ключевому полю удобнее использовать ЗАПИСИ:
1. Первые две строки файла – заголовок и «Шапка» в сортировке не участвуют.
2. Третья и последующие строки преобразуются в ЗАПИСИ типа param:
Разделителем при преобразовании в ЗАПИСЬ является знак горизонтальной табуляции (HT)
Подпрограмма разделения строк исходного файла на поля:

Sub seps(str As String, par As param, howpar As Integer)
Dim p As Integer, q As Integer, r As Integer
Решение задачи сортировки файла разбивается на два этапа.
На первом этапе создаётся вспомогательный вектор. На втором этапе формируется выходной файл: первой выводится запись, номер которой 0 затем выводится запись, номер которой 1 и т. д.
Первый этап
. Описание алгоритма формирования вспомогательного вектора.
Исходные данные: volVector - массив записей, в составе каждой записи имеется поле ключа Vol(1). В массиве volVector содержится N элементов. доступ к ключу j-ого элемента обозначается так: volVector(j).Vol(1). Тип данного Vol(1) допускает сравнение на равно, больше и меньше. В результате выполнения алгоритма, определяются значения элементов вспомогательного вектора intMesto. В алгоритме используется вспомогательный логический вектор размером N. flag(j)=True обозначает, что элемент volVector(j) доступен для просмотра, но, если flag(j)=False, то элемент volVector(j) исключается из просмотра. В исходном состоянии все элементы вектора flag устанавливаются в значение True. Вспомогательная переменная voltemp хранит текущее минимальное значение Vol(1). Константа voltempимеет тот же тип, что и ключ Vol(1), значение voltemp заведомо больше любого ключа Vol(1).
1. Для каждого iот 0 до N выполнять шаги 1....5. (Индекс i определяет место записи в выходном файле.)
2. Установить voltemp равным 99999 и перейти к шагу 3.
3. Для каждого jот 0 до Nвыполнять шаг 4. (В этом цикле отыскивается претендент на место i.)
4. Если flag(j)=Trueи volVector(j).Vol(1)<=voltemp, выполнить voltemp ← volVector(j).Vol(1); kl←j. (Если элемент volVector(j) доступен и его ключ volVector(j).Vol(1) меньше, чем текущий минимум voltemp, то заменить значение текущего минимума и запомнить его место. Доступность элемента volVector(j) определяется значением True элемента flag(j).
5. ВыполнитьintMesto(i)←kl; flag(kl)←False. (Минимальное значение из множества доступных ключей найдено в записи с индексом kl. Значение kl записывается в intMesto(i), kl-ый элемент вектора volVector помечается как недоступный, исключается из дальнейших действий.)
Второй этап
сортировки файла - вывод в рабочий лист Excel и запись в файл на диске.
(mas-массив исходных записей, mm-вспомогательный массив, sk-массив исходных строк)
Cells(q + 3, i + 2) = mas(mm(q)).vol(i)
Подпрограмма первого этапа сортировки (создание вспомогательного массива
intMesto
):

Sub sort(volVector() As param, intMesto() As Integer, h As Integer)
Dim i As Integer, j As Integer, kl As Integer
Dim highIndex As Integer, lj As Integer
If volVector(j).vol(1) <= voltemp Then
'если volvector(j) будет меньше или равно voltemp
'то значение текущего минимума voltemp, будет
Подпрограмма второго этапа сортировки - вывод результата в рабочий лист
Excel
и запись в файл на диске:

Sub OutputData(name As String, sk() As String, mm() As Integer, h As Integer, hp As Integer, nf2 As Integer, str As String, mas() As param)
Cells(q + 3, i + 2) = mas(mm(q)).vol(i)
5. Структурная иерархическая схема программы

Dim mm() As Integer, mas() As param
Dim h As Integer, кодировка As String
Dim name1 As String, name2 As String
name1 = "d:\ВоспламеняемостьГазов.txt"
Call InputData(name1, nf1, st, sk, k)
Call FindCP(st, кодировка, msg, indx): MsgBox кодировка: MsgBox msg
Call ConvertToRecord(sk, k, str, mas, hp)
Call OutputData(name2, sk, mm, h, hp, nf2, str, mas)
Sub InputData(name As String, nf1 As Integer, st() As String, sk() As String, k As Integer)
Проверка принадлежности текста к одной из шести кодовых таблиц
Sub FindCP(stroky() As String, msg1 As String, msg2 As String, index As Integer)
ks = "Ваш текст предположительно имеет кодировку "
If cp1(kod) Then scp(0).vol = scp(0).vol + 1: scp(0).name = "КОИ-8R"
If cp2(kod) Then scp(1).vol = scp(1).vol + 1: scp(1).name = "Cp1251"
If cp3(kod) Then scp(2).vol = scp(2).vol + 1: scp(2).name = "OEM"
If cp4(kod) Then scp(3).vol = scp(3).vol + 1: scp(3).name = "Cp866"
If cp5(kod) Then scp(4).vol = scp(4).vol + 1: scp(4).name = "Mac"
If cp6(kod) Then scp(5).vol = scp(5).vol + 1: scp(5).name = "ISO"
If cp71(symb) Then scp(6).vol = scp(6).vol + 1: scp(6).name = "Unicode"
'При совпадении счетчиков "КОИ-8R" и "cp1251" кодировка текста определяется как "cp1251"
If ((scp(0).vol = scp(1).vol) And index <= 1) Then index = 1
Процедура выбора варианта перекодировки (КОИ-8R, 1251, OEM, 866, MAC, Unicode)
Sub Decoder(Fmas() As String, IndxCP As Integer, r As Integer, Smas() As String)
If IndxCP = 1 Then Exit Sub 'если кодировка cp1251, то выход из процедуры без перекодирования
OutStr = OutStr & Chr(cpKoiTo1251(code))
OutStr = OutStr & Chr(cpOEMTo1251(code))
OutStr = OutStr & Chr(cp866To1251(code))
OutStr = OutStr & Chr(cpMACTo1251(code))
OutStr = OutStr & Chr(cpISOTo1251(code))
Проверка необходимости преобразования строк в записи пользовательского типа
Sub ConvertToRecord(sk() As String, k As Integer, str As shapka, mas() As param, hp As Integer)
Первый этап сортировки строк (создание вспомогательного массива)
Sub sort(volVector() As param, intMesto() As Integer, h As Integer)
Dim i As Integer, j As Integer, kl As Integer
Dim highIndex As Integer, lj As Integer
If volVector(j).vol(1) <= voltemp Then 'если volvector(j) будет меньше или равно voltemp,
'то значение текущего минимума voltemp, будет
Вывод результата на рабочий лист Excel и сохранение в файл
Sub OutputData(name As String, sk() As String, mm() As Integer, h As Integer, hp As Integer, nf2 As Integer, str As String, mas() As param)
Cells(q + 3, i + 2) = mas(mm(q)).vol(i)
Процедура обработки текста кодированного в cpUnicode для перекодировки в cp1251
Sub DecUnicodeTo1251(TextUnicode() As String, Text1251() As String)
'В тексте кодированном в cpUnicode в начале добавляется два символа "ю" и "я"
fstr = Right(TextUnicode(0), Len(TextUnicode(0)) - 2) 'удаление символов "ю" и "я"
smb2 = Mid(TextUnicode(i), n + 1, 1)
'Если второй байт равен 4, то первый байт Unicode перекодируется в cp1251
If (code1 <> 4 And code2 = 4) Then OutStr = OutStr & Chr(cpUnicodeTo1251(code1))
'Если первый байт не равен 4, то символ ASCII, и не требует перекодировки
If (code1 <> 4 And code2 <> 4) Then OutStr = OutStr & Chr(code1)
Диапазоныкодовкодировок(КОИ-8R, 1251, OEM, 866, MAC, Unicode)
Function cp1(kod As Byte) As Boolean
Function cp2(kod As Byte) As Boolean
Function cp3(kod As Byte) As Boolean
a = x1 <= kod: b = kod <= X2: c = x3 <= kod: d = kod <= x4
a1 = X5 <= kod: b1 = kod <= X6: c1 = X7 <= kod: d1 = kod <= X8
a2 = X9 <= kod: b2 = kod <= X10: c2 = X11 <= kod: d2 = kod <= X12
a3 = X13 <= kod: b3 = kod <= X14: c3 = X15 <= kod: d3 = kod <= X16
a4 = X17 <= kod: b4 = kod <= X18: c4 = X19 <= kod: d4 = kod <= X20
cp3 = (a And b) Or (c And d) Or (a1 And b1) Or (c1 And d1) Or (a2 And b2) Or (c2 And d2) Or (a3 And b3) Or (c3 And d3) Or (a4 And b4) Or (c4 And d4)
Function cp4(kod As Byte) As Boolean
Function cp5(kod As Byte) As Boolean
Function cp6(kod As Byte) As Boolean
'Кодовая таблица Unicode (младшие разряды)
Function cp7(kod As Byte) As Boolean
'Продолжение Unicode (старшие разряды(04))
Function cp71(symb As String) As Boolean
Описание пользовательских типов данных
Процедура разбивки строки на слова с последующей записью в массив
Sub sep(str As String, par() As String, howpar As Integer)
Dim p As Integer, q As Integer, r As Integer
HT = Chr(9) '09-код символа "горизонтальная табуляция"
Процедура преобразования строки в запись(элементы записи могут быть типа String и Single)
Sub seps(str As String, par As param, howpar As Integer)
Dim p As Integer, q As Integer, r As Integer
Перекодирование кодов символов из исходной кодировки в заданную 1251
'Перекодирование кода символа из cpКОИ-8R в cp1251
Function cpKoiTo1251(code As Byte) As Byte
'перекодирование кода символа из cpOEM в cp1251
Function cpOEMTo1251(code As Byte) As Byte
'перекодирование кода символа из cp866 в cp1251
Function cp866To1251(code As Byte) As Byte
'перекодирование кода символа из Unicode в cp1251
Function cpUnicodeTo1251(code As Byte) As Byte
'перекодирование кода символа из cpMAC в cp1251
Function cpMACTo1251(code As Byte) As Byte
'перекодирование кода символа из cpISO в cp1251
Function cpISOTo1251(code As Byte) As Byte
· Стеценко А.А. Структуры и алгоритмы обработки данных – Методические указания к практическим и лабораторным занятиям.: Чебоксары 2009.
· Стеценко А.А. Структуры и типы данных – учебное пособие.: Чебоксары 2009.
· Электронный учебник по VBA. Режим доступа: http://www.mini-soft.ru/soft/vba

Название: Перекодировка текстовых файлов
Раздел: Рефераты по информатике
Тип: курсовая работа
Добавлен 02:27:27 27 ноября 2010 Похожие работы
Просмотров: 47
Комментариев: 13
Оценило: 2 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Курсовая работа: Перекодировка текстовых файлов
Курсовая работа по теме Расчет принципиальной тепловой схемы и технико-экономических показателей энергоустановки (энергоблок с турбиной ПТ-135/165-130/15)
Курсовая работа: Классификация и ассортимент колбасных изделий, импортируемых в Российскую Федерацию (маркировка, упаковка, транспортировка и хранение)
Атипичная Пневмония Реферат
Курсовая Работа На Тему Диалектные Различия В Морфологии
Курсовая работа по теме Формирование у младших дошкольников трудовых умений в ходе выполнения поручений
Непрямое налогообложение в Украине
Реферат: Gold Rush Essay Research Paper Imagine yourself
Контрольная работа по теме Производственная санитария. Заземление электроустановок. Эвакуация
Дипломная работа по теме Методики аудиторской проверки расчетных операций с поставщиками и подрядчиками
Реферат На Тему Железнодорожная Безопасность
Реферат На Тему Восстановление Деталей Машин Методами Пластической Деформации
Отчет По Энергетической Практике
Реферат: Этическое учение Л.Н. Толстого. Скачать бесплатно и без регистрации
Дипломная работа по теме Модернизация электроподъемника на руднике 'Октябрьский'
Курсовая работа: Письменный перевод с английского языка на русский язык
Курсовая Работа На Тему Церковный Раскол Xvii Века
Контрольная работа по теме Понятие и задачи таможенного оформления, порядок производства
Как Начать Сочинение О Друге
Сочинение Отцы И Дети Конфликт Двух Поколений
Шпаргалка: Юридическая психология (лекции-шпора)
Курсовая работа: Аудит как метод исследования систем управления
Доклад: Остров Лантау
Реферат: Анализ русского народного костюма

Report Page