Поиск строки по названию

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Поиск строки по названию

Сообщение Saturn.65 » 21.10.2006 (Сб) 20:00

Помогите, кто может!
Даны два ListBoxa. В один загружается список из текстового файла. В другой загружается список файлов( например Кино.avi), находящихся в папке . Как сделать так, чтоб при совпадении названий в одном ListBoxе и в другом выводилось сообщение. Т.е. если в одном и другом ListBoxе будет один и тот же текст (Кино) или совпадающая строка( по названию а не по расширению), то выводилось бы сообщение.
Я просто не знаю по каким пораметрам сравнить.
Заранее благодарен!

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 21.10.2006 (Сб) 20:14

Например...

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

Public Function GetTitle(ByVal strObject As String) As String
    If strObject = vbNullString Then Exit Function
    Dim intPos As Integer
    intPos = InStrRev(strObject, Chr$(46))
    If intPos > 0 Then
        GetTitle = Left$(strObject, intPos - 1)
    Else
        GetTitle = strObject
    End If
End Function

Public Function GetObjectName(ByVal strFullPath As String) As String
    If strFullPath = vbNullString Then Exit Function
    Dim intPos As Integer
    intPos = InStrRev(strFullPath, Chr$(92))
    If intPos > 0 Then
        GetObjectName = Right$(strFullPath, Len(strFullPath) - intPos)
    Else
        GetObjectName = strFullPath
    End If
End Function

Private Sub cmdCheck_Click()
    Dim i As Long, j As Long
    For i = 0 To lstOne.ListCount - 1
        For j = 0 To lstTwo.ListCount - 1
            If GetTitle(GetObjectName(lstOne.List(i))) = GetTitle(GetObjectName(lstTwo.List(j))) Then
                MsgBox lstOne.List(i) & vbCrLf & lstTwo.List(j)
            End If
        Next j
    Next i
End Sub
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 22.10.2006 (Вс) 10:35

Saturn.65
LIst1.text - сравнивай эти свойства у обоих листов

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 22.10.2006 (Вс) 19:08

Спасибо всем кто откликается. Я сейчас выложу свой листинг этой программы для поиска одного названия в списках. Например есть список(txt), например кино. Есть папка куда закачиваются из инета фильмы. Программа должна сравнить оба списка. Если есть два одинаковых названия, то вывести сообщение. Есстественно два одинаковых кино не нужно, поэтому сразу будет это видно и кино можно просто удалить.
----------------------------------------------------------------------------------
Private Sub Form_Load()
Dim nFile As Integer
aaa = FreeFile

'выводит в List1 данные из текстового блокнота
Open "D:\База_данных_txt.TXT" For Input As aaa
While Not EOF(1)
Line Input #1, aaa
List1.AddItem aaa
Wend
Close #1

'ищет все файлы всех расширений в Папка_закачки и выводит их в List2
SSpat = "D:\Папка_закачки" & "\" & "*.*" & RaS
sFile = Dir$(SSpat)
While sFile <> ""
List2.AddItem sFile 'сюда добавит имена файлов
sFile = Dir$
Wend

End Sub
............................................................................

Private Sub List2_Click()
Dim Папка_закачки, База_данных_txt
Папка_закачки = List2.Text
База_данных_txt = List1.Text

' Выводит совпавшее имя в Text1
If Папка_закачки = База_данных_txt Then
Text1.Text = List2.Text
End If

End Sub
...........................................................
Дело в том, что оба списка конечно не совпадут, а как сравнивать построчно? Если кликнуть сперва в одно название потом в другое такое же, то выводится сообщение об одинаковости.Но не будешь же так кликать по спискам.
Вот проблема. По какому принципу сравнивать?
Пробовал код BV, не получилось соеденить с моим кодом.
Если я что- то не так написал - поправте.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 22.10.2006 (Вс) 19:35

Во-первых, за русские названия переменных я бы ручки отрывал вместе с ножками.
Во-вторых, вместо слепого копипаста попробуй вникнуть в приведенный мною код.
И наконец, оцени тег [CODE].
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 22.10.2006 (Вс) 21:37

Виноват! Пепеменные по русски я специально написал для Вас, чтоб понятнее было, откуда куда загружается. Здесь ведь форму не покажешь. Вместо lstOne я подставлял List1. А вот как пути прописать к своему txt. Может вместо GetObjectName? Попробую. ты уж не ругайся. Я еще начинающий. :oops:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 22.10.2006 (Вс) 21:48

Saturn.65 писал(а):А вот как пути прописать к своему txt. Может вместо GetObjectName?


А причем тут твой файл? Ты заполняй списки отдельно, я привел только код сравнения.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 50

    TopList