Windows環境で実行させて、結果をLinux環境に送り別の処理をする。
例えば、前日に新規登録されたデータだけを、翌日に抽出する場合。
Linux環境では、localtime_rで比較的簡単に日付指定の文字列を作れる。
ところが、Windows環境のMinGWは基本的にWindowsに依存しているので、
同じgccを使っても、localtime*は使用できない。
gccでも、違うんだぁ
Msys MinGWは、その環境で作った実行モジュールをWindowsのコマンドプロンプトで実行できない。
それをするなら、MinGWだけをインストールする必要がある。
MinGW | Minimalist GNU for Windows
でも、MinGWはWindowsに依存しているのでLinuxとの違いが発生する。
多分、今回のlocaltime*だけだと思うけど、、、
まぁ、やるといろいろ起こります。勉強勉強
で、今回のソースをドーンと
Peace!!
SQL*Plusを起動するバッチ
@ECHO OFF
:START
ECHO ---------------------------------------------------
ECHO 前日新規に登録された品目情報を出力します。
ECHO ---------------------------------------------------
CD %~dp0
DEL hinsabun.csv
hinsabun.exe > hinsabun.sql
@ECHO SQLを実行中です。しばらくお待ち下さい..
@ECHO -------------------------------
sqlplus /nolog @"hinsabun.sql" USER PASSWORD 192.168.XXX.XXX/ORCL
@ECHO -------------------------------
@ECHO 完了しました。
EXIT
localtime_r を使わない処理
#include <stdio.h>
#include <string.h>
#include <time.h>
#define PRS(A) printf("%s\n", A)
char *mn[]= {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int main(int argc, char* argv[]){
char szTime[15];
char szBuf[256], szBuf1[64];
char szMn[4], szDmy[10];
int n = 1, iDay, i, iMn, iYr;
struct tm tm;
time_t t;
time(&t);
t -= (86400 * n);
strcpy(szBuf1, ctime(&t));
strcpy(szDmy, strtok(szBuf1, " "));
strcpy(szMn, strtok(NULL, " "));
iDay = atoi(strtok(NULL, " "));
strcpy(szDmy, strtok(NULL, " "));
iYr = atoi(strtok(NULL, " "));
for (i = 0; i < 12; i++) {
if (strcmp(szMn, mn[i]) == 0){
iMn = i + 1;
break;
}
}
sprintf(szTime, "%04d%02d%02d", iYr, iMn, iDay);
//localtime_r(&t, &tm);
//sprintf(szTime, "%04d%02d%02d%02d%02d%02d",
// tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
// tm.tm_hour, tm.tm_min, tm.tm_sec);
//sprintf(szTime, "%04d%02d%02d",
// tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
PRS("connect &&1/&&2@&&3");
PRS("spool off");
PRS("set echo off");
PRS("set heading off");
PRS("set termout off");
PRS("set pause off");
PRS("set pagesize 0");
PRS("set linesize 10000");
PRS("--set trimout on");
PRS("set trimspool on");
PRS("set feedback off");
PRS("set verify off");
PRS("set colsep '|'");
PRS("spool hinsabun.csv");
sprintf(szBuf, "SELECT ITEM_CD, ITEM_DIV, ITEM_NAME1, ITEM_NAME2, STD_UNIT, STD_UNITPRICE, UNIT2, UNIT_CONV_RATE,ITEM_NAME4,REGIST_DATE, UPDATE_DATE from DFW_M040M where REGIST_DATE >= to_date('%s', 'yyyymmdd');", szTime);
PRS(szBuf);
PRS("spool off");
PRS("exit");
return 0;
}
0 件のコメント:
コメントを投稿