所属: 情報棟 一覧
ITOAGN
戻る
整数型の数値データを、アラビア数字列の文字型データに変換します。
例えば、整数型の数値データ 123 (百二十三) を、文字型のデータ '123' (一・二・三) にします。
call ITOAGN(i,a,ilg)
入力変数
i : integer 型
制限: 0または正の整数であること。
出力変数
a : character 型 (character*10)
i に指定された整数型の数値データに対応するアラビア数字列の文字型データが
出力される。
ilg : integer 型
i の桁数。ただし、i=0 の場合は ilg=1 になる。
特に問題はありません。コンパイルにより作られた実行ファイルは問題なく動作するはずです。
同様の機能をもつサブルーチンを紹介します。
以下のサブルーチン ITOA3, ITOAG, ITOA1 を3つすべて使います。呼び出し方は、
call ITOA3(i,aa)
とします。ITOAG は ITOA3 内で呼び出され、ITOA1 は ITOAG 内で呼び出されます。
ITOA3 の i (integer型) は ITOAGN の i に相当します。
ITOA3 の aa (character型) は ITOAGNの a に相当しますが、ITOA3 の aa は character*3 です。
ITOA3 の サブルーチン名の最後の「3」は aa のサイズを示します。3バイト以外のサイズの
文字型変数を使う場合は、下記コードの「$」印の一つ上の行の文字を変えてください。
subroutine ITOA3(i,aa)
c $
character a*100,aa*3
c $
integer i
call ITOAG(i,a,3)
c $
aa=a(1:3)
c $
return
end
subroutine ITOAG(i,a,n)
integer i,n,k,p
character*100 a,memo
character ap*1
if (i.ge.10**n) then
write(*,*) 'ERROR: ITOA(too large): ',i
stop
end if
do 10 k=1,n
p=(mod(i,10**k)-mod(i,10**(k-1)))/(10**(k-1))
call ITOA1(p,ap)
memo=a
a=ap//memo(1:99)
10 continue
return
end
subroutine ITOA1(i,a)
integer i,j
character f(10)*1,a*1
data f(1)/'1'/,f(2)/'2'/,f(3)/'3'/,f(4)/'4'/,f(5)/'5'/
data f(6)/'6'/,f(7)/'7'/,f(8)/'8'/,f(9)/'9'/,f(10)/'0'/
if (i.eq.0) then
j=10
else
j=i
end if
a=f(j)
return
end
戻る
▲ 簡易html化ドキュメント
Copyright(C) TAKAGI-1 All rights reserved.