Количество строк в файле?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Количество строк в файле?

Сообщение Александр80 » 24.01.2005 (Пн) 19:39

Подскажите, как определить количество строк в файле?
У меня есть текстовой файл (большой)… и его нужно загрузить в List. Так как загрузка занимает определенное время, хотелось бы отслеживать степень загрузки в List c визуально с помощью ProgressBar. А вот, как это сделать я не знаю… Мне кажется, что надо узнать количество строк в файле и потом полученную информацию использовать для установки значения ProgressBar1.Max.

Может есть другой способ? Подскажите пожалуйста…

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 24.01.2005 (Пн) 20:04

Скорость загрузги из файла не слишком зависит от количества строк.... ну может слишком :)
Я думаю лучше устанавливать относительно размера файла...
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 20:08

Не согласен... :? У меня 162 789 строк (орфографический словарь) :lol: И загрузка продолжается достаточно долго... :lol:

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 20:09

KDima писал(а):Я думаю лучше устанавливать относительно размера файла...


Идея хорошая... :lol: :wink: я тоже о ней подумал...

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 24.01.2005 (Пн) 20:26

162 789 я подозреваю, что 162 789 пустых строк будут грузится быстрее :)
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 20:31

На самом деле, я просто ради интереса решил в лист загрузить такое количество строк (это безумие)… Если честно, думал никогда этого процесса до конца не дождусь… А потом стало интересно, как можно визуально этот процесс наблюдать …? Вот и мучаюсь с ProgressBar… :? :cry:

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 24.01.2005 (Пн) 21:22

Ну вообще, если я не ошибаюсь, List поддерживает 32 тыс с копейками строк! :roll:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 22:29

_Мика_ Ты не ошибаешься и это моя вторая проблема.... :cry:

Блин старенное событие происходит при загрузки в LIST1
List1.ListCount доходит до 32 000 (приблизительно), а затем обратно уменьшается на одо значение и до 0 после до -32 000 потом опять до 0 и так далее ... Я грузил файл 162 000 строк.

Private Sub Command1_Click()
Dim t As String
Dim txt As String

Open "c:\2.txt" For Input As #1

Do Until EOF(1)
Line Input #1, t
txt = t
List1.AddItem txt

DoEvents
Text2.Text = List1.ListCount
Loop

Close #1

End Sub

:lol: :wink:
Последний раз редактировалось Александр80 24.01.2005 (Пн) 22:35, всего редактировалось 1 раз.

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 24.01.2005 (Пн) 22:34

А может так:
1. грузим весь файл в string
2. ищим там все vbCrLf
3. подссчитываем их и определяем кол-во строк
:roll:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 22:36

А пример можно...? Пожалуйста ... :-(

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 24.01.2005 (Пн) 22:38

А может проще при создании этого текстового файла сразу закладывать в его шапку количество строк?
Век живи - век учись!
www.detal-plast.narod.ru

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 22:42

А если количество строк не известно...? Проблема в этом...? :(

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 24.01.2005 (Пн) 22:53

dim s as string
dim txt as string
dim st() as string

open "C:\my.txt" for input as #1
do until eof(1)
line input #1,s
txt=txt+s+vbcrlf
loop
close #1

st=split(txt,vbcrlf)
msgbox ubound(st)


ну поидеи так, код не пробовал, ща времени нету!
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 24.01.2005 (Пн) 22:57

Спасибо Мика! :lol:

Эту идею можно и забыть, использовать такое количество слов в листе, наверное глупо…, да я и не собираюсь. Просто развлекался…

И еще один вопрос, я делаю словарь и идея такая… Есть элемент LIST1 и TEXT1.
Я ввожу в текст слово и моя программа ищет его в базе (mdb) и загружает в LIST1 список похожих слов (придется писать функцию двоичного поиска. Наверное…).
Подскажите это возможно? Я с базами данных мало знаком…
Если что-то не понятно пишите постараюсь разъяснить … :wink:

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 25.01.2005 (Вт) 1:23

Seek`ом поискать нада CHR(13)
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 25.01.2005 (Вт) 3:07

В добавление к _Мика_
Только как бинарный будет быстрее вроде
Код: Выделить всё
Dim txt As String
Dim st() As String
Open "C:\my.txt" For Binary As #1
txt = Input(LOF(1), #1)
Close #1
st = Split(txt, vbCrLf)
MsgBox UBound(st)

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 25.01.2005 (Вт) 8:44

Sebas писал(а):Seek`ом поискать нада CHR(13)

Каким еще Seek'ом? Есть Seek-statement: это команда установить позицию чтения/записи в открытом файле. Есть Seek-функция: возвращает следующую позицию чтения/записи в открытом файле.
Символов они не ищут :) . Поясни.
Есть ли у меня вопрос? У меня всегда есть вопрос

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 25.01.2005 (Вт) 18:50

Это у него острый приступ дотнетизма :)

Еще 1 вариант:
Код: Выделить всё
Dim lFile As Long
lFile = FreeFile
Open "filename" For Input As #lFile
Do Until EOF(lFile)
    DoEvents
    lLines = lLines + 1
Loop
Close #lFile
MsgBox Trim$(Str(lLines))


А для БД надо использовать ADO (или DAO, если уж очень хочется.) И грамотно составлять SQL запрос к базе, наподобие этого:
Код: Выделить всё
SELECT * FROM [MyTable]
WHERE MyField LIKE '*your expression*'
Моду создают модоки, а распространяют модозвоны.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 25.01.2005 (Вт) 20:12

hCORe писал(а):Это у него острый приступ дотнетизма :)

Еще 1 вариант:
Код: Выделить всё
Dim lFile As Long
lFile = FreeFile
Open "filename" For Input As #lFile
Do Until EOF(lFile)
    DoEvents
    lLines = lLines + 1
Loop

Так ты получишь не бесконечный ли цикл - ведь позиция-то не сдвигается?
Есть ли у меня вопрос? У меня всегда есть вопрос

Александр80
Bonach&#243;n
Bonach&#243;n
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 25.01.2005 (Вт) 20:34

Всем спасибо :lol: :wink:


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

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

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

    TopList