четверг, 10 ноября 2011 г.

Как вырезать кусок строки от одной метки до другой?


  const char *p = "метка1ТекстСообщения 123 метка2"
  p = strstr(text, "метка1");
  if(p)
  {
    p += sizeof("метка1");
    for(; *p == ' ' || *p == '\t'; ++p);
    const char *p1 = strstr(p, "метка2");
    if(p1)
      true;//Если указатель не нулевой, то часть сообщения была успешно скопирована в p1
  }

среда, 23 марта 2011 г.

Как пользоваться ком портом(Com port) в C++ Builder

Обмениваться данными через Com порт можно при помощи функций CreateFile, WriteFile. Например так:
HANDLE hCOM=CreateFile(
"\\\\.\\COM1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hCOM!=INVALID_HANDLE_VALUE)
{
cout << "COM1 is open OK!" << endl;
char buffer[30];
memset(buffer,0,sizeof(buffer));
strcpy(buffer,"SAVE TO COM1");
DWORD nb;
OVERLAPPED ov;
WriteFile(hCOM,buffer,sizeof(buffer),&nb,&ov);
CloseHandle(hCOM);
}
Если указать "COM1", вместо "\\\\.\\COM1" выбор номера ком порта будет ограничен (1-9).
Самый удобный способ работы с com портом - компонент для C++ Builder
Slydiman Commport. Изначально разработан для Builder 5,6. Но с небольшими доработками может быть установлен в CodeGear RAD Studio Builder 2010.
Для этого необходимо:
В меню   Builder 2010 выбираем File -> open и выбираем фаил Comm.bpk, нам предложат улучшить  проект (Upgrading Project)  
Нажимаем OK.
Затем для открытого проекта делаем Build.

Проект не смог откомпилироваться, поскольку со времен Builder 6.0 произошли некоторые изменения. 

Для успешной сборки необходимо внести некоторые правки:
В файле CommPort.cpp необходимо поменять сточку
Application->MessageBox("Can't open COM port", "COM port error", MB_OK | MB_ICONSTOP );
на
Application->MessageBox(L"Can't open COM port", L"COM port error", MB_OK | MB_ICONSTOP );
, строчку
Application->MessageBox("Invalid combination (6,7 or 8 data bits with 1.5 stop bits)",
  "COM port warning", MB_OK | MB_ICONWARNING );
на
Application->MessageBox(L"Invalid combination (6,7 or 8 data bits with 1.5 stop bits)",
  L"COM port warning", MB_OK | MB_ICONWARNING ); 

, строчку
Application->MessageBox("Invalid combination (5 data bits with 2 stop bits)",
  "COM port warning", MB_OK | MB_ICONWARNING );
на
if( FStopBits == sb2_0 )
Application->MessageBox(L"Invalid combination (5 data bits with 2 stop bits)",
L"COM port warning", MB_OK | MB_ICONWARNING );


 Повторное построение пройдет с небольшим колличеством предупреждений(warning).
 Затем устанавливаем созданный компонет, для етого необходимо выбрать Component -> Install Packages... -> Add...
Здесь необходимо выбрать созданный фаил Comm.bpl
После чего в списке установленных компонентов появится  наш компонент.

Воспользоваться им можно если выбрать его в Tool Pallete и кинуть на форму
Теперь можно с ним работать


четверг, 17 марта 2011 г.

Сишные штуки

Иногда необходимо выбрать больший элемент из двух представленных, можно записать так
 int res = value1;
if (value1 < value2)
    res = value2;
Но выглядит громоздко.
Всё записывается гораздо проще и в одну строчку
int res = (value1 < value2) ? value2 : value1;
Всем привет. Пишет Василий Юрьевич из славного города Бердска, что находится недалеко От Новосибирского Академгородка.