поиск в массиве

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

поиск в массиве

Сообщение |( () ( T |/| |( » 28.12.2006 (Чт) 23:14

Есть массив типа String, в нем хранятся имена файлов, как можно организовать поиск в этом массиве по маске (*.txt,*.*,и т.д.).
Щелчок по кнопке поиск результатов не дал. (
С=[::::::::::> ™ e398wallpapers.narod.ru

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 28.12.2006 (Чт) 23:20

Есть в вб такой оператор Like, :idea: может пригодится
Dmitrich

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 28.12.2006 (Чт) 23:32

Код: Выделить всё
Private Sub cmdSearch_Click()
Dim a(1 To 3) As String, i As Long

a(1) = "file.txt"
a(2) = "file.exe"
a(3) = "fil"

Me.Cls
For i = 1 To 3
    If a(i) Like txtMask.Text Then Me.Print a(i)
Next i
End Sub


Попробуй маски "*", "*.*", "*.txt".

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 28.12.2006 (Чт) 23:34

Dmitriy2003: нисказал бы, так и жил бы незнаючи :lol:
С=[::::::::::> ™ e398wallpapers.narod.ru

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 29.12.2006 (Пт) 0:26

Ещё парочку вопросов, дабы не создовать новую тему:
1.Как узнать количество локальных дисков, и их имен?

Единственное что придумал:
ABC = Array("A", "B", "C", "D", "E", "F", "G", "H", "J", "i", "K", "L", "M", "N", "O", "P", "R", "Q", "S", "T", "U", "V", "W", "X", "Y", "Z")
VName = String$(255, Chr$(0))
FSName = String$(255, Chr$(0))

For i = 2 To 25
DoEvents
DiscName = ABC(i) & ":\"
If Dir(DiscName) <> "" Then
VName = String$(255, Chr$(0))
FSName = String$(255, Chr$(0))
GetVolumeInformation DiscName, VName, 255, Serial, 0, 0, FSName, 255
VName = Left$(VName, InStr(1, VName, Chr$(0)) - 1)
FSName = Left$(FSName, InStr(1, FSName, Chr$(0)) - 1)
End If
If (Dir(DiscName) <> "") And (FSName = "NTFS" Or FSName = "FAT" Or FSName = "FAT32") Then

End If
Next

Но мне кажется есть более простой способ.

2. Как узнать сколько места занято на диске?
С=[::::::::::> ™ e398wallpapers.narod.ru

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 29.12.2006 (Пт) 2:08

Dmitrich

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 29.12.2006 (Пт) 8:25

|( () ( T |/| |( писал(а):...Но мне кажется есть более простой способ...

Более простой способ проверки диска
Код: Выделить всё
Function isDriveReady(sDriveLetter As String) As Boolean
  On Error Resume Next
  isDriveReady = CreateObject("Scripting.FileSystemObject").FileExists(sDriveLetter & ":\NUL")
End Function

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 10:02

|( () ( T |/| |( писал(а): 1.Как узнать количество локальных дисков, и их имен?
2. Как узнать сколько места занято на диске?


Из Help-a:

Код: Выделить всё
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 29.12.2006 (Пт) 10:35

Проще всего получить через WMI коллекцию Win32_DiskDrive, ну и уже потом дальше на восток...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 10:49

RayShade писал(а):Проще всего получить через WMI коллекцию Win32_DiskDrive, ну и уже потом дальше на восток...


Да куда уж проще-то:
Код: Выделить всё

Public Sub Main()
    Dim d As Scripting.Drive, fso As New Scripting.FileSystemObject
    Dim s As String
    Debug.Print "----------"
    For Each d In fso.Drives
        Select Case d.DriveType
            Case 1: s = "Removable"
            Case 2: s = "Fixed"
            Case 3: s = "Network"
            Case 4: s = "CD-ROM"
            Case 5: s = "RAM Disk"
            Case Else: s = "Unknown"
        End Select
        s = "Drive " & d.DriveLetter & ": - " & s
       
        On Error Resume Next
        s = s & ", File System = " & d.FileSystem & ", Total Size = " & d.TotalSize
        If Err.Number Then s = s & ", <" & Err.Description & ">"
        On Error GoTo 0
        Debug.Print s
    Next d
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 29.12.2006 (Пт) 11:23

Andrey Fedorov

Ну так неинтересно. А вот например, надо узнать, какой там размер сектора или еще что :roll: Так что WMI мне больше нравится в этом смысле.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 11:29

RayShade писал(а):Andrey Fedorov
Ну так неинтересно. А вот например, надо узнать, какой там размер сектора или еще что :roll: Так что WMI мне больше нравится в этом смысле.


Размер сектора по условию задачи не нужен :P
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 29.12.2006 (Пт) 11:43

Даже если сейчас это не указано, то все равно решение должно быть легко расширяемым :) Вдруг понадобится потом.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 12:07

RayShade писал(а):Даже если сейчас это не указано, то все равно решение должно быть легко расширяемым :) Вдруг понадобится потом.


Учитывая никому не нужное "расширение на будущее" вместо примитива нагородить целый огород...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 29.12.2006 (Пт) 13:46

Andrey Fedorov писал(а):Учитывая никому не нужное "расширение на будущее" вместо примитива нагородить целый огород...

Выскажусь за WMI: я бы не сказал, что с WMI код будет намного сложнее, тем более создать этот код ещё проще - не надо даже писать его самому, достаточно воспользоваться какой-нить программой типа WMI CodeCreator.
Salus populi suprema lex

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 29.12.2006 (Пт) 14:18

Я получаю список дисков с помощью функций GetLogicalDriveStrings и GetDriveType. С нормальными дисками все работает отлично, но у меня есть 2 диска с файловой системой BFS и программа не работает. Как получить диски с другими ф.с.
Если долго мучиться, что-нибудь получится

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 14:25

AntonGV писал(а):Я получаю список дисков с помощью функций GetLogicalDriveStrings и GetDriveType. С нормальными дисками все работает отлично, но у меня есть 2 диска с файловой системой BFS и программа не работает. Как получить диски с другими ф.с.


А тот код что я дал - что дает?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 29.12.2006 (Пт) 14:30

скажите тогда, какую библиотеку надо подключить чтобы он работал?
Если долго мучиться, что-нибудь получится

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.12.2006 (Пт) 14:55

Microsoft Scripting Runtime
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 29.12.2006 (Пт) 15:02

Спасибо. Теперь работает, только не показывает ф.с. диска(bfs) так как наверно не знает ее.
Если долго мучиться, что-нибудь получится

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 29.12.2006 (Пт) 21:41

Спасибо всем. всё роботает.

Не подскажите как в ListView дбавить иконки привязоннае к расширению фаила? (в ListView хроняться имена файлов, чтобы рядом были иконки этих файлов)

Насколько знаю надо их в ImageList занисти, а вот как?
С=[::::::::::> ™ e398wallpapers.narod.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.12.2006 (Сб) 6:58

об иконках привязанных к расширению файла смотреть FAQ
Весь мир матрица, а мы в нем потоки байтов!

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 03.01.2007 (Ср) 2:45

|( () ( T |/| |(
Ты решил файловый менеджер написать силами участников VB? :lol:
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 03.01.2007 (Ср) 5:45

JohnK писал(а):|( () ( T |/| |(
Ты решил файловый менеджер написать силами участников VB? :lol:


Ну, может он свой аналог SHFileOperation пишет... :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


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

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

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

    TopList  
cron