このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Tanaka's osax 1.1のNumToDigitStrの使い方で

発言者:Hoashi
( Date Thursday, June 26, 1997 13:12:53 )


Tanaka's osax 1.1のNumToDigitStrを使って
整数の桁を合わせようとしているのですが、
「Can't make some data into the expected type.」という
エラーが帰ってきます。

set VR to item 3 of listA
set listB to NumToDigitStr VR Digit 12

具体的には、あるリストの中のitemを取り出して、
すべて足した後、230000になったのを、12桁に
合わせて、000000230000にしたのち、
別のリストに戻すことを行いたいのです。

このエラーが何故でるのかお願いします。

田中求之 さんからのコメント
( Thursday, June 26, 1997 15:53:30 )

以下のようなスクリプトではどうですか?

set VR to contents of item 3 of listA
set VRx to NumToDigitStr (VR as integer) Digit 12

これで VRx には VR を12桁にした文字列が(整数ではありません)収まります。
これをリストのしかるべきアイテムに埋め込むという処理になると思います。

# ListB がリスト型の変数ってことはないですよね? もしそうなら、Tanaka's
osax でなくてもエラーになりますけど。

帆足 さんからのコメント
( Thursday, June 26, 1997 17:45:46 )

うーん、おかしいなぁ、やっぱりエラーが帰ってきます。

set item10int to C10int(NewDataRecord)
  ・
  ・
  ・
on C10int(NewDataRecord)
  set item10int to contents of item 10 of NewDataRecord
  set intNum to NumToDigitStr (item10int as integer) Digit 10
  return intNum
end C10int

という風によんでいるのですが、
同じエラーがでてきます。

書き方が、悪いんだろうか・・・?

># ListB がリスト型の変数ってことはないですよね?

いいえ、リスト型ではありません。
リターンの後に元のリストに
戻していますが・・・


帆足 さんからのコメント
( Thursday, June 26, 1997 17:47:12 )

うーん、おかしいなぁ、やっぱりエラーが帰ってきます。

set item10int to C10int(NewDataRecord)
  ・
  ・
  ・
on C10int(NewDataRecord)
  set item10int to contents of item 10 of NewDataRecord
  set intNum to NumToDigitStr (item10int as integer) Digit 10
  return intNum
end C10int

という風によんでいるのですが、
同じエラーがでてきます。

書き方が、悪いんだろうか・・・?

># ListB がリスト型の変数ってことはないですよね?

いいえ、リスト型ではありません。
リターンの後に元のリストに
戻していますが・・・


田中求之 さんからのコメント
( Thursday, June 26, 1997 18:18:34 )

on C10int(NewDataRecord)
  set item10int to contents of item 10 of NewDataRecord
  set intNum to NumToDigitStr (item10int as integer) Digit 10
  return intNum
end C10int

このスクリプトの、item10int は、かならず整数(あるいは整数に変換できる)
データであることは間違いないですか?

on C10int(NewDataRecord)
  set item10Data to contents of item 10 of NewDataRecord
  try
    set item10int to item10Data as integer
  on error errMsg number errNum
    error "データの型が不適切です" number errNum
  end try

  return (NumToDigitStr item10int Digit 10)
end C10int

というようなスクリプトで、変換しようとしているデータが正しい形であるか
どうかを確認してみてください。

S.Hoashi さんからのコメント
( Friday, June 27, 1997 13:05:36 )

ご指示のスクリプトを入れて、ステップ実行しました。
ですが、on errorには入らず、最後のリターンでやはり
同じエラーとなります。

on Createitem10int(NewDataRecord)
  set item10Data to contents of item 10 of NewDataRecord <- ここからステップ実行
  try
    set item10int to item10Data as integer <- この後、on errorに入らず
  on error errMsg number errNum
    error "データの型が不適切です" number errNum
  end try
  
  return (NumToDigitStr item10int Digit 10) <- リターンしようとすると同じエラー
end Createitem10int

追加があるのですが、2000、3000とかの数字では、
0000003000というように、正常に変換されます。
ですが230000ではエラーが戻るんです。

田中求之 さんからのコメント
( Friday, June 27, 1997 13:12:45 )

>ですが230000ではエラーが戻るんです。

これはエラーになります。

NumToDigitStr は、現在はパラメーターとして整数(short integer)を受け取るように
なっています。で、short inetger というのは -32768 から 32768 までの間の整数の
ことなのです。ですから、これを越えるものはエラーになってしまうんですね。

もともと、会議室の発言の通し番号や、ファイルの通し番号など、short の範囲で十分だと
思う用途のために作ったものですから、こういう仕様になっています。

long integer を受け付けるようにすれば、エラーは出なくなりますので、作り替えて
おきます。

帆足 さんからのコメント
( Saturday, June 28, 1997 20:50:20 )

(うーん?前に投稿したメッセージが消えている?)

>long integer を受け付けるようにすれば、エラーは出なくなりますので、作り替えて
おきます。

お手数かけますが、宜しくお願いします。




田中求之 さんからのコメント
( Sunday, June 29, 1997 01:21:48 )

Long Integer を受け付けるようにした NumToDigitStr を含む Tanaka's osax
1.2b2 を登録しておきました。お試しください。



→  Tanaka's osax 1.2b2

田中求之 さんからのコメント
( Sunday, June 29, 1997 01:23:36 )

1.2b2 では、NumToDigitStr の変更以外には、

1: EncodeBase64 の追加
2: ScanLines (データ中からキーワードのある行のデータの抜き出し)の追加

が大きな変更点です。


帆足 さんからのコメント
( Monday, June 30, 1997 02:07:04 )

>Long Integer を受け付けるようにした NumToDigitStr を含む Tanaka's osax
>1.2b2 を登録しておきました。お試しください。

ありがとうございました。
さっそく試してみます。