3. Программа "Поиск файла" производит поиск файла в указанном пользователем каталоге и его подкаталогах. Окно программы приведено на рис.4.3.
Dim cDir As String ' путь к папке, в которой будет
' производиться поиск
Dim fileMask As String ' имя или маска для поиска
Dim n As Integer ' количество файлов, удовлетворяющих параметрам поиска
Рис.4.3. Окно программы Поиск файла
Поиск файла в указанном каталоге и его подкаталогах осуществляется при помощи рекурсивной функции find
Function find(dir_path As String)
Dim back_path As String ‘обратный путь, если есть подкаталоги
Dir1.Path= dir_path
File1.Path= dir_path
‘Поиск в текущем каталоге
If File1.ListCount<> 0 Then
‘File1.ListCount - количество файлов по адресу
‘File1.Path
If Mid(fileMask, 1, 1)= “*” Then
‘Установка фильтра на список File1, если нужны все файлы с определенным расширением или любые файлы.
' и вывод всех найденных файлов в список List1
File1.Pattern = fileMask
For i = 0 To (Filel.ListCount - 1) Step 1
n = n + 1
' добавление найденного файла в список List1
' (в список добавляется полный путь к файлу)
If Len(File1.Path). <> 3 Then
List1.Addltem File1.Path + "\” + File1.List(i)
|
|
Else: List1.Addltem File1.Path + File1.List(i)
End If
' Listl.Addltem File1.Path + File1.List(i) -
' добавление элемента File1.Path + File1.List (i)
' в список List1
Next i
Else
' если нужны файлы с конкретным именем и расширением
For i = 0 То (File1.ListCount - 1) Step 1
If File1.List(i) = fileMask Then
n = n + 1
' добавление найденного файла в список List1
If Len(File1.Path) <> 3 Then
List1.Addltem File1.Path + " \“+ _
File1.List(i)
Else: List1.Addltem File1.Path + File1.List(i)
End If
End If
Next i
End If
EndIf
' заход в подкаталог каталога Dir1.Path осуществляется
' следующим образом:
Dir1.List (i), где i - номер подкаталога;
' всего подкаталогов - Dir1.ListCount,
' их нумерация идет от 0 до Dir1. ListCount-1
' если есть подкаталоги
If Dir1.ListCount <> 0 Then
back_path = Dir1.Path ' обратный путь
For j = 0 То (Dir1.ListCount - 1) Step 1
Dir1.Path = back_path
Call find(Dir1.List(j))
Next j
End If
'вывод количества найденных файлов
Label2.Caption = "Найдено файлов: " + Format(n)
End Function
' щелчок на кнопке "Найти"
Private Sub Command1_Click()
If Text1.Text <> "" Then
Dir1.Visible = False
Command1. Enabled = False
' очистка результата предыдущего поиска
n = 0
Label2.Caption = "Найдено файлов: " + Format(n)
List1.Clear
' считывание маски
fileMask = Text1.Text
' определение пути к папке для поиска
If Len(Dir1.Path) <> 3 Then ' если выбран не корень
cDir = Dir1.Path + "\”
Else: cDir = Dir1.Path
End If
Call find(cDir)
Dir1.Path = cDir
Dir1.Visible = True
Command1.Enabled = True
If n = 0 Then
Call MsgBox ("Файлов, удовлетворяющих параметру " + _
"поиска не найдено.",,"Поиск файла")
End If
Else
Call MsgBox ("Нужно ввести параметр поиска.",, _
"Поискфайла")
End If
End Sub
' смена диска
Private Sub Drive1_Change()
' В случае смены диска может возникнуть ошибка (выбор
' дисковода в том случае, если в нем нет диска). Для
' обработки этой ошибки используется переход
' к метке drive_error (смотри ниже).
|
|
On Error GoTo drive_error
Dir1.Path = Drive1.Drive + "\”
' обработка ошибок
drive_error:
' если возникла ошибка, то выбирается диск,
' выбранный раньше
Drive1.Drive = Dir1.Path
End Sub
' инициализация формы
Private Sub Form_Initialize()
Drive1.Drive = "c"
File1.Visible = False
End Sub
' нажатие клавиши в поле ввода имени файла или маски
' для поиска
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Command1.SetFocus
End Sub
Часть 3
Cells(5,3)= “Матрица С”
For i = 1 To 2
For j = 1 To 4
Cells(i+5, j+2) = c(i,j)
‘cm=Str(c(i,j))
‘Write # 2, cm