揮発性のメモ2

http://d.hatena.ne.jp/iww/

sscanfは空白文字で区切られる

Cのときと同じく、%sホワイトスペース以外を意味するので、Cのときと同じように対処する

#!/usr/bin/php -q
<?
    $t="123 45 67890";

//  a='123 45',b=' 67',c='890' を期待している
    sscanf( $t, "%6s%3s%3s", $a, $b, $c );
    print("a='$a', b='$b', c='$c'\n");

//  とりあえず対象文字を「改行以外」にしてみる
    sscanf( $t, "%6[^\n]%3[^\n]%3[^\n]", $a, $b, $c );
    print("a='$a', b='$b', c='$c'\n");
?>
$ ./sscanf.php
a='123', b='45', c='678'
a='123 45', b=' 67', c='890'
#!/usr/bin/php -q
<?
    $t="123 45 67890";

    list( $a,$b,$c ) = bunkatsu( $t, 6,3,3 );
    print("a='$a', b='$b', c='$c'\n");


    // ★文字列を分割する
    function bunkatsu( /* $text, $num, $num, $num, ... */ )
    {
        $arglist = func_get_args();
        $text = array_shift( $arglist );
        
        $start=0;
        $arr = array();
        foreach( $arglist as $length ){
            $arr[] = substr( $text, $start, $length );
            $start += $length;
        }
        
        return $arr;
    }
?>