/********************************************************************************************
.._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