Недавно добавленные исходники

•  Animation Loaders  648

•  DeLiKaTeS Tetris (Тетрис)  5 660

•  TDictionary Custom Sort  7 622

•  Fast Watermark Sources  7 311

•  3D Designer  10 511

•  Sik Screen Capture  7 830

•  Patch Maker  8 058

•  Айболит (remote control)  8 115

•  ListBox Drag & Drop  6 922

•  Доска для игры Реверси  100 067

•  Графические эффекты  8 181

•  Рисование по маске  7 579

•  Перетаскивание изображений  6 181

•  Canvas Drawing  6 547

•  Рисование Луны  6 475

•  Поворот изображения  5 656

•  Рисование стержней  4 577

•  Paint on Shape  3 282

•  Генератор кроссвордов  4 267

•  Головоломка Paletto  3 403

•  Теорема Монжа об окружностях  4 229

•  Пазл Numbrix  2 745

•  Заборы и коммивояжеры  3 645

•  Игра HIP  2 451

•  Игра Go (Го)  2 434

•  Симулятор лифта  2 842

•  Программа укладки плитки  2 284

•  Генератор лабиринта  2 997

•  Проверка числового ввода  2 506

•  HEX View  2 904

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Произвести поиск байта или слова в строке



Автор: sunsb.dax.ru

У семейства x86 есть группа специализированных строковых инструкций, одна из которых - scasb/scasw - производит поиск байта/слова в строке. Использовать преимущества этой инструкции в Delphi позволяют длинные строки, которых в старых паскалях не было.

Никаких сложностей с пониманием, на мой взгляд, быть не должно. Единственное это смена режима открытия файла (FileMode := 0), которая позволит открыть файлы заблокированные ядром Windows и сдвиг указателя файла при чтении нового блока влево на длину искомой строки. Сдвиг делается на случай разрезания искомой строки на части при чтении файла. Полный текст проверенной программы:


program search;
{$APPTYPE CONSOLE}
uses  SysUtils;
const buffSize  = 16384;
var F           : File;
var buff        : AnsiString;
var oldFileMode : integer;
var SearchString: shortString='SunSB';
var SearchPos   : integer = -1;
var readed      : integer;
var blockStart: integer;
begin
   SetLength( buff, buffSize);
   assignFile( F, 'Speedometer2.exe');
   oldFileMode := FileMode;
   FileMode := 0;
   reset( F,1);
   while not eof( F ) do begin
      blockStart := filePos( F );
      blockRead( F, buff[1], buffSize, readed);
      SearchPos:=Pos( SearchString, buff );
      if SearchPos >  0 then begin
         WriteLn( 'Substr found at pos ',
                        blockStart+SearchPos );
         break;
      end;
      if readed=buffSize then
         seek( F, ( filePos( F ) -
                    length( SearchString )));
   end;
   closeFile( F );
   FileMode := oldFileMode;
   SetLength( buff, 0 );
   if SearchPos = 0 then
      WriteLn( 'Substr not found.');
   readLn;
end.





Похожие по теме исходники

Поисковик

Поиск символа

Поиск файлов

Поиск открытых файлов

 

Findup (поиск дублей)

Дейкстра: поиск кратчайшего пути




Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте