Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как узнать количество строк текстового файла? Добавлено: 11.02.03 02:10  

Автор вопроса:  AlexSid

Собственно весь вопрос в теме. Задача узнать количество строк в текстовом файле. Как можно это сделать?

Пробегаться по файлу while not eof? Долго!!!

Ответить

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

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

Ответить

Номер ответа: 4
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #4 Добавлено: 11.02.03 19:31
Смело грузи весь файл в память  и используй мою функцию  ;(которую я могу отослать по E-Mail), чтобы определить количество строк.

Ответить

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

> как ты посчитаешь кол-во строк не грузя в память?

 

Вот я и спрашиваю: КАК? Видимо, никак.

 

А Страшный Сон чего-то молчит со своей функцией...

Ответить

Номер ответа: 10
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #10 Добавлено: 12.02.03 17:44

А вот, сделал я функцию небольшую. В общем, неплохая. Для определения количества строк в 20-мегабайтовом файле ей понадобится примерно 2 часа со средним процессором. Ну чё, не слабо, да?

Ну и смайлик... :))))))

Function GetLines(Str$) As Long
Dim I&, P&
For I = 1 To Len(Str)
    If Asc(Mid(Str, I, 1)) = 13 Then P = P + 1
Next I
GetLines = P + 1
End Function

Ответить

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



Вопросов: 12
Ответов: 147
 Web-сайт: www.vbnet.ru
 Профиль | | #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
Автор ответа:
 Chan



ICQ: 26977559 

Вопросов: 3
Ответов: 14
 Web-сайт: chan-dzu.chat.ru
 Профиль | | #13
Добавлено: 13.02.03 17:39

ИМХО оптималеный вариант нечто среднее между 1 и 3 (by root):

читать по блоку из файла (например килобайт по 20 или сколько не жалко) и ищешь vbCrLf

Ответить

Страница: 1 |

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



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