Найдите ошибки - VB

Узнай цену своей работы

Формулировка задачи:

Народ, я для собственного саморазвития начал изучать VB (сказали самый легкий язык)... А вообще я юрист))) Изучаю недавно. Дошел до изучения массивов и манипуляций с файлами. Написал код, который делит файл на три части, а потом собирает его обратно. Код, вроде бы рабочий. Проверял на файлах различных расширений. НО! Я хочу научиться программировать, хотя бы на средняковом уровне, учитывая, что я учусь сам, поэтому прошу Вас помочь мне найти ошибки в коде, подсказать как его писать правильнее, или указать на то, что в коде лишнее и ни в коем случае так делать нельзя и желательно объяснить почему. Спасибо больше заранее, парни.

Решение задачи: «Найдите ошибки»

textual
Листинг программы
'::: Разрезать файл на три части
 
Sub Cut_File(finp As String, fo1 As String, fo2 As String, fo3 As String)
Dim fi    As Integer  ' номер входного файла
Dim fo    As Integer ' номер выходного файла
Dim Lf    As Long  ' длина входного файла
Dim Sz    As Long ' длина трети файла 
Dim Buf() As Byte ' байтовый буфер
 
    fi = FreeFile  ' получаем свободный номер файла
    Open finp For Binary Access Read As #fi ' открываем входной для чтения
    
    Lf = LOF(1)  ' получаем длину входного
    Sz = Lf \ 3  ' делим на 3
    ReDim Buf(1 To Sz) As Byte ' выделяем буфер для очередного куска
    
    fo = FreeFile ' свободный номер файла
    Open fo1 For Binary Access Write As #fo ' открываем для записи
    
    Get #fi, , Buf  'читаем первую треть
    Put #fo, , Buf ' сбрасываем в первый файл
    
    Close #fo  ' закрываем первый выходной
    
    '::: а дальше повторяем еще два раза
 
    fo = FreeFile
    Open fo2 For Binary Access Write As #fo
    
    Get #fi, , Buf
    Put #fo, , Buf
    
    Close fo
    
    Rest = Lf - 2 * Sz ' длина последней порции может отличаться от остальных
                             ' если Lf не кратно трем
    
    ReDim Buf(1 To Rest) As Byte
    
    fo = FreeFile
    Open fo3 For Binary Access Write As #fo
    
    Get #fi, , Buf
    Put #fo, , Buf
    
    Close fo
    Close fi  ' закрывем входной
 
End Sub
 
'::: Склеить их обратно
 
Sub Merge_parts(fout As String, fi1 As String, fi2 As String, fi3 As String)
 
Dim fi    As Integer
Dim fo    As Integer
Dim Lf    As Long
Dim Buf() As Byte
 
    fo = FreeFile  ' номер для вых. файла
    Open fout For Binary Access Write As #fo ' открываем...
    
    fi = FreeFile ' номер для первого из входных
    Open fi1 For Binary Access Read As #fi ' открываем
    
    Sz = LOF(fi)  ' определяем длину файла
    ReDim Buf(1 To Sz) As Byte ' выделяем буфер
    
    Get #fi, , Buf   ' читаем буфер
    Put #fo, , Buf  ' сбрасываем в выходной
    
    Close #fi ' закрываем первый входной
    
    '::: Повторяем еще два раза...
 
    fi = FreeFile
    Open fi2 For Binary Access Read As #fi
    
    Sz = LOF(fi)
    ReDim Buf(1 To Sz) As Byte
    
    Get #fi, , Buf
    Put #fo, , Buf
    
    Close #fi
    
    fi = FreeFile
    Open fi3 For Binary Access Read As #fi
    
    Sz = LOF(fi)
    ReDim Buf(1 To Sz) As Byte
    
    Get #fi, , Buf
    Put #fo, , Buf
    
    Close #fi
    
    Close #fo  ' закрываем выходной
 
End Sub
 
'::: Тестирование в VBA Excel
 
Sub Test()
 
    HomeDir$ = ThisWorkbook.Path
    
    Cut_File HomeDir & "\Cat-117.jpg", HomeDir & "\Cat1.bin", HomeDir & "\Cat2.bin", HomeDir & "\Cat3.bin"
    
    Merge_parts HomeDir & "\Cat-new.jpg", HomeDir & "\Cat1.bin", HomeDir & "\Cat2.bin", HomeDir & "\Cat3.bin"
 
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5