Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перекодирование файла TXT в кодировку DOS - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Перекодирование файла TXT в кодировку DOS
A_3485 Дата: Понедельник, 17.09.2012, 18:19 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

2007
Доброго времени суток!
Подскажите пожалуйста, можно ли с помощью макросов преобразовать исходный текс в формате .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 - Понедельник, 17.09.2012, 18:20
 
Ответить
СообщениеДоброго времени суток!
Подскажите пожалуйста, можно ли с помощью макросов преобразовать исходный текс в формате .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
Дата добавления - 17.09.2012 в 18:19
A_3485 Дата: Вторник, 18.09.2012, 11:03 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

2007
Всем доброго времени суток!

Не ужели ни укого нет по данному вопросу никаких мыслей sad


Сообщение отредактировал A_3485 - Вторник, 18.09.2012, 11:03
 
Ответить
СообщениеВсем доброго времени суток!

Не ужели ни укого нет по данному вопросу никаких мыслей sad

Автор - A_3485
Дата добавления - 18.09.2012 в 11:03
Формуляр Дата: Вторник, 18.09.2012, 12:02 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
A_3485,
мысли приходят только тривиальные:
не устраивает работа стандартной перекодировки (возможно она даже от системной локализации зависит) - задавайте свою таблицу перекодировки и преобразуйте что угодно во что хошь. smile


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Вторник, 18.09.2012, 12:42
 
Ответить
СообщениеA_3485,
мысли приходят только тривиальные:
не устраивает работа стандартной перекодировки (возможно она даже от системной локализации зависит) - задавайте свою таблицу перекодировки и преобразуйте что угодно во что хошь. smile

Автор - Формуляр
Дата добавления - 18.09.2012 в 12:02
KuklP Дата: Вторник, 18.09.2012, 12:52 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Нафига такие сложности... Локаль, как видно, русская. Открыть текст-файл - "сохранить как" - текст MsDos. Ни те циклов, ни АПИ.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНафига такие сложности... Локаль, как видно, русская. Открыть текст-файл - "сохранить как" - текст MsDos. Ни те циклов, ни АПИ.

Автор - KuklP
Дата добавления - 18.09.2012 в 12:52
Dragokas Дата: Воскресенье, 23.09.2012, 00:30 | Сообщение № 5
Группа: Проверенные
Ранг: Новичок
Сообщений: 14
Репутация: 25 ±
Замечаний: 0% ±

2003
Недавно для себя делал схожий конвертор без API (OEM-866 <-> WIN-1251 для Batch(CMD)-файлов, а также преобразование
текста, когда появляются крякозябры при копировании с английской раскладкой клавиатуры).

Не дописал код для опшн.баттонов. А так полностью функциональный.
К сообщению приложен файл: FromUnicode--.rar (56.7 Kb)
 
Ответить
СообщениеНедавно для себя делал схожий конвертор без API (OEM-866 <-> WIN-1251 для Batch(CMD)-файлов, а также преобразование
текста, когда появляются крякозябры при копировании с английской раскладкой клавиатуры).

Не дописал код для опшн.баттонов. А так полностью функциональный.

Автор - Dragokas
Дата добавления - 23.09.2012 в 00:30
KuklP Дата: Воскресенье, 23.09.2012, 07:52 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Dragokas, приветствую:-)
ИМХО стоит пост разместить в теме: http://www.excelworld.ru/forum/3-511-1


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеDragokas, приветствую:-)
ИМХО стоит пост разместить в теме: http://www.excelworld.ru/forum/3-511-1

Автор - KuklP
Дата добавления - 23.09.2012 в 07:52
Dragokas Дата: Воскресенье, 23.09.2012, 16:04 | Сообщение № 7
Группа: Проверенные
Ранг: Новичок
Сообщений: 14
Репутация: 25 ±
Замечаний: 0% ±

2003
О, сенк'и. KuklP, привет -) Я немного освоюсь. Все же допишу, там еще кое-какой секретный функционал замышлялся. И обязательно выложу.
 
Ответить
СообщениеО, сенк'и. KuklP, привет -) Я немного освоюсь. Все же допишу, там еще кое-какой секретный функционал замышлялся. И обязательно выложу.

Автор - Dragokas
Дата добавления - 23.09.2012 в 16:04
Паттттт Дата: Пятница, 28.09.2012, 14:43 | Сообщение № 8
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Имхо тему надо бы перенести в форум http://www.excelworld.ru/forum/4
 
Ответить
СообщениеИмхо тему надо бы перенести в форум http://www.excelworld.ru/forum/4

Автор - Паттттт
Дата добавления - 28.09.2012 в 14:43
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!