Доброго времени суток! Подскажите пожалуйста, можно ли с помощью макросов преобразовать исходный текс в формате .txt в кодировку DOS и затем при просмотре исходного файла текст бы не менялси не при Win не при Dos кодировке. Преобразование в кодировку Dos у меня получилось вот в этом коде: [vba]
Code
'API для кодирования из WIN в DOS Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
'API для раскодирования из DOS в WIN Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long Enum CDE WinDos = (0) DosWin = (1) End Enum
Sub Transform()
x = "U:\РАССЫЛКА\*.txt"
file = Dir(x) file = UCase(file)
If file = "" Then MsgBox "Такой папки нет." & Chr(13) & "Проверьте путь к файлу: " & x, vbCritical, "Ошибка": Exit Sub
Do While file <> ""
Name = "U:\РАССЫЛКА\" & file Путь = "U:\РАССЫЛКА\АКТ\" & file F = FreeFile Open Путь For Append As #F
F1 = FreeFile
Open Name For Input As #F1 'считывание данных из файла Name
Do Until EOF(F1) Line Input #F1, MyText ' промотр содержимого файла
For Index = 1 To Len(MyText) C = Mid(MyText, Index, 1)
Result = Result + C
Next Index
Result = Recode(Result, WinDos)
Print #F, Result Result = ""
Loop Close #F Close #F1
file = Dir Loop End Sub
Public Function Recode(ByVal strTextOut As String, rCode As CDE)
Dim strTextInput As String 'Строковая переменная для вывода Dim lngCode As Long 'Числовая переменная
'Кодировка и раскодировка текста Select Case rCode Case Is = (WinDos) 'Выбераем кодировку strTextInput = Space$(Len(strTextOut)) 'Перекодированная строка lngCode = CharToOem(strTextOut, strTextInput) 'Присваеваем переменной lngCode Recode = strTextInput 'Выводим текст
Case Is = (DosWin) 'Выбераем кодировку strTextInput = Space$(Len(strTextOut)) 'Перекодированная строка lngCode = OemToChar(strTextOut, strTextInput) 'Присваеваем переменной lngCode Recode = strTextInput 'Выводим текст End Select End Function
[/vba]
Исходный текст в файле написан на русском языке. Так вот: после преобразования в Dos текс отображается нормально, а при Win коряво. Можно сделать так чтобы в результате и при Win и при Dos кодировке отображался русский понятный текст?
Проверено, что в ручную это сделать можно в редакторе Dos, но если этих файлов много, то руки отсохнут преобразовывать Заранее всем спасибо за участие.
Доброго времени суток! Подскажите пожалуйста, можно ли с помощью макросов преобразовать исходный текс в формате .txt в кодировку DOS и затем при просмотре исходного файла текст бы не менялси не при Win не при Dos кодировке. Преобразование в кодировку Dos у меня получилось вот в этом коде: [vba]
Code
'API для кодирования из WIN в DOS Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
'API для раскодирования из DOS в WIN Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long Enum CDE WinDos = (0) DosWin = (1) End Enum
Sub Transform()
x = "U:\РАССЫЛКА\*.txt"
file = Dir(x) file = UCase(file)
If file = "" Then MsgBox "Такой папки нет." & Chr(13) & "Проверьте путь к файлу: " & x, vbCritical, "Ошибка": Exit Sub
Do While file <> ""
Name = "U:\РАССЫЛКА\" & file Путь = "U:\РАССЫЛКА\АКТ\" & file F = FreeFile Open Путь For Append As #F
F1 = FreeFile
Open Name For Input As #F1 'считывание данных из файла Name
Do Until EOF(F1) Line Input #F1, MyText ' промотр содержимого файла
For Index = 1 To Len(MyText) C = Mid(MyText, Index, 1)
Result = Result + C
Next Index
Result = Recode(Result, WinDos)
Print #F, Result Result = ""
Loop Close #F Close #F1
file = Dir Loop End Sub
Public Function Recode(ByVal strTextOut As String, rCode As CDE)
Dim strTextInput As String 'Строковая переменная для вывода Dim lngCode As Long 'Числовая переменная
'Кодировка и раскодировка текста Select Case rCode Case Is = (WinDos) 'Выбераем кодировку strTextInput = Space$(Len(strTextOut)) 'Перекодированная строка lngCode = CharToOem(strTextOut, strTextInput) 'Присваеваем переменной lngCode Recode = strTextInput 'Выводим текст
Case Is = (DosWin) 'Выбераем кодировку strTextInput = Space$(Len(strTextOut)) 'Перекодированная строка lngCode = OemToChar(strTextOut, strTextInput) 'Присваеваем переменной lngCode Recode = strTextInput 'Выводим текст End Select End Function
[/vba]
Исходный текст в файле написан на русском языке. Так вот: после преобразования в Dos текс отображается нормально, а при Win коряво. Можно сделать так чтобы в результате и при Win и при Dos кодировке отображался русский понятный текст?
Проверено, что в ручную это сделать можно в редакторе Dos, но если этих файлов много, то руки отсохнут преобразовывать Заранее всем спасибо за участие.A_3485
Сообщение отредактировал A_3485 - Понедельник, 17.09.2012, 18:20
A_3485, мысли приходят только тривиальные: не устраивает работа стандартной перекодировки (возможно она даже от системной локализации зависит) - задавайте свою таблицу перекодировки и преобразуйте что угодно во что хошь.
A_3485, мысли приходят только тривиальные: не устраивает работа стандартной перекодировки (возможно она даже от системной локализации зависит) - задавайте свою таблицу перекодировки и преобразуйте что угодно во что хошь. Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Вторник, 18.09.2012, 12:42
Недавно для себя делал схожий конвертор без API (OEM-866 <-> WIN-1251 для Batch(CMD)-файлов, а также преобразование текста, когда появляются крякозябры при копировании с английской раскладкой клавиатуры).
Не дописал код для опшн.баттонов. А так полностью функциональный.
Недавно для себя делал схожий конвертор без API (OEM-866 <-> WIN-1251 для Batch(CMD)-файлов, а также преобразование текста, когда появляются крякозябры при копировании с английской раскладкой клавиатуры).
Не дописал код для опшн.баттонов. А так полностью функциональный.Dragokas