Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как определить кол-во строк в текстовом файле Добавлено: 29.03.04 00:14  

Автор вопроса:  Alex(S) | Web-сайт: sapr7.by.ru
Необходимо до открытия файла узнать сколько в нем строк.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #1 Добавлено: 29.03.04 01:15

До открытия файла imho узнать невозможно.

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 29.03.04 01:15
До открытия ни как, нужно открывать и считать строки, разве что если ты знаешь сколько символов в каждой строке, но это маловероятно

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 29.03.04 01:22

1. Считать весь файл

а) циклом пройтись и найти все vbCrLf

б) Объявить массив и воспользоваться Split()'ом

2. Считывать файл с помощью Line Input (циклом до EOF(), в цикл поместить переменную - счетчик)

Ответить

Номер ответа: 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

Если грузишь его в TextBox, то проще

Const EM_GETLINECOUNT = &HBA

LineCount = SendMessageByVal _

(Text1.hWnd, EM_GETLINECOUNT, 0, 0)

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 29.03.04 11:33

Если загружать его в текстовое поле, это намного медленнее и, к тому же, ограничение в 9х на 64 кб никто еще не отменял :(

Ответить

Номер ответа: 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-сайт: sapr7.by.ru
 Профиль | | #9
Добавлено: 30.03.04 00:14

Если построчно считывать, то надо в  цикле задавать некий предел, до которого необходимо считывать, то есть конец цикла, а у меня часто всречаются не нормированные файлы (от 10 до нескольких тысяч строк). Пока я использую проход такого вида:

    F1 = FreeFile
    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

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

Ответить

Номер ответа: 11
Автор ответа:
 lamepok



ICQ: 6206624 

Вопросов: 5
Ответов: 52
 Профиль | | #11 Добавлено: 30.03.04 01:02

а не проще ли.....

dim stroki() as string

dim line as string

ff=freefile

fpath="путь"

Open fPath  For Input As #fNum
line = Input(LOF(fNum), #fNum)
Close #fNum
stroki = Split(txt, vbNewLine)

msgbox ubound(stroki)

И все...

 

stroki

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 30.03.04 03:00

Сильно удивлюсь, если узнаю, что 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам