Страница: 1 |
Вопрос: Как узнать количество строк текстового файла?
Добавлено: 11.02.03 02:10
Автор вопроса: AlexSid
Собственно весь вопрос в теме. Задача узнать количество строк в текстовом файле. Как можно это сделать?
Пробегаться по файлу while not eof? Долго!!!
Ответить
Номер ответа: 1Автор ответа: DimaS
Вопросов: 2Ответов: 85
Профиль | | #1
Добавлено: 11.02.03 10:08
Попробуй так:
Dim MyArr() As Byte Dim AmountOfLines As Long Open "c:\test.txt" For Binary As #1
ReDim MyArr(LOF(1)) Get #1, , MyArr() Close #1 AmountOfLines = 0 For i = 0 To UBound(MyArr) If MyArr(i) = 10 Then AmountOfLines = AmountOfLines + 1 Next i MsgBox AmountOfLines
может быть будет быстрее?
Удачи.
Ответить
Номер ответа: 2Автор ответа: DAN
ICQ: 234826 Вопросов: 10Ответов: 124
Web-сайт: visualbasic.boom.ru Профиль | | #2
Добавлено: 11.02.03 11:42
Ну в крайнем случае можешь сосчитать число символов vbCrLf. Не знаю как это подействует, но работать должно!
Ответить
Номер ответа: 3Автор ответа: AlexSid
Вопросов: 4Ответов: 27
Профиль | | #3
Добавлено: 11.02.03 12:16
To DimaS:
У меня файл порядка 20Mb. Грузить весь его в память, как-то не хорошо, на мой взгляд!
To DAN:
А как посчитать количество определенных символов в файле, не пробегаясь по всему файлу? Опять же, получается while not eof!
Ответить
Номер ответа: 5Автор ответа: root
Вопросов: 12Ответов: 147
Web-сайт: www.vbnet.ru Профиль | | #5
Добавлено: 11.02.03 21:27
2Страшный Сон ыидимо оченб крутая функция.
Ответить
Номер ответа: 6Автор ответа: root
Вопросов: 12Ответов: 147
Web-сайт: www.vbnet.ru Профиль | | #6
Добавлено: 11.02.03 21:42
2: AlexSid , грузи файл в память(если ее таки хватит) потом бей на массив символом vbnewline, потом ubound вернет кол-во строк... это в любом случае быстрее чем ситать файл построчно...
зыж, поздравляю, бонусный индекст топика "10000" ))))))))))))))
Ответить
Номер ответа: 7Автор ответа: AlexSid
Вопросов: 4Ответов: 27
Профиль | | #7
Добавлено: 12.02.03 10:56
To Страшный Сон:
Ну, если твоя функция действительно такая крутая, чтобы ее на форум выложить нельзя было, тогда мыль, буду очень благодарен.
А по поводу "грузи файл в память", как-то мне не нравиться эта идея... Неужели нельзя как-нибудь попроще? Вот утилита wc под *nix моментом считает и количество строк, и число символов. Нет ли чего-нить подобного под Винды?
Ответить
Номер ответа: 8Автор ответа: root
Вопросов: 12Ответов: 147
Web-сайт: www.vbnet.ru Профиль | | #8
Добавлено: 12.02.03 16:34
> А по поводу "грузи файл в память", как-то мне не нравиться эта идея... Неужели нельзя как-нибудь попроще?
мля! как ты посчитаешь кол-во строк не грузя в память?
> и число символов.
гы-гы. а filelen тебе что вернет?
> Нет ли чего-нить подобного под Винды?
Ответить
Номер ответа: 9Автор ответа: AlexSid
Вопросов: 4Ответов: 27
Профиль | | #9
Добавлено: 12.02.03 17:43
> как ты посчитаешь кол-во строк не грузя в память?
Вот я и спрашиваю: КАК? Видимо, никак.
А Страшный Сон чего-то молчит со своей функцией...
Ответить
Номер ответа: 11Автор ответа: root
Вопросов: 12Ответов: 147
Web-сайт: www.vbnet.ru Профиль | | #11
Добавлено: 12.02.03 18:27
2Страшный Сон:
> Ну чё, не слабо, да?
уже не первый раз натыкаюсь на подобную фразу от тебя.
2AlexSid:
> Вот я и спрашиваю: КАК? Видимо, никак.
я предлагаю варианты:
1. в цикле читать файл построчно и прибавлять к переменной единичку.
2. читать файл целиком и разбивать на массив.
3. читать файл целиком и искать в нем пару cr+lf
второй способ намного быстрее первого, хотя займет больше памяти.
третий вообще прикол...
ps. ну не гигабайтовый же файл!
Ответить
Номер ответа: 13Автор ответа: Chan
ICQ: 26977559 Вопросов: 3Ответов: 14
Web-сайт: chan-dzu.chat.ru Профиль | | #13
Добавлено: 13.02.03 17:39
ИМХО оптималеный вариант нечто среднее между 1 и 3 (by root):
читать по блоку из файла (например килобайт по 20 или сколько не жалко) и ищешь vbCrLf
Ответить
Страница: 1 |
Поиск по форуму