Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2008, 14:18   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Deight
Где я найду текстовый файл размером 700 метров?
А в чём проблема то?!!!

вот.
975*000*000 bytes
на моём комьютере создаётся за 55 секунд... ;-)
Код:
program fileBig2;
{$APPTYPE CONSOLE}
uses SysUtils;

Var f :TextFile;
i : longInt;
buf : array[1..32*1024] of byte;
begin
  AssignFile(f,'VeryBig.txt');
  SetTextBuf(f,buf);
  Rewrite(f);
  for i:=1 to 25000000 do WriteLn(f,'This is string for test purpose only!');
  CloseFile(f);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.12.2008, 14:18   #12
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
Где я найду текстовый файл размером 700 метров?
Цикл от 0 до парчки миллиардов и алфавит в Memo/
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 09.12.2008, 14:43   #13
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

Не грузите может функция не seek называлась. Я уже не помню. Точно помню она перемещала положение на нужную строку именно в текстовом файле.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 09.12.2008, 17:08   #14
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Про функцию не знаю, но для объектов типа TStrings есть свойство CaretPos, указывающее на текущее положение курсора.
CaretPos это переменная типа TPoint (тип запись).Методов она не имеет, а есть свои свойства X и Y - колонка и строка.
Например: Memo1.Lines.Strings[Memo1.CaretPos.Y]:= 'Это строка Y';
Там в TStrings есть еще ф-ии Get(№строки) - возвращает строку с №;
IndexOf(string) - ищет указанную строку и если найдена, возвращает индекс строки.Иначе - 1
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 09.12.2008 в 17:13.
DeKot вне форума Ответить с цитированием
Старый 09.12.2008, 19:50   #15
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Походу тока два варианта: либо перебирать строки циклом, либо грузить в память и работать по простому. И то и другое долго. А нет ли способа установить курсор в файле на позицию определенного символа?
Pedro вне форума Ответить с цитированием
Старый 09.12.2008, 20:39   #16
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Pedro Посмотреть сообщение
А нет ли способа установить курсор в файле на позицию определенного символа?
так ведь ещё надо определить положение где начинается нужная строка. Алгоритм поиска я описал, во втором посте.
rpy3uH вне форума Ответить с цитированием
Старый 09.12.2008, 21:39   #17
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Мб проще не генерить 1 текстовик а нное число, для более быстрой загрузки без замутов с разбиением по байтам.

А с Грузином я полностью согласен, поскольку чтобы работать с файлом, нам его надо сначала загрузить в оперативную память, а потом уже делать с ним махинации, налету с харда тока по кусочкам, как было описано.
И всякие высказывания типа проще поюзать функцию которая нам ставит в 700мб-ом текстовике курсорчик куда надо - помоему крайне непродуманны. Поскольку имеется в виду обычный бегунок который виден когда печатаешь, а он появляется только при открытом файле.

2Degit
Почитайте учебник по турбо паскалю 7.1, там чорным по белому написано что любой файл, включая текстовый (который рассматривался в данный момент), представляет из себя набор байтов, несущих определённую информацию. Каждый файл начинается с, байта с тегой НАЧАЛО ФАЙЛА и заканчивается байтом с тегой КОНЕЦ ФАЙЛА. Далее идут байты несущие информацию файла, включая теги начала и конца строки.
Zeraim вне форума Ответить с цитированием
Старый 09.12.2008, 22:31   #18
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от Deight Посмотреть сообщение
Не грузите может функция не seek называлась. Я уже не помню. Точно помню она перемещала положение на нужную строку именно в текстовом файле.
Как вспомнишь, как она называется - скажи, это нам всем будет интересно.

И не нужно наезжать на Грузина, ведь требовалось дать самый быстрый способ, а самый-самый - это считывать кусками и искать концы строк, вот Грузин его и предложил, а ты пока не предложил ничего.
Jeni вне форума Ответить с цитированием
Старый 09.12.2008, 22:35   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Zeraim, я со всеми Вашими высказываниями согласен, кроме:
Цитата:
Каждый файл начинается с, байта с тегой НАЧАЛО ФАЙЛА и заканчивается байтом с тегой КОНЕЦ ФАЙЛА.
я не знаю, что написано в вашем учебнике ТурбоПаскаля (и кто его автор ;-), какая y Вас файловая система, но, извините, в настоящий момент это высказывание - глупость.... ну нет в файлах ни "байта с тегой НАЧАЛО ФАЙЛА", ни байта конца... ;-) Разумеется, если мы с Вами сейчас не будем обсуждать реализацию FAT/NTFS, сектора и прочая...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.12.2008, 22:41   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Цитата:
Не грузите может функция не seek называлась. Я уже не помню. Точно помню она перемещала положение на нужную строку именно в текстовом файле.
Как вспомнишь, как она называется - скажи, это нам всем будет интересно.
присоединяюсь. Вот только чудес не бывает - нет такой функции! И фактически способа три (все медленные на больших файлах):
- либо грузить файл в TStringList.loadFromFile - прямой доступ к любой строке,
- либо читать построчно (очень быстро для первых строк, ОЧЕНЬ медленно, для последних! я, например, категорически не рекомендую этот способ, чтобы подсчитать количество строк в файле, если текстовый файл может быть большого размера!)
- предварительно проиндексировать файл - запомнить смещения от начала файла всех строк в специальном индексном файлике, его грузить в память и позиционироваться в текстовом файле по этому индексу.
Этот способ имеет право на жизнь только если работать с текстовым файлом надо много и часто и он не меняется...

можно посмотреть в сторону БД. Либо хранить строчки ФИКСИРОВАННОЙ длины...

вариантов решения — масса. Всё зависит от конктретной задачи!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните строчку, пожалуйста Manya Общие вопросы C/C++ 2 20.11.2008 16:02
Рразъясните строчку. Amen Помощь студентам 11 30.08.2008 02:45
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? barand Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2008 10:58
DBLookupComboBox на первую строчку Inbox БД в Delphi 7 29.10.2007 13:26
HELP! Как мне вытащить текст из файла? kl45gp Общие вопросы Delphi 12 17.08.2007 22:26