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 ***