/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 縲先ゥ溯�讎りヲ√� : 蜈ア譛峨Γ繝「繝ェ讀懃エ「逕ィWHERE蜿・隗」譫�/邱ィ髮�API 蜈ア譛峨Γ繝「繝ェ螳夂セゥ繝輔ぃ繧、繝ォ縺ョ險倩ソー蜀�ョケ繧定ァ」譫舌@縺ヲ縲∝他縺ウ蜈��繝ュ繧ー繝ゥ繝� 縺ォ蜀�ョケ繧定ソ泌唆縺吶k 縲蝉ス懈�譌・縲� : 2021.04.23 縲仙他蜃コ蠖「蠑上� : GG_SHM1003 ( char *inWhere # 隗」譫仙ッセ雎。WHERE蜿・��in�� ,char *outWhere # 邱ィ髮�オ先棡WHERE蜿・��out�� ) 縲先綾繧雁、縲� : int # 0 : 豁」蟶ク邨ゆコ� # -1 : 逡ー蟶ク邨ゆコ� # n : 逡ー蟶ク邨ゆコ�]縺ッinWhere縺ョ繧ィ繝ゥ繝シ邂�園 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include "GG_SHMCOM.h" int GG_SHM1003 ( char *inWhere , char *outWhere ) { int inPos = 0 ; int outPos = 0 ; char Ketugo [ 20 ] ; int whereStat = 0 ; /* 0 : 蟾ヲ霎コ邱ィ髮�クュ�域ッ碑シ�擅莉カ蜷ォ繧�� , 1 : 蜿ウ霎コ邱ィ髮�クュ , 2 : and/or 繧オ繝シ繝∽クュ */ memset ( Ketugo , 0x00 , sizeof(Ketugo) ) ; // 繧ケ繝壹�繧ケ縺励°險倩ソー縺ョ縺ェ縺ЦHERE蜿・縺ッ繧ィ繝ゥ繝シ邨ゆコ� for (;inPos < strlen(inWhere) ;inPos++) if ( inWhere [ inPos ] != ' ' ) break ; if ( inPos == strlen(inWhere) ) return ( -1 ) ; /* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ WHERE蜿・縺ョ隗」譫舌�邱ィ髮��逅� 蜈ア譛峨Γ繝「繝ェ繧「繧ッ繧サ繧ケ逕ィ縺ョWHERE蜿・縺ッ縲∽サ・荳九�譚。莉カ縺ァ縺ゅk蠢�ヲ√′縺ゅk 1. 蜷���岼縺ィ豈碑シ�擅莉カ縲∫オ仙粋譚。莉カ縺ッ縲∝濠隗偵せ繝壹�繧ケ縺ァ縺ゅk縺薙→ 2. 豈碑シ�擅莉カ縺ッ縲�6遞ョ��=,<,<=,>,>=,!=)縺ョ縺�★繧後°縺ァ縺ゅk縺薙→ 3. 邨仙粋譚。莉カ縺ッ縲�2遞ョ��and,or�峨�縺�★繧後°縺ァ縲∝�縺ヲ縺ョ邨仙粋譚。莉カ縺ッ蜷後§縺ァ縺ゅk縺薙→ 1.縺ォ縺、縺�※縺ッ縲∽ク贋ス喉P縺九i貂。縺輔l縺欷HERE蜿・繧堤キィ髮�@縺ヲ縲∵ュ」縺励>蠖「縺ォ邱ィ髮�☆繧九� 2,3.縺ォ縺、縺�※縺ッ縲∬ェ、繧翫′縺ゅ▲縺溷�エ蜷医�繧ィ繝ゥ繝シ繝ェ繧ソ繝シ繝ウ縺吶k縲� _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ for (;;) { // 蟾ヲ霎コ鬆�岼縺セ縺溘�豈碑シ�擅莉カ縺ョ蛻�梵繝サ邱ィ髮� if ( whereStat == 0 ) { if ( inWhere [ inPos ] == '=' ) { outWhere [ outPos ] = ' ' ; // 豈碑シ�擅莉カ縲�=縲阪�蜑榊セ後↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k outWhere [ outPos + 1 ] = inWhere [ inPos ] ; outWhere [ outPos + 2 ] = ' ' ; inPos ++ ; outPos += 3 ; for ( ; inPos < strlen(inWhere) ; inPos++ ) if ( inWhere [ inPos ] != ' ' ) break ; whereStat = 1 ; // 蜿ウ霎コ縺ョ髢句ァ倶ス咲スョ縺ァwhereSet=1繧定ィュ螳� } else if ( inWhere [ inPos ] == '<' || inWhere [ inPos ] == '>' ) { outWhere [ outPos ] = ' ' ; // 豈碑シ�擅莉カ縲�>縲阪�<縲阪�譎ゅ∵ッ碑シ�擅莉カ縺ョ蜑阪↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k outWhere [ outPos + 1 ] = inWhere [ inPos ] ; if ( inWhere [ inPos + 1 ] == '=' ) { outWhere [ outPos + 2 ] = inWhere [ inPos + 1 ] ;// 縲�>縲阪�<縲阪�谺。縺後�=縲阪�蝣エ蜷医√�=縲阪r縺昴�縺セ縺セ莉倅ク� inPos += 2 ; outPos += 3 ; } else { inPos ++ ; outPos += 2 ; } outWhere [ outPos ] = ' ' ; // 豈碑シ�擅莉カ縺ョ蠕後↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k outPos ++ ; for ( ; inPos < strlen(inWhere) ; inPos++ ) if ( inWhere [ inPos ] != ' ' ) break ; whereStat = 1 ; // 蜿ウ霎コ縺ョ髢句ァ倶ス咲スョ縺ァwhereSet=1繧定ィュ螳� } else if ( inWhere [ inPos ] == '!' ) { outWhere [ outPos ] = ' ' ; // 豈碑シ�擅莉カ縲�!縲阪�譎ゅ∵ッ碑シ�擅莉カ縺ョ蜑阪↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k outWhere [ outPos + 1 ] = inWhere[ inPos ] ; if ( inWhere[ inPos + 1 ] == '=' ) { outWhere [ outPos + 2 ] = inWhere [ inPos + 1 ] ;// 縲�!縲阪�谺。縺後�=縲阪�蝣エ蜷医√�=縲阪r縺昴�縺セ縺セ莉倅ク� inPos += 2 ; outPos += 3 ; } else { return ( inPos ) ; // 縲�!縲阪�谺。縺後�=縲堺サ・螟悶�譎ゅ�繧ィ繝ゥ繝シ邨ゆコ� } outWhere [ outPos ] = ' ' ; // 豈碑シ�擅莉カ縺ョ蠕後↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k outPos ++ ; for ( ; inPos < strlen(inWhere) ; inPos++ ) if ( inWhere [ inPos ] != ' ' ) break ; whereStat = 1 ; // 蜿ウ霎コ縺ョ髢句ァ倶ス咲スョ縺ァwhereSet=1繧定ィュ螳� } else if ( inWhere [ inPos ] == ' ' ) { inPos ++ ; // 荳崎ヲ√↑繧ケ繝壹�繧ケ縺ッ蜑企勁 } else { outWhere [ outPos ] = inWhere [ inPos ] ; // 蟾ヲ霎コ鬆�岼蜷咲ァー繧�1繝舌う繝医★縺、莉倅ク� inPos ++ ; outPos ++ ; } if ( inPos >= strlen(inWhere) ) return ( -1 ) ; } else // 蜿ウ霎コ鬆�岼縺ョ蛻�梵繝サ邱ィ髮� if ( whereStat == 1 ) { if ( inWhere [ inPos ] != ' ' ) { outWhere [ outPos ] = inWhere [ inPos ] ; // 繧ケ繝壹�繧ケ莉・螟悶�蛟、縺ッ蜿ウ霎コ鬆�岼繧�1繝舌う繝医★縺、莉倅ク� inPos ++ ; outPos ++ ; if ( inPos >= strlen(inWhere) ) { outWhere [ outPos ] = '\0' ; return ( 0 ) ; // inWhere繧オ繝シ繝√′螳御コ�@縺溘◆繧∵ュ」蟶ク邨ゆコ� } } else { // 繧ケ繝壹�繧ケ縺後≠縺」縺溷�エ蜷� for ( ; inPos < strlen(inWhere) ; inPos++ ) if ( inWhere [ inPos ] != ' ' ) break ; if ( inPos >= strlen(inWhere) ) { outWhere [ outPos ] = '\0' ; return ( 0 ) ; // 繧ケ繝壹�繧ケ縺九i谺。縺ョ譁�ュ怜�繧偵し繝シ繝√@縺ヲ縲√せ繝壹�繧ケ // 縺後↑縺代l縺ー縲∵ュ」蟶ク邨ゆコ� } else { whereStat = 2 ; // 繧ケ繝壹�繧ケ莉・螟悶′縺ゅl縺ー縲『hereStat=2繧定ィュ螳� } } } else // 邨仙粋譚。莉カ縺ョ蛻�梵繝サ邱ィ髮� if ( whereStat == 2 ) { char KetugoWork [ 20 ] ; int KetugoPos = 0 ; for ( ; inPos < strlen(inWhere) ; inPos++ ) { if ( inWhere [ inPos ] != ' ' ) { KetugoWork [ KetugoPos ] = inWhere [ inPos ] ; // 繧ケ繝壹�繧ケ莉・螟悶�邨仙粋譚。莉カ縺ォ1繝舌う繝井サ倅ク� KetugoPos ++ ; } else { KetugoWork [ KetugoPos ] = '\0' ; inPos ++ ; break ; // 繧ケ繝壹�繧ケ縺後≠繧後�邨仙粋譚。莉カ縺ッ邨ゅo繧� } } if ( Ketugo[0] == '\0' ) { if ( strcmp ( KetugoWork , "and" ) == 0 || strcmp ( KetugoWork , "or" ) == 0 ) { strcpy ( Ketugo , KetugoWork ) ; // 譛蛻昴�邨仙粋譚。莉カ縺ョ蝣エ蜷医゜etugo縺ォand/or繧定ィュ螳� } else { return ( inPos ) ; // and/or莉・螟悶�繧ィ繝ゥ繝シ邨ゆコ� } } else if ( 0 == strcmp ( Ketugo , KetugoWork ) ) { strcpy ( Ketugo , KetugoWork ) ; // 2蝗樒岼莉・髯阪�邨仙粋譚。莉カ縺ョ蝣エ蜷医∝�蝗槭→蜷後§縺ェ繧碓K } else { return ( inPos ) ; // 逡ー縺ェ繧狗オ仙粋譚。莉カ縺ョ蝣エ蜷医√お繝ゥ繝シ邨ゆコ� } outWhere [ outPos ] = ' ' ; // 邨仙粋譚。莉カ縺ィ蜑榊セ後�繧ケ繝壹�繧ケ繧剃サ倅ク� strcpy ( outWhere + outPos + 1 , Ketugo ) ; outWhere [ outPos + 1 + strlen(Ketugo) ] = ' ' ; outPos += strlen ( Ketugo ) + 2 ; for ( ; inPos < strlen(inWhere) ; inPos++ ) if ( inWhere [ inPos ] != ' ' ) break ; if ( inPos >= strlen(inWhere) ) return ( -1 ) ; whereStat = 0 ; // 繧ケ繝壹�繧ケ莉・螟悶′縺ゅl縺ー縲『hereStat=0繧定ィュ螳� } } }