[VB6] Перекодировка файлов DOS <> Win1251

Тема в разделе "Банк полезных кодов", создана пользователем Kиpилл, 20 сен 2015.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.198
    Симпатии:
    4.970
    Привет всем.
    Может кто направит на путь истинный)

    Пробовал примеры с сети - не помогло,сам пробовал сделать - не вышло...

    Куда почитать,может путний пример...
     
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.471
    Симпатии:
    4.303
    Посмотри на мой проект. Там перекодируются заданные файлы.

    Код (vb.net):
    Option Explicit

    Private Enum idCodePage
        win = 1251
        Dos = 866
        Koi = 20866
        Iso = 28595
    End Enum

    Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
    Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

    Private Const CP_ACP    As Long = 0&
    Private Const CP_OEMCP  As Long = 1&
    Private Sub Form_Load()
        Dim pathIn  As String
        Dim pathOut As String
        Dim src     As String
        Dim dst     As String
        Dim l       As Long
        Dim ff      As Integer
       
        pathIn = "c:\1 1\dos.txt"
        pathOut = "c:\1 1\win.txt"
       
        ' читаем исходный файл
        ff = FreeFile()
        Open pathIn For Binary As #ff
            l = LOF(ff)
            src = String$(l, vbNullChar)
            Get #ff, , src
        Close #ff
       
        'переконвертируем
       
        'dst = ConvertCodePage(src, Win, Dos)
        dst = ConvertCodePage(src, Dos, win)
       
        'удаляем файл назначения, если существует
        If Dir$(pathOut) <> vbNullString Then Kill pathOut
       
        'записываем новый файл
        ff = FreeFile()
        Open pathOut For Binary As #ff
        Put #ff, , dst
        Close #ff
       
        Unload Me
    End Sub

    Private Function ConvertCodePage(src As String, inPage As idCodePage, outPage As idCodePage) As String
        Dim buf   As String
        Dim dst   As String
        Dim size  As Long
       
        size = MultiByteToWideChar(inPage, 0&, src, Len(src), 0&, 0&)
        buf = String(size, Chr$(0))
        size = MultiByteToWideChar(inPage, 0&, src, Len(src), StrPtr(buf), Len(src))
       
        size = WideCharToMultiByte(outPage, 0&, StrPtr(buf), size, ByVal 0&, 0&, 0&, 0&)
        dst = String(size, Chr$(0))
        size = WideCharToMultiByte(outPage, 0&, StrPtr(buf), size, dst, Len(src), 0&, 0&)
       
        If size <> 0 Then ConvertCodePage = Left$(dst, size)
    End Function
     
    orderman, Kиpилл и лис.хвост нравится это.
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.198
    Симпатии:
    4.970
    Кажется то,что доктор прописал.
     
  4. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.198
    Симпатии:
    4.970
    Отлично,интерактивное меню на ура.
    Из всего опробованного самое подходящее.
    Стас один момент:
    dos 866 надо поменять на oem 866 и,соответственно,далее по коду.
     

Поделиться этой страницей