SPLIT関数が直ったかどうか、コマンドにして確認してみます。
takk@deb9:~$ cat split3.f PROGRAM MAIN CHARACTER*100 ARGS CALL GETARG(1,ARGS) IF(ARGS(1:2).EQ.'-b') THEN CALL B_OPT(ARGS(3:)) END IF STOP END SUBROUTINE B_OPT(B_OPT_STRING) CHARACTER*100 B_OPT_STRING CHARACTER*100 SSTRING1(10),SSTRING2(10) INTEGER I,SSIZE1,SSIZE2 WRITE(*,*) B_OPT_STRING CALL SPLIT(B_OPT_STRING,',', SSTRING1,SSIZE1) WRITE(*,11100) SSIZE1 DO 10100 I=1,SSIZE1 WRITE(*,11300) SSTRING1(I) CALL SPLIT(SSTRING1(I),'-', SSTRING2,SSIZE2) WRITE(*,11200) SSIZE2 10100 CONTINUE 11100 FORMAT('SSIZE1=',I3) 11200 FORMAT(' SSIZE2=',I3) 11300 FORMAT(' STRING:',A) STOP END SUBROUTINE SPLIT(SRC,SEP,DEST,SPLIT_SIZE) CHARACTER*100 SRC CHARACTER*1 SEP CHARACTER*100 DEST(10) INTEGER IND,S1,S2,RSLT,SPLIT_SIZE IND = 0 S2=-1 I = 1 20100 RSLT = INDEX(SRC(IND+1:),SEP) IF(RSLT.NE.0) THEN S1 = IND+1 IND = IND + RSLT S2 = IND-1 DEST(I) = SRC(S1:S2) I = I + 1 GOTO 20100 END IF DEST(I) = SRC(S2+2:) SPLIT_SIZE = I RETURN END takk@deb9:~$
使い方は、cutコマンドの-bオプションを指定するように./a.out -bの後に文字列を指定すればよいです。
テスト用のスクリプトを組みます。テスト内容は適当です。
takk@deb9:~$ cat split3-test.f cmd=./a.out $cmd -b1 echo $cmd -b5 echo $cmd -b1,2 echo $cmd -b1,3,5 echo $cmd -b2,4,5 echo $cmd -b1-2 echo $cmd -b2-5 echo $cmd -b1-2,3 echo $cmd -b1,2-4,5 echo $cmd -b1-3,4-5 echo takk@deb9:~$
スクリプト実行の結果に文字列のサイズ分空白で出てしまって見にくいので、空白はすべてtrでカットして実行しました。
takk@deb9:~$ . split3-test.sh | tr -d ' ' 1 SSIZE1=1 STRING:1 SSIZE2=1 5 SSIZE1=1 STRING:5 SSIZE2=1 1,2 SSIZE1=2 STRING:1 SSIZE2=1 STRING:2 SSIZE2=1 1,3,5 SSIZE1=3 STRING:1 SSIZE2=1 STRING:3 SSIZE2=1 STRING:5 SSIZE2=1 2,4,5 SSIZE1=3 STRING:2 SSIZE2=1 STRING:4 SSIZE2=1 STRING:5 SSIZE2=1 1-2 SSIZE1=1 STRING:1-2 SSIZE2=2 2-5 SSIZE1=1 STRING:2-5 SSIZE2=2 1-2,3 SSIZE1=2 STRING:1-2 SSIZE2=2 STRING:3 SSIZE2=1 1,2-4,5 SSIZE1=3 STRING:1 SSIZE2=1 STRING:2-4 SSIZE2=2 STRING:5 SSIZE2=1 1-3,4-5 SSIZE1=2 STRING:1-3 SSIZE2=2 STRING:4-5 SSIZE2=2 takk@deb9:~$
いわゆるprintfデバッグというものでしょう。 結果も見にくいですが、一応合ってそうです。