Перекодировка из koi8 в win1251

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
bsn
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 31.05.2006 (Ср) 10:19
Откуда: Chita

Перекодировка из koi8 в win1251

Сообщение bsn » 31.05.2006 (Ср) 10:39

Код: Выделить всё

Модуль

Public Function RecodeString(strRecode As String, strFromCode As String, strIntoCode As String) As String
Dim lng_i As Long
Dim lng_j As Long
Dim strTemp As String
Dim strResult As String
    If Len(strFromCode) <> Len(strIntoCode) Then
        RecodeString = "Error"
        Exit Function
    End If
    strResult = ""
    strTemp = ""
    For lng_i = 1 To Len(strRecode)
        strTemp = Mid$(strRecode, lng_i, 1)
        For lng_j = 1 To Len(strFromCode)
            If strTemp = Mid$(strFromCode, lng_j, 1) Then
                strTemp = Mid$(strIntoCode, lng_j, 1)
                Exit For
            End If
        Next lng_j
    strResult = strResult & strTemp
    Next lng_i
    RecodeString = strResult
End Function

Public Function GetFileFromRecode(strFileInput As String, strFileOutput As String)
Dim fso As New FileSystemObject
Dim ts_FileInput As TextStream
Dim ts_FileOutput As TextStream
Dim strKoi8 As String
Dim strWin1251 As String
    strKoi8 = "бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС"
    strWin1251 = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
    Set ts_FileInput = fso.OpenTextFile(strFileInput, ForReading, False)
    Set ts_FileOutput = fso.OpenTextFile(strFileOutput, ForWriting, True)
    Do While Not ts_FileInput.AtEndOfStream
        ts_FileOutput.WriteLine (RecodeString(ts_FileInput.ReadLine, strKoi8, strWin1251))
        DoEvents
    Loop
    Set ts_FileOutput = Nothing
    Set ts_FileInput = Nothing
End Function

Public Function GetFolderFromRecode(strFolderPath As String, txtTextBox As TextBox)
Dim fso As New FileSystemObject
Dim fls As Files
Dim fl As File
Dim fldr As Folder
Set fldr = fso.GetFolder(strFolderPath)
    Set fls = fldr.Files
    For Each fl In fls
        Call GetFileFromRecode(fl.Path, strFolderPath & "\temp\" & fl.Name)
        txtTextBox.Text = txtTextBox & fl.Path & "...ok" & vbNewLine
        DoEvents
    Next
End Function

Форма

Private Sub cmdMake_Click()
    Call GetFolderFromRecode(txtPath.Text, txtList)
    MsgBox "all"
End Sub

Private Sub Form_Load()
    txtPath.Text = App.Path & "\HTML"
End Sub

Сделал програмку(точнее набросок) для переводировки из koi8 в win1251, но не устраивает скорость(100 фаилов 800 килобаит делал минут 5) так что пока решил не продолжать интерфеис наварачивать. Думаю можно ускорить паралельно обсчитывая несколько фаилов(потоки кажется) но лично с ними не работал. Может что еще посоветуете. Да и еще думаю пора наверное на vb.net переходить может поможите как там работать с фаилами и потоками(есть vb.net 2005 express edition на диске с журналом Хакер был).

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2006 (Ср) 10:40

Что автор вопроса думает по поводу http://bbs.vbstreets.ru/viewtopic.php?t=23315 ?


А пока автор вопроса думает, ответ на вопрос продолжает находиться здесь.
Поиск по форуму помогает в ответах на вопросы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 77

    TopList