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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 14:12   #1
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию удаление байтов

Доброго дня. Ай нид хэлп. Такой вопрос появился:
есть ли функция, аналогичная pos() для строк, но оперирующая с байтами?
Ситуация:В своей проге я из буфера COM-порта принимаю байты, приходящие с внешнего устройства: b:=com1.getbyte;//b:byte
Потом я их в worde отображаю.
Но среди принимаемых байт содержится некий набор букв 'АВС', который среди этих байт может оказаться ГДЕ УГОДНО. От последовательности букв 'АВС' мне и надо избавиться.

Последний раз редактировалось varelik; 08.12.2009 в 14:25.
varelik вне форума Ответить с цитированием
Старый 08.12.2009, 14:24   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

эм... а вы случаем отображаете не hex- варианты ? (ибо a b c це числа)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 14:33   #3
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

raxp, да да.
вобщем, пример:
Код:
АВС JKKJHK ABC 7979
GG545657667
ABC
Итого, 'АВС' мне надо убрать, а все остальное отобразить в Word.
varelik вне форума Ответить с цитированием
Старый 08.12.2009, 14:43   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ну, раз итог у вас в строке, то для поиска таже pos и delete для удаления... но никто не мешает убрать числа $a $b $c до преобразования... например если берете отсюда b:=com1.getbyte; - так и проверьте, что if (b <> $a) and (b <> $b) and (b <> $c) или через in
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 14:54   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
аналогичная pos() для строк, но оперирующая с байтами?
Можно байты эти в строку пихнуть, и pos будет с ними как с символами работать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.12.2009, 15:00   #6
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Вобщето не так все просто, на самом деле чуть ошибся:
Код:
АВС JKKJHK ABC 7979
АВ545657667
ABC
во 2й строке: АВ545657667.
если я изначально сделаю if (b <> $a) and (b <> $b) and (b <> $c), то во
2й строке получу: 545657667, а надо: АВ545657667.
т.е. мне именно ПОСЛЕДОВАТЕЛЬНОСТЬ букв 'АВС' надо убрать.
И еще: в Word (в одной из процедур) я отображаю так:
keypress(b); где b:byte.
Сама процедура keypress:
Код:
procedure tform1.keypress(b:byte);
----
begin
if ((b=$45) or (b=$36) or и т.д.) then begin
vk:=b;
keybd_event(vk,scan,flags,extrainfo);
----
end;

Последний раз редактировалось varelik; 08.12.2009 в 15:08.
varelik вне форума Ответить с цитированием
Старый 08.12.2009, 15:05   #7
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Stilet,Если в строку пихну типа так: вместо keypress(b);
напишу: n:=n+chr(b);
keypress(strtoint(n));
ошибку выдаст:
'A' is not valid of integer value
varelik вне форума Ответить с цитированием
Старый 08.12.2009, 15:07   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

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

Цитата:
во 2й строке: АВ545657667.
если я изначально сделаю if (b <> $a) and (b <> $b) and (b <> $c), то во
2й строке получу: 545657667, а надо: АВ545657667.
дык, оставьте проверку на $c до преобразования или используйте pos на символ "c" после преобразования в строке и delete найденной позиции.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 15:13   #9
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

не, не совсем так. Если непонятно излагаю мысль, извиняюсь (подустал).
Еще раз:
из
Код:
АВС JKKJHK ABC 7979
АВ545657667
ABC
должно получиться:
Код:
JKKJHK  7979
АВ545657667
Как (если можно) написать, что если КАКИЕ-ЛИБО БАЙТЫ ИДУТ ПОДРЯД, наподобие:
if (b=$45+$46) //это конечно неправильно
..........
то выполнять 'определенное действие' ?

Последний раз редактировалось Stilet; 09.12.2009 в 10:20.
varelik вне форума Ответить с цитированием
Старый 08.12.2009, 19:25   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вот то-что вы хотите...
Код:
var s: string;
    i: integer;
    p: boolean;
begin
 //
 s:= 'ABC JKKJHK ABC 7979 AB545657667 ABC';
 p:= true;

 while (p) do begin // удаление комбинации ABC из строки
  i:= pos('ABC', s);
  //memo1.Lines.Add(inttostr(i));
  if i>0 then delete(s,i,3);
  if i=0 then p:= false
 end;
 caption:= s
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные из буфера обмена в виде массива байтов eda Microsoft Office Excel 10 12.08.2009 17:00
Програмка по выделению и замене байтов florion Помощь студентам 1 28.02.2009 00:00
извлечение битов из байтов... WinApi Помощь студентам 4 10.11.2008 15:14
FileStream. Как узнать сколько байтов в Read и Write надо написать? Манжосов Денис :) Помощь студентам 2 24.10.2008 08:29
Строка символов в виде байтов Blondinka Общие вопросы Delphi 17 14.09.2007 19:06