/* split line into elements, like awk * ver0.0 * awk like な区切り規則( ホワイトスペース,カンマ区切り)で文字列を分解する * 戻値: 要素の数 * (注意) 入力文字列は破壊されます. * * char* cbuff <- 入力文字列 * char** adr <- 分解した各要素へのアドレスを渡すための配列 * char rem <- 注釈始まりの記号 * * #include * * 例) * char* buff=" xxx, yyy , zzz www ; comment"; * char* adr[99]; * int nelm=strSplit(cbuff, adr, ';'); * * adr[0] -> "xxx" * adr[1] -> "yyy" * adr[2] -> "zzz" * adr[3] -> "www" */ int strSplit(char* buff , char** adr , char rem=0) { int i , n_index; char ch, phase = 0; char* remadr; if ( rem !=0 && ( remadr = strchr( buff , rem ) ) != NULL ) *remadr = 0; i = n_index =0; // i : position in line buff while( 1 ) { ch = buff[i]; if ( strchr( " \t\n," , ch ) != NULL ) { if ( phase == 1) { buff[i] = 0; n_index++; phase = 2; // phase 1->2 } if ( ch == '\0' ) break; // end of line detection if ( ch == ',' ) { if (phase == 0 ) { buff[i] = 0; // case of phase 0->0 adr[n_index] = buff+i; n_index++; } phase = 0; // case of phase *->0 } } else if ( phase == 0 || phase == 2) { adr[ n_index ] = buff + i; phase = 1; // case of phase 0,2->1 } i++; } return n_index; }