Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск в файле


Страницы:   1 2

sdw_syscoder ©   (2004-08-06 21:18:00) 

Как можно реализовать считывание блоков из файла в TMemoryStream начиная, допустим, c символа '3A' и заканчивая '4646'.


Fay   (2004-08-07 00:38:00) [1]

OK


sdw_syscoder   (2004-08-06 23:32:00) [2]

> Fay ©   (06.08.04 23:28) [18]
Speed она скоростью, а ресурсов жрать ещё неизвестно что больше будет. А так OK! Сравню и доложу!


sdw_syscoder   (2004-08-06 23:29:00) [3]

> Fay ©   (06.08.04 23:21) [15]
Да вот, ёперный театр!, на карточке осталось 10 деревянных, поэтому и с опозданиями на connect выхожу.


Fay   (2004-08-06 23:28:00) [4]

2 sdw_syscoder   (06.08.04 23:26) [16]
Получишь пример с TFileStream - сравни скорость.


Fay   (2004-08-06 23:27:00) [5]

Ваще-то у меня есть ошибка в условии 2-го where. Исправь сам - я домой, так что меня час не будет.


sdw_syscoder   (2004-08-06 23:26:00) [6]

> Fay ©   (06.08.04 22:52) [8]
Огромное спасибочки, FAY, работает!!! Попробую под себя заточить и в цикле дёргать строки между этими флагами, пока файл не закончиться.

> Мастер ©   (06.08.04 23:18) [14]
Во-Во! TFileStream мене больше подходит! Просто везде предлагают через FileMapping.
А можно, если Вас не затруднит, подогнать примерчик.
Заранее благодарен.


Fay   (2004-08-06 23:21:00) [7]

Не думал, что DialUp бывает такой медленный.


Мастер   (2004-08-06 23:18:00) [8]

А чем тебя не устраивает TFileStream?

Читаешь файл в буфер, ищешь начало нужного куска.
Если нашел, начинаешь копировать с этой позиции в TMemoryStream, одновременно проверяя на окончание куска.


Fay   (2004-08-06 23:16:00) [9]

Не понял вопрос, но попробую ответить.

Я тестировал на файле такого содержания
0000000000000000000100000000000000000000000002200000000000000000


sdw_syscoder   (2004-08-06 23:14:00) [10]

НИ ФИГА СЕБЕ, СКАЗАЛ Я СЕБЕ!
Ну ты блин и загнул. Это где же задаётся '22'.


sdw_syscoder   (2004-08-06 23:05:00) [11]

> Fay ©   (06.08.04 23:00) [10]
> Ёжик задумался....

У ёжика интернет ведь не бесплатный, а тем более и DialUp.

А вооще-то есть над чем подумать....я ушёл в себя....Wait please.


Fay   (2004-08-06 23:00:00) [12]

Ёжик задумался....


Fay   (2004-08-06 22:55:00) [13]

Это между '1' и '22', если кто не понял 8)


Fay   (2004-08-06 22:52:00) [14]

Примерно так.

procedure TForm1.Button2Click(Sender : TObject);
var
 f, m, sz : DWORD;
 v, p1, p2, pe : PChar;
 s : string;
begin
 f := CreateFile('c:\File.any', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 if f = INVALID_HANDLE_VALUE then RaiseLastOSError;
 s := '';
 m := 0;
 v := nil;
 try
   sz := GetFileSize(f, nil);
   if sz = INVALID_FILE_SIZE then RaiseLastOSError;
   if sz < 1 then Exit;
   m := CreateFileMapping(f, nil, PAGE_READONLY, 0, 0, nil);
   if m = 0 then RaiseLastOSError;
   v := MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0);
   if v = nil then RaiseLastOSError;
   pe := v + sz - 1;
   p1 := v;
   while (p1 < pe) and (p1^ <> '1') do
     Inc(p1);
   if p1 = pe then Exit;
   p2 := p1;
   while p2 < pe do
     begin
       Inc(p2);
       if p2^ = '2' then if p2[1] = '2' then
           Break;
     end;
   if p2 = pe then Exit;
   SetString(s, p1+1, p2-p1-1);
 finally
   if v <> nil then UnmapViewOfFile(v);
   if m <> 0 then CloseHandle(m);
   CloseHandle(f);
 end;
 ShowMessage(s);
end;


sdw_syscoder   (2004-08-06 22:40:00) [15]

Ну и как же посредством File Mapping найти в файле (как я понял, отображённым в памяти) блок по двум флагам (начало и конец), а затем его прочесть в переменную string.


Fay   (2004-08-06 22:07:00) [16]

Преимущества :
1) Невдолбенная скорость.
2) Очень удобно, т.к. работаешь так же, как с памятью.

Если ты всёрьёз решил, во что бы то ни стало, "обойтись" -делай сам. 8)


sdw_syscoder   (2004-08-06 22:00:00) [17]

> Fay ©   (06.08.04 21:52) [4]
> Вам знакомо слово CreateFileMapping?


Да че-та мельком слышал здесь, а какие он даёт преимущества и можно обойтись ли без него.


Fay   (2004-08-06 21:52:00) [18]

2 ghg ©   (06.08.04 21:38) [3]
1) Ужасы какие. Я даже не понял, о чём речь, но очень страшно.
2) Нет такого слова - "имно".

2 sdw_syscoder   (06.08.04 21:32) [2]
Вам знакомо слово CreateFileMapping?


ghg   (2004-08-06 21:38:00) [19]

насколько я знаю при считывании можно позиционироваться только по адресу (по номеру байта), а тчто в этом байте узнаешь только после того как позиционируешься и считаешь, так что имно нельзя

но может и не прав


sdw_syscoder   (2004-08-06 21:32:00) [20]

> hg ©   (06.08.04 21:25) [1]
Да нет, обычный неструктурированный файл, который содержит последовательный набор символов.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо