移動量の指定
正はデータ終端に向けて(read ステートメントと同じ方向)、負はデータ先頭側に向けて移動します。指定しなかった場合は 1 が適用されます。
動作例 1.
data 1,2,3,4,5,6,7,8,9
skip 開始位置から右に 1 要素移動。"skip 1" と同じ
read a 2 を読み込む
動作例 2.
data 1,2,3,4,5,6,7,8,9
skip 8 開始位置から右に 8 要素移動
read a 9 を読み込む
動作例 3.
data 1,2,3,4,5,6,7,8,9
read a 1 を読み込む。位置は 2 に移動
skip -1 現在位置から左に 1 要素移動
read a もう一度 1 を読み込む
data ステートメントが複数行に分かれていても、動作は同じです。
data 1
data 2
skip
read a 2 を読み込む
read による読み飛ばし処理との違い
read ステートメントは読み込む時に対象のデータを計算しますが、skip は位置を移動する際、データの計算を行いません。
例.
n = 3
data 1/(1-n), 1/(2-n), 1/(3-n), 1/(4-n), 1/(5-n)
# 読み込む位置まで移動
for i = 1 to 4
read v : # 読み飛ばし
next
read v :# 1/(5-n) を計算
この例では、3 番目のデータでゼロ除算になってしまいます。
n を一時的にエラーにならない数値に変更してから処理を実行すれば、ゼロ除算を起こしませんが、次のように for ループを skip へ変更する事でもエラーを回避する事ができます。
n = 3
data 1/(1-n), 1/(2-n), 1/(3-n), 1/(4-n), 1/(5-n)
skip 4
read v :# 1/(5-n) を計算
skip ステートメントへの置き換えは、処理を簡単にする事ができるだけでなく、読み飛ばす時に発生する余計な計算を除く事ができるので、効率的な処理を構成する事ができます。
エラー
skip は read の現在位置(次の動作で読み込む場所)を移動するので、移動後の位置が存在するデータの位置になければエラーになります。
data 1
skip 1 :# エラーになる
上記の場合、移動後の位置がデータの終端になってしまうので、エラーになります。
data 1,2
skip 1 :# エラーにならない。移動後は 2 の位置になる
移動量が負の場合も同様です。
data 1,2,3,4,5,6,7,8,9
skip -1 :# データ開始位置を超えるのでエラー
また、data が存在しない状態で skip を動作させるとエラーになります。