|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Обработка больших файлов
Как узнать количество символов в файле?
Я дел так файл пихаешь в memo и потом Код:
length(memo.lines.text) Что в общем то меня и не устраивает, может есть быстрее способ? Ну или хотя бы как убрать эффект подвисания? Application.processmessages ничего не дал |
#2
|
|||
|
|||
Попробуй так:
Код:
Var F : File Of Byte; L : Integer; begin AssignFile(F,'d:\text.txt'); Reset(F); L:=SizeOf(F); CloseFile(F); end; В итоге в переменной L у тебя будет размер файла в байтах. Если помним, то один символ занимает один байт. Следовательно, получаешь количество символов. |
#3
|
|||
|
|||
Цитата:
также можно попробовать пихать файл не в memo, а в переменную типа TStrings Код:
Var S : TStrings; L : Integer; I : Integer; begin S:=TStringList.Create; S.LoadFromFile('d:\text.txt'); L:=0; For I:=0 To (S.Count-1) Do L:=L+Length(S.Strings[i]); S.Free; end; Это должно быть быстрее чем работа с memo |
#4
|
||||
|
||||
Если делать через AssignFile... то у меня такой вопрос:
Как мой исходный файл f разбить на файлы длиной скажем в 2500 символом? При работе с memo это легко делается функцией copy. Есть ли что-нить похожее у TStrings? |
#5
|
|||
|
|||
TStrings и TMemo - одна фигня, т.к. TMemo.Lines - это и есть YTStrings.
Так что тебе надо? Посомтреть размер файла или именно разбить его на части? В зависимости от этого будет разный код. |
#6
|
||||
|
||||
Да. Мне надо узнать количество символов(байт) в текстовом файле и разбить его на файлы определенного размера (например по 2000 символов)
Как это сделать в принципе знаю, но как это сделать что бы прога максимально быстро обрабатывала файлы? |
#7
|
||||
|
||||
У вас 2 варианта чтения.
Можно читать сразу блоками по 2000 байт, это будет быстро, но туда попадут и символы конца строки, а это по 2 байта на строку. Можно читать строками, но это несколько медленее, но зато там не надо обрабатывать эти символы. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
||||
|
||||
Можно пример чтения по блокам?
|
#9
|
||||
|
||||
to AIMor, проверил метод с TStrings, реально работает намного быстрее, так что остановился на этот способе.
что касается SizeOf, то он у меня работает коряво и выводит фиг знает что :/ Спасибо всем за ответы! тему можно закрывать |