アットウィキロゴ

makeTestData.c

/********************************************************************************************
 .._rcvfix.log から、Fixテスターで使用するテストデータ(.csv)を作成する
********************************************************************************************/
 
#include  <stdio.h>
#include  <stdlib.h>
#include  <string.h>
#include  <strings.h>
#include  <unistd.h>
#include  <ctype.h>

#define  rOK          0
#define  rNG         -1
#define  BUFFER_SIZE  1024

void makeOutfileName(char*, char*);
void getValue(char*, FILE*);
void removeTextComma(char*);
 
static char sccsid[] = "@(#)makeTestData        1.0     2006/02/21";
 
int main(int argc, char* argv[])
{
  FILE*  fp;
  FILE*  fp2;
  char   buffer[BUFFER_SIZE];
  char*  wk_str;
  char   workFile[64];
 
 
  if(argc > 2 ) {
    printf("Usage : %s   FixGW logfile (..._rcvfix.log)\n", argv[0]);
    printf("      : %s < FixGW logfile (..._rcvfix.log)\n", argv[0]);
    return(rNG);
  }
 
  if(argc == 2 && !strcmp(argv[1], "-h") ){
    printf("Usage : %s   FixGW logfile (..._rcvfix.log)\n", argv[0]);
    printf("      : %s < FixGW logfile (..._rcvfix.log)\n", argv[0]);
    return(rNG);
  }
 
  if(argc == 1){
    fp = stdin;
  } else{
    if ( (fp = fopen(argv[1], "r")) == NULL ) {
      printf("Error : %s open() failed.\n", argv[1]);
      return(rNG);
    }
  }
  if(argc == 1){
    fp2 = stdout;
  } else {
    makeOutfileName(argv[1], workFile);
    printf("output file : [%s]\n", workFile);
    if ( (fp2 = fopen(workFile, "w")) == NULL ) {
      printf("Error : %s open() failed.\n", workFile);
      return(rNG);
    }
  }
 
 
  while(fgets(buffer, BUFFER_SIZE, fp)){
    if ( wk_str=strchr(buffer, '\n') ) {
       *wk_str=NULL;
    }
    removeTextComma(buffer);
    wk_str=strtok(buffer, ",");
    getValue(wk_str, fp2);
    while ( wk_str=strtok(NULL, ",") ) {
      if ( strstr(wk_str, "(49)") || strstr(wk_str, "(56)") ||
           strstr(wk_str, "(9174)") || strstr(wk_str, "(34)") ||
           strstr(wk_str, "(52)")
         ) continue;
       fputc(',', fp2);
       getValue(wk_str, fp2);
    }
    fputc('\n', fp2);
  }
  fclose(fp);
  fclose(fp2);
}
 
/**********************************************************************
 *  注文コメントText(58) 内に","があった場合、めちゃくちゃになるので *
 *  前もって削除する関数                                              *
 *********************************************************************/
void removeTextComma(char* buf) {
    char *wk_str;
    char *wk_str2;
    char *wk_str3;
    char *wk_str4;
    char wk_buf[128];
    int  endflg=0;
 
    memset(wk_buf, NULL, sizeof(wk_buf));
 
   if ( wk_str=strstr(buf, "(58)" ) ) {
        wk_str2=strstr(wk_str, "=");
        if ( (wk_str3=strstr(++wk_str2, ",")) == NULL )
            return;
        while (1) {
            if ( (wk_str4=strstr(++wk_str3, ",")) == NULL ) {
                 strcpy(wk_buf, wk_str3);
                 endflg=1;
            } else {
                 strncpy(wk_buf, wk_str3, wk_str4 - wk_str3);
            }
            if ( strstr(wk_buf, ")=") ) {
               break;
            }
            *(--wk_str3)=' ';
            if ( endflg == 1 ) {
               break;
            }
            wk_str3=wk_str4;
        }
    }
    return;
}
 
void getValue(char* buf, FILE* fp2)
{
    int i=0;
    char *wk_str;
 
 
    for ( i=0 ; buf[i] != '(' ; i++ ) ;
 
    for ( ; buf[i] != NULL ; i++ ) {
      if ( isdigit(buf[i]) ) {
        fputc(buf[i], fp2);
      }
      if ( buf[i] == '=' ) {
        fputc(',', fp2);
        i++;
        fprintf(fp2, "%s", buf+i);
        return;
      }
    }
}
 
void makeOutfileName(char* argv, char* workFile)
{
  char* ptr;
  if ( (ptr=strrchr(argv, '/')) != NULL ) {
     strcpy(workFile, ++ptr);
  } else {
     strcpy(workFile, argv);
  }
  strcat(workFile, ".log");
  return ;
}
最終更新:2007年09月28日 11:26
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。