1.1 部分文字列を抽出する

文字列全体ではなく、文字列の一部を抽出/修正したい。例えば、固定長のレコードを読み込んで、個々のフィールドを抽出する場合など、このような処理が必要になる。

  • substrを使う方法。
$value = substr($string, $offset, $count);
$value = substr($string, $offset);

substr($string, $offset, $count) = $newstring;
substr($string, $offset, $count, $newstring);
substr($string, $offset) = $newtail;
  • unpackを使う方法
# 5バイト文字列を取り出し、3バイトスキップし、
# 2つの8バイト文字列を取り出し、残りの文字列を取り出す。
# (注意: 処理できるのはASCIIデータのみで、Unicodeデータは処理できない)
($leading, $s1, $s2, $trailing) = 
    unpack("A5 x3 A8 A8 A*", $data);

# 5バイトの境界で分割する。
@fivers = unpack("A5" x (length($string)/5), $string);

# 文字列を個々の1バイト文字に分割する。
@chars = unpack("A1" x length($string), $string);