Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: как узнать число строк в ткстовом файле? Добавлено: 08.06.04 13:09  

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

не ужели нет функции которая возвращает число строк в файле?

 

Ответить

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

Номер ответа: 1
Автор ответа:
 Иришка



Вопросов: 1
Ответов: 1
 Профиль | | #1 Добавлено: 08.06.04 13:48
Не припомню функцию.
Можно открыть файл на Input "пока" не конец и посчитать в числовую переменную количество проходов.

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 08.06.04 13:57
А можно считать весь файл, вызвать функцию Split, со вторым параметром - vbCrLf

Ответить

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



Вопросов: 4
Ответов: 4
 Профиль | | #3 Добавлено: 08.06.04 14:30
Это всё можно сделать, но по моему это всё не совсем правильно. Например в моём случае размер файла 65 мб. Так что к случай со считывангием всего файла отпадает. Да и проход всего файла в цикле со счетчиком тоже наверное лишнее. Например мне нужно определить серединуфайла(для бинаргого поиска) не ужели для этого я должен посчитать сколько строк в файле?
Не ужели нет других способов?

Ответить

Номер ответа: 4
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #4
Добавлено: 08.06.04 14:36
Считать кол во строк в файле ты должен в любом случаи... +) как ты можешь что то узнать не посчитать так как ... строки ... это лишь тебе на глаз строки а так этот один прямой поток байт....

есть дурацкий способ ...
лучше делай на АПИ может быстрей будет .... читай по два байта и если они являются знаком переноса строки помоему 0a 10 не помню... счётчик кол во строк инскриминируешь... и можешь запоминать оффсет строки... и её длинну соотсвенно чтоб потом было проще +)

Ответить

Номер ответа: 5
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #5
Добавлено: 08.06.04 14:39
блин тормоз +)
то бишь 0D0A +)

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 08.06.04 19:32
Следовательно, бери и смотри весь файл на наличие этих двух байт... Долго на ВБ !? Ничего, пиши на др. языке :) С такими файлами - лучше на С++ или АСМ... все более медленное - МЕДЛЕННОЕ %)

Ответить

Номер ответа: 7
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #7
Добавлено: 08.06.04 20:56
Вот на держи......работает реально.....:)






Private Sub Command1_Click()
MsgBox CalculateLines(Text1)
End Sub

Public Function CalculateLines(TextBox1 As TextBox) As Long
Dim i As Long
Dim Str As String
Dim Lines As Long

Lines = 1
Str = TextBox1.Text

On Error Resume Next

For i = 1 To Len(Str)
 If Asc(Mid(Str, i, 1)) = 13 Then Lines = Lines + 1
Next i

CalculateLines = Lines
End Function





удачи!!!

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 08.06.04 21:53
В текстБокс 64 метра никто не запихивает - рас
Это самое медленное чудо которое можно сообразить на VB - двас
Сравнение только на &HD - неверно, т.к. это совсем не обязательно то что ищем...

Ответить

Номер ответа: 9
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #9
Добавлено: 08.06.04 23:41
 Да, VB явно не блещет.

Даже с буфером 512 кБ гудит 11 секунд.
Если хочешь - поиграй с буфером. Всё равно код уже написан и выкидывать его жалко(у пчёлки).
---
Private Sub Command1_Click()
 ;Dim FileToRead As String
 ;Dim Position As Long
 ;Dim Free_hFile As Long
 ;Dim BufferSize As Long
 ;Dim Buffer As String
 ;Dim t1 As Single, t2 As Single
 ;Dim Count_CrLf As Long
    
    FileToRead = "C:\PBWin70\DOC\PBForum\FORUM4.DAT"
    Position = 1
 Free_hFile = FreeFile
 
 BufferSize = 524288
 
 Buffer = Space$(BufferSize)
  
 ;Dim FileLen As Long
 
 Open FileToRead For Binary As #Free_hFile
  FileLen = LOF(1)
  t1 = Timer
  While Position < FileLen
      Me.Caption = Val(Me.Caption) + 1 & " times"
      Get #Free_hFile, Position, Buffer
      Count_CrLf = Count_CrLf + UBound(Split(Buffer, vbCrLf))
      Position = Position + BufferSize
  Wend
  t2 = Timer
  Close #Free_hFile
  Me.Caption = "Press Command1 to begin"
  MsgBox "Complete at " & t2 - t1 & " sec", , "LineCount=" & Count_CrLf
End Sub
---

Можешь While...Wend заменить на For...Next. Сэкономишь пол секунды.

For Position = 1 To FileLen Step BufferSize
      Get #Free_hFile, Position, Buffer
      Count_CrLf = Count_CrLf + UBound(Split(Buffer, vbCrLf))
Next Position

Ответить

Номер ответа: 10
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #10
Добавлено: 08.06.04 23:42
 Цикл - это не лучшая идея. За 3 секунды у меня проверил 600 кБ. Простым подсчётом получаем что на проверку 60-метрового файла уйдёт 5 минут.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #11
Добавлено: 10.06.04 20:45
Попробуйте маппинг с асмом - должно быть довольно резво.

Ответить

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



ICQ: 554200 

Вопросов: 101
Ответов: 343
 Профиль | | #12 Добавлено: 10.06.04 22:32
А ты пробовал загружать весь файл в память а потом уже искать кол-иво строк?

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #13 Добавлено: 10.06.04 22:49
А напиши себе DLL на РВ, там есть такие вещи :
  ;DIM count&, y&, C AS STRING
  OPEN "d:\WIN32API.INC" FOR INPUT AS #1
  FILESCAN #1, RECORDS TO count&
  ;DIM TheData(1:count&;) AS STRING
  LINE INPUT #1, TheData() TO y&
  CLOSE #1

и работать будет шибко быстро. WIN32API.INC я нарастил до более чем 400000 строк. Результ - менее секунды. И в count& сидит кол-во строк. А TheData() - массив, в котором все твои строки.

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #14 Добавлено: 10.06.04 22:51
Да, и размер файла WIN32API.INC - 17 Мб

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #15 Добавлено: 10.06.04 23:42
Я тут скомпилировал эту функцию в DLL, проверил из VB - работает. Пример: количество строк 437 042, время подсчёта строк - 0.09 сек. Если надо может тебе куда на мыло скинуть?

Ответить

Страница: 1 |

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



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