Member 14684448 Ответов: 2

Как написать API для хранения различных полей в формате сообщения?


у меня был формат сообщения как
+CMGL: 1,"REC UNREAD","+31628870634",,"11/01/09,10:26:26+04"
This is text message 1
+CMGL: 2,"REC UNREAD","+31628870634",,"11/01/09,10:26:49+04"
This is text message 2
OK


после хранения я хочу указать номер телефона и текстовое сообщение.

Что я уже пробовал:

я попробовал с функцией strtok.я храню все в одном буфере, но не получаю номер телефона и текстовое сообщение отдельно. я хочу и то и другое для проверки

2 Ответов

Рейтинг:
1

Richard MacCutchan

Если Вы читаете строки одну за другой, то вы должны быть в состоянии извлечь номер телефона с помощью strtok (или лучше использовать strtok_s). Как только вы извлекли это, следующая строка-текстовое сообщение. Маркер "+CMGL" идентифицирует линию, содержащую номер телефона, так что вы можете легко отключить его.


Рейтинг:
0

CPallini

Попробуйте (сделать код надежным-это упражнение).
Примечание: используйте stdin перенаправление, например

myprogram.exe < my_input_file.txt


#include <stdio.h>
#include <string.h>

struct Record
{
  char phone[0x20];
  char text[0x100];
};

int get_phone(char * buffer, struct Record * precord);

int main()
{

  int n;

  char line[0x100];
  struct Record record;

  for(n=0;  ; ++n)
  {
    if ( ! fgets( line, sizeof(line), stdin) )
      break;
    if ( get_phone( line, &record) )
      break;

    if ( ! fgets( line, sizeof(line), stdin) )
      break;

    strcpy( record.text, line);

    printf("record %d: \n", n);
    printf("phone: %s\ntext: %s\n", record.phone, record.text);
  }

  return 0;
}

int get_phone(char * buffer, struct Record * precord)
{
  int n;
  char * cur, * prev;
  cur = strtok(buffer, ",");
  if ( !cur) return -1;
  for ( n=0; n<3; ++n)
  {
    prev = cur;
    cur = strtok(NULL, ",");
    if (! cur) return -1;
  }

  strcpy( precord->phone, prev);
  return 0;
}