Найдите ошибки - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д