Страница: 1 |
Вопрос: Как узнать количество строк текстового файла? | Добавлено: 11.02.03 02:10 |
Автор вопроса: ![]() |
Собственно весь вопрос в теме. Задача узнать количество строк в текстовом файле. Как можно это сделать? Пробегаться по файлу while not eof? Долго!!! |
Ответы | Всего ответов: 13 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 85 |
Профиль | Цитата | #1 | Добавлено: 11.02.03 10:08 |
Попробуй так: Dim MyArr() As Byte ReDim MyArr(LOF(1)) может быть будет быстрее?
Удачи. |
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 234826 Вопросов: 10 Ответов: 124 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 11.02.03 11:42 |
Ну в крайнем случае можешь сосчитать число символов vbCrLf. Не знаю как это подействует, но работать должно! |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 4 Ответов: 27 |
Профиль | Цитата | #3 | Добавлено: 11.02.03 12:16 |
To DimaS: У меня файл порядка 20Mb. Грузить весь его в память, как-то не хорошо, на мой взгляд! To DAN: А как посчитать количество определенных символов в файле, не пробегаясь по всему файлу? Опять же, получается while not eof! |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #4 | Добавлено: 11.02.03 19:31 |
Смело грузи весь файл в память ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Номер ответа: 5 Автор ответа: ![]() Вопросов: 12 Ответов: 147 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 11.02.03 21:27 |
2Страшный Сон ыидимо оченб крутая функция. |
Номер ответа: 6 Автор ответа: ![]() Вопросов: 12 Ответов: 147 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 11.02.03 21:42 |
2: AlexSid , грузи файл в память(если ее таки хватит) потом бей на массив символом vbnewline, потом ubound вернет кол-во строк... это в любом случае быстрее чем ситать файл построчно... зыж, поздравляю, бонусный индекст топика "10000" |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 4 Ответов: 27 |
Профиль | Цитата | #7 | Добавлено: 12.02.03 10:56 |
To Страшный Сон: Ну, если твоя функция действительно такая крутая, чтобы ее на форум выложить нельзя было, тогда мыль, буду очень благодарен. А по поводу "грузи файл в память", как-то мне не нравиться эта идея... Неужели нельзя как-нибудь попроще? Вот утилита wc под *nix моментом считает и количество строк, и число символов. Нет ли чего-нить подобного под Винды? |
Номер ответа: 8 Автор ответа: ![]() Вопросов: 12 Ответов: 147 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 12.02.03 16:34 |
> А по поводу "грузи файл в память", как-то мне не нравиться эта идея... Неужели нельзя как-нибудь попроще? мля! как ты посчитаешь кол-во строк не грузя в память? > и число символов. гы-гы. а filelen тебе что вернет? > Нет ли чего-нить подобного под Винды? |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 4 Ответов: 27 |
Профиль | Цитата | #9 | Добавлено: 12.02.03 17:43 |
> как ты посчитаешь кол-во строк не грузя в память?
Вот я и спрашиваю: КАК? Видимо, никак.
А Страшный Сон чего-то молчит со своей функцией... |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #10 | Добавлено: 12.02.03 17:44 |
А вот, сделал я функцию небольшую. В общем, неплохая. Для определения количества строк в 20-мегабайтовом файле ей понадобится примерно 2 часа со средним процессором. Ну чё, не слабо, да? Ну и смайлик... Function GetLines(Str$) As Long |
Номер ответа: 11 Автор ответа: ![]() Вопросов: 12 Ответов: 147 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 12.02.03 18:27 |
2Страшный Сон: > Ну чё, не слабо, да? уже не первый раз натыкаюсь на подобную фразу от тебя. 2AlexSid: > Вот я и спрашиваю: КАК? Видимо, никак. я предлагаю варианты: 1. в цикле читать файл построчно и прибавлять к переменной единичку. 2. читать файл целиком и разбивать на массив. 3. читать файл целиком и искать в нем пару cr+lf второй способ намного быстрее первого, хотя займет больше памяти. третий вообще прикол... ps. ну не гигабайтовый же файл! |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #12 | Добавлено: 12.02.03 18:44 |
Ах, извините пожалуйста! Я допустил грубую ошибку! Не 2 часа, а 30 секунд!!! Вот ещё такую голубую горизонтальную полосочку сделал. |
Номер ответа: 13 Автор ответа: ![]() ![]() ICQ: 26977559 Вопросов: 3 Ответов: 14 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 13.02.03 17:39 |
ИМХО оптималеный вариант нечто среднее между 1 и 3 (by root): читать по блоку из файла (например килобайт по 20 или сколько не жалко) и ищешь vbCrLf |
Страница: 1 |
|