N88BASICとperlの順にサンプルプログラムを並べて記述しています。
7.1.算術関数
X=1.73205 $x = 1.73205; I=INT(X) $i = int($x); PRINT I print "$i\n"; 1
RND(3) rand(6)
RANDOMIZE 3 srand(6)
7.2.変換関数
一部perlのみ説明します。
$a = "ff"; $x = hex($a); print "$x\n"; 255
A$=HEX$(97) $a = sprintf("%2x",97); PRINT A$ print "$a\n"; A$=HEX$(ASC("a")) $a = sprintf("%2x",ord("a")); PRINT A $print "$a\n"; 61 61
1996年10月5日13時20分30秒 土曜日
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime(time); $mon++; print "$year/$mon/$mday $hour:$min:$sec $wday\n"; 96/10/5 13:20:30 6
$a = "15"; $x = oct($a); print "$x\n"; 13
$a = "abc"; $x = ord($a); print "$x\n"; 97 aは(61)16
7.3.文字列関数
A$="abcdefg" $a = "abcdefg"; A$=LEFT$(A$,LEN(A$)-1) chop($a); PRINT A$ print "$a\n"; abcdef
A$="abcdefg" $a = "abcdefg"; I=INSTR(A$,"d") $i = index($a,"d"); PRINT I print "$i\n"; 4 3
A$="abcdefg" $a = "abcdefg"; I=LEN(A$) $i = length($a); PRINT I print "$i\n"; 7
X$="1234" $x = "1234"; A$=LEFT$(X$,3) $a = substr($x,0,3); #文字の最初は0番目 PRINT A$ print "$a\n"; 123
X$="1234" $x = "1234"; A$=MID$(X$,2,1) $a = substr($x,1,1); #文字の最初は0番目 B$=MID$(X$,3) $b = substr($x,2); #位置から最後まで PRINT A$ print "$a\n"; PRINT B$ print "$b\n"; 2 34
X$="1234" $x = "1234"; A$=RIGHT$(X$,2) $a = substr($x,-2); #右から2桁目の位置から最後まで PRINT A$ print "$a\n"; 34
I=3 $i = 3; X$=RIGHT$("0000"+MID$(STR$(I),2),4) $x = substr("0000$i",-4); PRINT X$ print "$x\n"; 0003
7.4.配列関数とリスト関数
perlのみ説明します。
@x = (10,20,30,40,50)があらかじめ設定されているとして説明します。
$y = join(".",@x); print "$y\n"; 10.20.30.40.50
pop(@x); foreach (@x) { print "$_,"; } 10,20,30,40,
$a = 60; push(@x,$a); foreach (@x) { print "$_,"; } 10,20,30,40,50,60,
foreach (reverse(@x)) { print "$_,"; } 50,40,30,20,10,
shift(@x); foreach (@x) { print "$_,"; } 20,30,40,50,
splice(@x,1,2); foreach (@x) { print "$_,"; } 10,40,50, splice(@x,2); foreach (@x) { print "$_,"; } 10,20,
$x = "u3001.orange.or.jp"; ($ip1,$ip2,$ip3,$ip4) = split('\.',$x); print "$ip2\n"; orange
$a = 70; unshift(@x,$a); foreach (@x) { print "$_,"; } 70,10,20,30,40,50,
7.5.ファイル操作
A$="PERLLIB" $a = "perllib"; CHILD "MD "+A$ mkdir($a,0755);
A$="PROG1.TXT" $a = "prog1.txt"; B$="PROG1.BAK" $b = "prog1.bak"; CHILD "REN "+A$+" "+B$ rename($a,$b);
A$="PERLLIB" $a = "perllib"; CHILD "RD "+A$ rmdir($a);
A$="TEST.PL" $a = "test.pl"; KILL A$ unlink($a);
7.6.ファイル入出力
OPEN "COUNT.TXT" AS #1 open(IN,"count.txt"); CLOSE #1 close(IN);
1000 OPEN "COUNT.TXT" FOR INPUT AS #1 open(IN,"count.txt"); 1010 IF EOF(1) THEN CLOSE:END while(!eof(IN)) { 1020 LINE INPUT #1,A$ chop($a = <IN>); 1030 PRINT A$ print "$a\n"; 1040 GOTO 1010 } close(IN);
open(ML,"|/usr/bin/mail -s 'Hello!' pingu@foo.co.jp"); print ML <<EOF; Dear kibitaro EOF close(ML);
read(STDIN,$dat,$ENV{'CONTENT_LENGTH'});
A=10 $a = 10; B$="ab" $b = "ab"; PRINT USING "[### @ @]";A,B$ $x = sprintf("[%3d %3s]",$a,$b); print "$x\n"; [ 10 ab ] [ 10 ab] 文字列は右詰め 1996年10月5日13時20分30秒のとき ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime(time); $year += 1900; $mon++; $date = sprintf("%04d/%02d/%02d %02d:%02d", $year,$mon,$mday,$hour,$min); print "$date\n"; 1996/10/05 13:20
%m.nx
mはフィールドの長さ,nは指数表示の場合の長さ,xはフィールドタイプ
s:文字列, c:文字, d:10進数, x:16進数, o:8進数, e:指数形式, f:固定小数点形式など
数値の場合,mの前に0を書くと桁数分を0でパディング(埋め合わせ)する
%04d 値が12だと0012 1だと0001
7.7.ファイルテスト演算子
perlのみ説明します。
演算子 | 内容 | サンプル |
---|---|---|
-e | ファイルがある | if (-e $file) { print "有り\n"; } if (!(-e $file)) { print "無し\n"; } |
-z | ファイルの大きさが0である | if (-z $file) { print "サイズ0\n"; } |
-s | ファイルがあり大きさが0でないときサイズを返す | $s = -s $file; print "SIZE=$s Bytes\n"; |
-M | ファイルの内容が最後に変更されてからの日数 | $u = -M $file; |
-A | ファイルが最後にアクセスされてからの日数 | $r = -A $file; |
ファイルの内容が最後に変更された日時を求めるには
-rw-r--r-- 1 kibita users 4219 Oct 3 20:05 RMAIL $file = "RMAIL"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime(time - (-M $file) * 24 * 3600); $mon++; print "$year/$mon/$mday $hour:$min:$sec\n"; 96/10/3 20:5:52
7.8.システム呼び出し
A$="FILEA" $a = "filea"; CHILD "TYPE "+A$ system("cat $a");
Copyright (c)1996-99 GOMASUKE
Since 09/15/1996, Last Updated 01/10/1999