strtok 関数は文字列の句(トークン)を切り出す便利な関数である。
RPG の開発者にも是非、覚えておいて頂きたい関数であり、RPG の中からも
使用することができる。
C言語のマニュアルのよくあるサンプルでは
char* str = "TOM MARRY JOHN";
char* tokenPtr;
tokenPtr = strtok(str, " ");
while(tokenPtr != NULL){/*while*/
printf("token = %s\n", tokenPtr);
tokenPtr = strtok(NULL, " ");
}/*while*/
のように利用すると
token = TOM token = MARRY token = JOHN
のようにして字句(トークン) に分割することができる、という解説である。
それでは、これを何に応用するのかというと、ブラウザからの入力値をパースすることである。
ブラウザからの入力値は
変数1=値1 & 変数2=値2 & , .......
のようにして文字 & (アンパサンド) によって結合されているので、これを分割するのには
非常に役に立つことになる。
以下のパースのサンプル・ソースを紹介する。
【 サンプル 】
0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00
0005.00 void main(void){
0006.00 char buff[128];
0007.00 char* tokenPtr;
0008.00 int pos;
0009.00
0010.00 printf("** TESTTOK1 **\n");
0011.00 getchar();
0012.00 memset(buff, 0, sizeof(buff));
0013.00 strcpy(buff, "SHCODE=0001&SHNAME=NV-CF1&&SHTANK=12000");
0014.00 printf("buff = %s\n", buff);
0015.00
0016.00 tokenPtr = strtok(buff, "&");
0017.00 while(tokenPtr != NULL){/*while*/
0018.00 printf(" =>TOKEN = %s\n", tokenPtr);
0019.00 tokenPtr = strtok(NULL, "&");
0020.00 }/*while*/
0021.00 printf("**** END OF TOKEN ***\n");
0022.00 getchar();
0023.00 }
【 実行結果 】
** TESTTOK1 ** > buff = SHCODE=0001&SHNAME=NV-CF1&&SHTANK=12000 =>TOKEN = SHCODE=0001 =>TOKEN = SHNAME=NV-CF1 =>TOKEN = SHTANK=12000 **** END OF TOKEN ***
