на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Перекодировка текстовых файлов
p align="left">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)

Dim i As Integer

Dim n As Integer

Dim Stroka As String

Dim OutStr As String

Dim smb As String

Dim code As Byte

If IndxCP = 1 Then Exit Sub 'если кодировка cp1251, то выход из процедуры без перекодирования

If IndxCP = 6 Then

Call DecUnicodeTo1251(Fmas, Smas)

Exit Sub

End If

ReDim Smas(r - 1)

For i = 0 To r - 1

Stroka = Fmas(i)

OutStr = ""

For n = 1 To Len(Stroka)

smb = Mid(Stroka, n, 1)

code = Asc(smb)

Select Case IndxCP

Case 0

OutStr = OutStr & Chr(cpKoiTo1251(code))

Case 2

OutStr = OutStr & Chr(cpOEMTo1251(code))

Case 3

OutStr = OutStr & Chr(cp866To1251(code))

Case 4

OutStr = OutStr & Chr(cpMACTo1251(code))

Case 5

OutStr = OutStr & Chr(cpISOTo1251(code))

End Select

Next n

Smas(i) = OutStr

Next i

End Sub

С Unicode немного сложнее:

· В начало текста (Unicode) добавляется два символа «я» и «ю». Их нужно удалить.

· Перекодировать нужно только первый байт, во втором байте всегда 04.

· Символы такие как «точка», «запятая» и другие, кодируются в памяти двумя байтами, но второй байт будет пустой.

1. Выбрать из строки поочередно каждый символ и определить его код.

2. Выбрать следующий за ним символ и определить его код.

3. Если первый байт не равен 4, а второй байт равен 4, то первый байт Unicode перекодируется в cp1251.

4. Иначе если первый байт не равен 4 и второй байт не равен 4, то перекодировка не требуется.

5. Добавить полученный символ в новую строку.

Подпрограмма обработки текста кодированного в Unicode для перекодировки в cp1251:

Sub DecUnicodeTo1251(TextUnicode() As String, Text1251() As String)

Dim i As Integer

Dim n As Integer

Dim fstr As String

Dim smb1 As String * 1

Dim smb2 As String * 1

Dim code1 As Byte

Dim code2 As Byte

Dim OutStr As String

'В тексте кодированном в cpUnicode в начале добавляется два символа "ю" и "я"

'Поэтому их надо удалить

fstr = Right(TextUnicode(0), Len(TextUnicode(0)) - 2) 'удаление символов "ю" и "я"

TextUnicode(0) = fstr

For i = 0 To UBound(TextUnicode)

OutStr = ""

For n = 1 To Len(TextUnicode(i))

smb1 = Mid(TextUnicode(i), n, 1)

code1 = Asc(smb1)

smb2 = Mid(TextUnicode(i), n + 1, 1)

code2 = Asc(smb2)

'Проверка по двум байтам:

'Если второй байт равен 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)

Next n

ReDim Preserve Text1251(i)

Text1251(i) = OutStr

Next i

End Sub

Функции перекодировки кода заданной кодировки в код ср1251:

'перекодирование кода символа из cpКОИ-8R в cp1251

Function cpKoiTo1251(code As Byte) As Byte

Dim c As Byte

c = code

Select Case code

Case 225 To 226

c = code - 33

Case 228 To 229

c = code - 32

Case 233 To 240

c = code - 33

Case 242 To 245

c = code - 34

Case 193 To 194

c = code + 31

Case 196 To 197

c = code + 32

Case 201 To 208

c = code + 31

Case 210 To 213

c = code + 30

Case 221

c = 249

Case 223

c = 250

Case 217

c = 251

Case 216

c = 252

Case 220

c = 253

Case 192

c = 254

Case 247

c = 194

Case 231

c = 195

Case 179

c = 168

Case 246

c = 198

Case 250

c = 199

Case 230

c = 212

Case 232

c = 213

Case 227

c = 214

Case 254

c = 215

Case 251

c = 216

Case 163

c = 184

Case 214

c = 230

Case 218

c = 231

Case 198

c = 244

Case 253

c = 217

Case 255

c = 218

Case 249

c = 219

Case 248

c = 220

Case 252

c = 221

Case 224

c = 222

Case 242

c = 223

Case 215

c = 226

Case 199

c = 227

Case 195

c = 246

Case 222

c = 247

Case 219

c = 248

Case 200

c = 245

Case 209

c = 255

End Select

cpKoiTo1251 = c

End Function

'перекодирование кода символа из cpOEM в cp1251

Function cpOEMTo1251(code As Byte) As Byte

Dim c As Byte

c = code

Select Case code

Case 161

c = 192

Case 163

c = 193

Case 236

c = 194

Case 173

c = 195

Case 167

c = 196

Case 169

c = 197

Case 133

c = 168

Case 234

c = 198

Case 244

c = 199

Case 184

c = 200

Case 190

c = 201

Case 199

c = 202

Case 209

c = 203

Case 211

c = 204

Case 213

c = 205

Case 215

c = 206

Case 221

c = 207

Case 226

c = 208

Case 228

c = 209

Case 181

c = 245

Case 164

c = 246

Case 251

c = 247

Case 230

c = 210

Case 232

c = 211

Case 171

c = 212

Case 182

c = 213

Case 165

c = 214

Case 152

c = 215

Case 246

c = 216

Case 250

c = 217

Case 238

c = 218

Case 242

c = 219

Case 159

c = 220

Case 248

c = 221

Case 170

c = 244

Case 249

c = 249

Case 237

c = 250

Case 241

c = 251

Case 158

c = 252

Case 247

c = 253

Case 150

c = 254

Case 222

c = 255

Case 231

c = 243

Case 245

c = 248

Case 157

c = 222

Case 224

c = 223

Case 160

c = 224

Case 162

c = 225

Case 235

c = 226

Case 172

c = 227

Case 166

c = 228

Case 168

c = 229

Case 132

c = 184

Case 233

c = 230

Case 243

c = 231

Case 183

c = 232

Case 189

c = 233

Case 198

c = 234

Case 208

c = 235

Case 210

c = 236

Case 212

c = 237

Case 214

c = 238

Case 216

c = 239

Case 225

c = 240

Case 227

c = 241

Case 229

c = 242

End Select

cpOEMTo1251 = c

End Function

'перекодирование кода символа из cp866 в cp1251

Function cp866To1251(code As Byte) As Byte

Dim c As Byte

c = code

Select Case code

Case 128 To 175

c = code + 64

Case 224 To 239

c = code + 16

Case 240

c = 168

Case 241

c = 184

End Select

cp866To1251 = c

End Function

'перекодирование кода символа из Unicode в cp1251

Function cpUnicodeTo1251(code As Byte) As Byte

Dim c As Byte

c = code

Select Case code

Case 16 To 79

c = code + 176

Case 1

c = 168

Case 81

c = 184

End Select

cpUnicodeTo1251 = c

End Function

'перекодирование кода символа из cpMAC в cp1251

Function cpMACTo1251(code As Byte) As Byte

Dim c As Byte

c = code

Select Case code

Case 128 To 159

c = code + 64

Case 224 To 254

c = code

Case 221

c = 168

Case 222

c = 184

Case 223

c = 255

End Select

cpMACTo1251 = c

End Function

'перекодирование кода символа из cpISO в cp1251

Function cpISOTo1251(code As Byte) As Byte

Dim c As Byte

c = code

Select Case code

Case 176 To 239

c = code + 16

Case 160

c = 168

Case 240

c = 184

End Select

cpISOTo1251 = c

End Function

4. Алгоритм сортировки записей исходного файла

Задача сортировки файла формулируется следующим образом. Имеется файл, состоящий из последовательности записей. Одно из полей в составе каждой записи является полем ключа. Файл целиком размещается во внутренней памяти. Требуется вывести файл на внешний носитель так, чтобы записи располагались в заданном порядке следования ключей.

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.