Страница: 1 |
До открытия файла imho узнать невозможно. 1. Считать весь файл а) циклом пройтись и найти все vbCrLf б) Объявить массив и воспользоваться Split()'ом 2. Считывать файл с помощью Line Input (циклом до EOF(), в цикл поместить переменную - счетчик) Если грузишь его в TextBox, то проще Const EM_GETLINECOUNT = &HBA LineCount = SendMessageByVal _ (Text1.hWnd, EM_GETLINECOUNT, 0, 0) Если загружать его в текстовое поле, это намного медленнее и, к тому же, ограничение в 9х на 64 кб никто еще не отменял Я не сказал что надо загружать в текстовое поле. Я сказал - если надо загружать, то проще посчитать так. Часто текстовые файлы открывают для того, чтобы считать из них текст. Тогда этот метод приемлим. Если построчно считывать, то надо в цикле задавать некий предел, до которого необходимо считывать, то есть конец цикла, а у меня часто всречаются не нормированные файлы (от 10 до нескольких тысяч строк). Пока я использую проход такого вида: F1 = FreeFile Потом считываю следующий файл и так далее. А хотелось как нибудь оптимизировать. Dim ff as integer dim aFiles(1 to 5) as string dim aCounr(1 to 5) as long afiles(1) = "file1.txt" afiles(2) = "file2.txt" afiles(3) = "file3.txt" afiles(4) = "file4.txt" afiles(5) = "file5.txt" dim i as integer dim strTemp as string for i = 1 to 5 acount(i) = 0 ff=freefile open afiles(i) for input as #ff while not eof(ff) Line Input #ff, strTemp aCount(i) = aCount(i) + 1 wend close #ff next i for i = 1 to 5 msgbox "File #" & i & "." & vbcrlf & acount(i) & " Lines.",vbInformation, "File Info" next i а не проще ли..... dim stroki() as string dim line as string ff=freefile fpath="путь" Open fPath For Input As #fNum msgbox ubound(stroki) И все... stroki Сильно удивлюсь, если узнаю, что Split - очень быстрая процедура Быстро - отмаппировать файл длиной l в память с адреса a, а потом: mov edx,0 mov ecx,a m0: mov al,[ecx] cmp al,13 jnz m1 cmp al,10 jnz m1 inc edx m1: cmp ecx,l jnz m0 mov eax,edx ret :P Страница: 1 |
Вопрос: Как определить кол-во строк в текстовом файле
Добавлено: 29.03.04 00:14
Автор вопроса:
Alex(S) | Web-сайт:
Необходимо до открытия файла узнать сколько в нем строк.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа: cresta
Вопросов: 117
Ответов: 1538
Профиль | | #1
Добавлено: 29.03.04 01:15
Номер ответа: 2
Автор ответа: HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 29.03.04 01:15
До открытия ни как, нужно открывать и считать строки, разве что если ты знаешь сколько символов в каждой строке, но это маловероятно
Номер ответа: 3
Автор ответа: sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 29.03.04 01:22
Номер ответа: 4
Автор ответа: cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 29.03.04 01:24
После открытия можно посчитать сколько в файле встречается CHR(10)+CHR(13). Если в файле записана информация из переменной пользовательского типа, можно получить размер файла и поделить на длину записи.
Номер ответа: 5
Автор ответа: LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 29.03.04 09:02
Номер ответа: 6
Автор ответа: sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 29.03.04 11:33
Номер ответа: 7
Автор ответа: LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 29.03.04 12:13
Номер ответа: 8
Автор ответа: HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 29.03.04 22:36
А ведь спрашивали ДО открытия файла, когда уже открыл или загрузил куда-то, то и бабушка моя посчитает! Я ж сразу и сказал, что до открытия врядли!
Номер ответа: 9
Автор ответа: Alex(S)
Вопросов: 8
Ответов: 31
Web-сайт:
Профиль | | #9
Добавлено: 30.03.04 00:14
Open "c:\a.txt" For Input As F1
For i = 1 To 50000
Line Input #F1, s
ListName.AddItem s
If EOF(F1) Then GoTo file2
Next i
file2:
Номер ответа: 10
Автор ответа: AASoft
Вопросов: 86
Ответов: 920
Профиль | | #10
Добавлено: 30.03.04 00:29
Номер ответа: 11
Автор ответа: lamepok
ICQ: 6206624
Вопросов: 5
Ответов: 52
Профиль | | #11
Добавлено: 30.03.04 01:02
line = Input(LOF(fNum), #fNum)
Close #fNum
stroki = Split(txt, vbNewLine)
Номер ответа: 12
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #12
Добавлено: 30.03.04 03:00