поиск одинаковых слов в *.txt файле

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mensch
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 03.12.2004 (Пт) 17:14

поиск одинаковых слов в *.txt файле

Сообщение mensch » 03.12.2004 (Пт) 17:24

Нужно, чтобы работала кнопка "Поиск однофамильцев", если у кого есть подобный код, пожалуйста вышлите или ответьте на compot2004@yandex.ru

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Re: поиск одинаковых слов в *.txt файле

Сообщение Sedge » 03.12.2004 (Пт) 17:32

mensch писал(а):Нужно, чтобы работала кнопка "Поиск однофамильцев"

И что сия загадочная кнопка должна делать?

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 03.12.2004 (Пт) 17:33

А самому?
Ведь есть же простой способ (хоть и самый медленный):
Делаешь из строки фамилий массив, чтоб в каждом элементе была одно фамилия, потом сравниваешь в цикле, и если фамилия нашлась более одного раза, значит однофамильцы есть -> выводим их :wink:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.12.2004 (Пт) 17:48

Самый лучший способ (на перспективу) - отсортировать список. Тогда поиск однофамильцев становится банальным.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.12.2004 (Вс) 18:27

Самый лучший способ - класть в коллекцию. Поиск в ней как в отсортированном массиве, плюс быстрое добавление/удаление, в отличие от оного - и самое главное, самому писать ничего не нужно :-)
Изображение

mensch
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 03.12.2004 (Пт) 17:14

Сообщение mensch » 06.01.2005 (Чт) 14:28

Да вот, уже давно написал, смотрите:

Dim i As Integer
Dim A(), B(), C(), D() As String
Dim fam(), E(), F() ' fam() - построчное считывание, E(), F() - числа

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''' функция вычисления количества строк в файле '''''''''''''''''''''''''
Open "c:\temp.txt" For Input As #1
Do Until EOF(1)
Line Input #1, txt
allTxt = allTxt + txt + vbCrLf
Loop
Close #1
txtSearch.Text = allTxt + vbCrLf
Dim myParas As Variant
myParas = Split(txtSearch, vbNewLine)
MsgBox "Количество строк = " & ((UBound(myParas) + 1) - 2)
S = ((UBound(myParas) + 1) - 2) 'функция вычисления количества строк в файле
MsgBox "Количество фамилий = " & S / 6
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''' функция вычисления количества строк в файле '''''''''''''''''''''''''


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''ОТКРЫТИЕ ФАЙЛА И ЧТЕНИЕ ПОСТРОЧНО ФАМИЛИЙ В ПЕРЕМЕННУЮ txt'''''''''''''''
ReDim A(i) ' Делаем массивы фамилий динамическими
ReDim A(1 To S / 3) '

ReDim fam(i) ' Делаем массивы строк динамическими (построчное считывание файла temp.txt)
ReDim fam(1 To S)

ReDim B(i) ' Делаем массивы имен динамическими
ReDim B(1 To S)

ReDim C(i) ' Делаем массивы отчеств динамическими
ReDim C(1 To S)

ReDim D(i) ' Делаем массивы классов динамическими
ReDim D(1 To S)

ReDim E(i) ' Делаем массивы оценок1 динамическими
ReDim E(1 To S)

ReDim F(i) ' Делаем массивы оценок2 динамическими
ReDim F(1 To S)


Open "c:\temp.txt" For Input As #1
i = 1
j = 1
Do Until EOF(1)
Line Input #1, txt
fam(i) = txt
i = i + 1
If j = 6 Then
j = 1
Else: j = j + 1
End If
Loop
Close #1

'''''''''''''ОТКРЫТИЕ ФАЙЛА И ЧТЕНИЕ ПОСТРОЧНО ФАМИЛИЙ В ПЕРЕМЕННУЮ txt'''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

n = 1 ' доводим до автоматизма
m = 2
ot = 3
oCl = 4
o1 = 5
o2 = 6

For i = 1 To S / 6 '
A(i) = fam(n)
B(i) = fam(m)
C(i) = fam(ot)
D(i) = fam(oCl)
E(i) = fam(o1)
F(i) = fam(o2)

n = n + 6 '
m = m + 6
ot = ot + 6
oCl = oCl + 6
o1 = o1 + 6
o2 = o2 + 6


Next i ' доводим до автоматизма



'СОРТИРОВКА ФАМИЛИЙ В АЛФАВИТНОМ ПОРЯДКЕ
P = 0
Max = UBound(A): exchange = True

While exchange = True
exchange = False


For i = 2 To Max
If A(i - 1) > A(i) Then
exchange = True

P = A(i - 1) 'меняем местами значение A$(i-1) и A$(i)
A(i - 1) = A(i) 'по правилу 3-х стаканов
A(i) = P '

End If
Next i
Wend


Open "C:\temp1.txt" For Append As #1
For i = 1 To Max
Print #1, A(i)
Next i
Close #1

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 06.01.2005 (Чт) 23:07

tyomitch писал(а):Самый лучший способ - класть в коллекцию. Поиск в ней как в отсортированном массиве, плюс быстрое добавление/удаление, в отличие от оного - и самое главное, самому писать ничего не нужно :-)

Да и ещё при добавлении однофамильца в коллекцию (при условии, что ключом элемента будет фамилия) выдаст ошибку (которую можно отследить) и тем самым коллекция сама нам скажет кто однофамилец. :)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Unstat
Реальный басяк
Реальный басяк
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 07.01.2004 (Ср) 22:19
Откуда: Нижний Новгород

Сообщение Unstat » 10.01.2005 (Пн) 11:12

Надо юзать InStr

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.01.2005 (Вт) 4:30

Unstat писал(а):Надо юзать InStr
Зачем? :roll:
Изображение

Unstat
Реальный басяк
Реальный басяк
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 07.01.2004 (Ср) 22:19
Откуда: Нижний Новгород

Сообщение Unstat » 11.01.2005 (Вт) 15:39

2tyomitch Если фамилии в *.txt записаны через какой ниудь символ допустим пробел то можно легко отделить их друг от друга а потом уже сравнивать.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 11.01.2005 (Вт) 15:45

проще и быстрее открыть этот файл в виде рекордсета с помощью ADO и на уровне SQL-запроса все это решить


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

    TopList