アットウィキロゴ

fixlog.c

#include  <stdio.h>
#include  <stdlib.h>
#include  <string.h>
#include  <strings.h>
#include  <unistd.h>

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

void makeOutfileName(char*, char*);
 
static char sccsid[] = "@(#)fixlog      1.0     2006/02/07";
 
int main(int argc, char* argv[])
{
  FILE*  fp;
  FILE*  fp2;
  char   buffer[BUFFER_SIZE];
  char   workbuf[BUFFER_SIZE];
  char*  wk_str;
  char*  wk_str2;
  int    wk_char;
  char   workFile[64];
  int    flg=0;
  int    chkflg=0;
  long   bkup;
 
 
  if(argc > 2 ) {
    printf("Usage : %s   FixEngine logfile (..._FIX)\n", argv[0]);
    printf("      : %s < FixEngine logfile (..._FIX)\n", argv[0]);
    return(rNG);
  }
 
  if(argc == 2 && !strcmp(argv[1], "-h") ){
    printf("Usage : %s   FixEngine logfile (..._FIX)\n", argv[0]);
    printf("      : %s < FixEngine logfile (..._FIX)\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 ( strstr(buffer, "-----------" ) ) {
       fprintf(fp2, "\n%s", buffer);
       continue;
    }
    if ( strstr(buffer, "DIRECTION" ) ) {
       fputs(buffer, fp2);
       continue;
    }
    if ( strstr(buffer, "DATA:" ) ) {
       continue;
    }
/*****************************************************************************
bufferの中身は、
     0050: 30 36 30 32 30 35 2d 32 32 3a 33 32 3a 33 39 01 : 060205-22:32:39
こんな感じなので、
  ":" を2個とばして、そのあとの文字の先頭にポインタをもっていき、
  行末の余白と改行を削除して、ファイルに出力する
*****************************************************************************/
    wk_str=strchr(buffer,  ':');
    wk_str2=strchr(++wk_str, ':');
    ++wk_str2;
    strcpy(workbuf, ++wk_str2);
        wk_str=strchr(workbuf, '\n');
    *wk_str=NULL;
/******************
        if (  wk_str=strstr(workbuf, "  ") ) {
      *wk_str=NULL;
     }
******************/
    fputs(workbuf, fp2);
  }
 
  fclose(fp);
  fclose(fp2);
}
 
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年07月19日 09:59
ツールボックス

下から選んでください:

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