HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0821
HSP初心者データの型変換17解決


HSP初心者

リンク

2011/8/21(Sun) 18:57:51|NO.40752

HSPを始めました初心者です。
データの型変換についてお聞きしたいです。

文字列の「1」をデータ型に変換する時は、

a = "1"
a = int(a)
で出来るのはわかりましたが。大量に変換したい場合はどうすればいいのでしょうか?
同じ繰り返しですかね・・

a = "1"
b = "2"
c = "3"
d = "4"
e = "5"

a = int(a)
b = int(b)
c = int(c)
d = int(d)
e = int(e)

スッキリ一撃で変換する方法とかはないでしょうか・・



この記事に返信する


check

リンク

2011/8/21(Sun) 19:01:36|NO.40753

配列変数でも使えばいいんじゃないだろうか。
それか複数の変数をint型に変換するマクロでも作るか。
#define toint3(%1,%2,&3) %1 = int(%1) : %2 = int(%2) : %3 = int(%3)
のように。



HSP初心者

リンク

2011/8/21(Sun) 19:47:59|NO.40754

ありがとうございます。
a = "1"
b = "1"
int(a)
int(b)

これを一気にまとめる書き方ないですか・・

こんな風に・・↓
int(a,b)

一回に付き1個しか変換できない><



who

リンク

2011/8/21(Sun) 20:14:09|NO.40755

かりにint(a,b)っていうのがあったとして、どうやって代入するんだよ



Cookies

リンク

2011/8/21(Sun) 20:30:58|NO.40756

じゃあ、intってのを関数にしないで、変数を引数にとる命令にすればどうです?



backdrop

リンク

2011/8/21(Sun) 20:54:43|NO.40758

>変数を引数にとる命令にすればどうです?
intはHSP2.61からHSP3へのアップデートの際に関数化されています
ですので、次の行をスクリプトの先頭に記述すれば、HSP2.61の書式で記述できますが、

#include "hsp261cmp.as"
これでも使いづらいんで、intだけだったら次のソースでもいいかも
使うだけ原始的だから検証してないけど

#undef int #deffunc int var moto, array saki c = 0 + moto foreach saki saki.cnt = moto loop return



ORZ

リンク

2011/8/21(Sun) 21:26:35|NO.40759

いつも思うんだがbackdrop氏の発言はどっかずれてる。
質問者はただ単にint複数回を一回で書けるような糖衣構文チックな物が無いのか聞いている。
配列云々の質問はどうやら違うという事がわかるよな。
backdrop氏のコードが何をしているか良く分からないんだけど。

答えは『ない』ので新たに命令を定義するか、配列にしてrepeatで回しましょう。



Cookies

リンク

2011/8/21(Sun) 21:39:50|NO.40760

>>変数を引数にとる命令にすればどうです?
>intはHSP2.61からHSP3へのアップデートの際に関数化されています
ごめんなさい。書き方が悪かったですね。

>かりにint(a,b)っていうのがあったとして、どうやって代入するんだよ
に対し、
じゃあ、関数じゃなくて変数を引数にとる命令を作ったらどうです?
てことで。
別にintを命令にしなくてもいいです。。



info

リンク

2011/8/22(Mon) 10:32:00|NO.40767

今後どうなるかは解りませんが、自分の環境では動いています。
複数の変数を、配列にまとめます。

勝手な憶測ですが。
増えすぎて困ってしまった変数を一つにまとめて、
文字列操作でスクリプトに変換などしみてはいかがでしょうか?

とりあえず、今なら使えます。


#if 0 top = "top" // この間に配列化したい変数を a = "555" b = "1212" c = "334455" d = "9090" e = "6753" ef = "8929333" test = "445533" ffe = "8987" // 挟んで下さい eof = "eof" eof2 = "eof" #else top = 0xFFFFFFFF // この間に配列化したい変数を a = 1 b = 2 c = 3 d = 4 e = 5 ef = 33 test = 300 ffe = 0909 // 挟んで下さい eof = 0xFFFFFFFF eof2 = 0xFFFFFFFF #endif ptr = varptr(eof2) size = varptr(eof)-ptr ptop = varptr(top) bsize = ptop-ptr total = bsize/size+1 dimtype rt,vartype(top),total-3 //sdim rt,,total-3 repeat total-3 , 2 dupptr txt , ptr+(size*cnt) , size , vartype(top) rt((total-4)-i) = txt i++ loop repeat length(rt) mes "["+rt.cnt+"]" loop



kitu

リンク

2011/8/22(Mon) 11:10:47|NO.40768

もしかしたらお望みの回答ではないかもしれませんけども
a = "1"
a = int(a)
のように文字列として扱っていた変数を、途中から数値として扱うようなことは普通はあまりしないと思いますよ^^;
特に、1個1個書くのが面倒なほど大量に変換するのでしたら、
文字列格納用の配列、数値格納用の配列を別々に用意して、そこに値を入れたほうがいいのではないでしょうか
そうすればループで回しながら変換代入すればいいだけなので、いくら個数が増えても、コード量は変わりませんよ〜
// まとめて変換
strVal = "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" repeat 10 intVal.cnt = int( strVal.cnt ) loop // 適当に確認 mes str( intVal.0 + intVal.1 + intVal.2 + intVal.3 + intVal.4 + intVal.5 + intVal.6 + intVal.7 + intVal.8 + intVal.9 )



backdrop

リンク

2011/8/22(Mon) 17:43:06|NO.40778

>ORZさん
>新たに命令を定義するか、配列にしてrepeatで回しましょう。
いえ、それをやっていたんですが

配列云々は違うとか言いながら何をいまさら配列にしろと言われておられるのですか



ORZ

リンク

2011/8/22(Mon) 18:57:37|NO.40784


#undef int #deffunc int var moto, array saki c = 0 + moto foreach saki saki.cnt = moto loop return
ごめん俺このコードが何をするコードなんかまったく分かんないのよ。
まずcが分かんない。どっか間違えてない?とてもそんな意図の物には見えない。
0を使って整数型にしようとしていることはそこはかとなくなんとなくわかる。
あと配列の内容にmotoをぶち込んでるように見えるけど渡される配列の中は空なの?
これ具体的にどういう状況でint moto,sakiって書くの?
これで問題解決する?つーか動くこれ?



ザーメン

リンク

2011/8/22(Mon) 19:15:21|NO.40785

というかintをundefするような、スクリプトは使わないほうが身のため・・・



晩御飯

リンク

2011/8/22(Mon) 23:25:06|NO.40809

まず質問者の状況になる場面がさっぱり思いつかなくてやばい
何だか別の方法で回避できそうな気はするけども



HK2

リンク

2011/8/23(Tue) 07:22:28|NO.40813


#module #deffunc LoadCharactorInfo str fname,array chara exist fname if(strsize==-1){ return -1 } #if 0 //実際に読み込ませる。 sdim buf,strsize bload fname,buf,strsize #else //掲示板用にそのままでも動くようにする。 buf={"HP=100; MHP=100; MP=0; MMP=0; ATK=5; DEF=5; SP=5;"} #endif m=instr(buf,0,"HP=")+3 n=instr(buf,m,";") sHP=strmid(buf,m,n) m=instr(buf,0,"MHP=")+4 n=instr(buf,m,";") sMHP=strmid(buf,m,n) m=instr(buf,0,"MP=")+3 n=instr(buf,m,";") sMP=strmid(buf,m,n) m=instr(buf,0,"MMP=")+4 n=instr(buf,m,";") sMMP=strmid(buf,m,n) m=instr(buf,0,"ATK=")+4 n=instr(buf,m,";") sATK=strmid(buf,m,n) m=instr(buf,0,"DEF=")+4 n=instr(buf,m,";") sDEF=strmid(buf,m,n) m=instr(buf,0,"SP=")+3 n=instr(buf,m,";") sSP=strmid(buf,m,n) //////////////////////////////////////////////////////////////////////////////// //この部分をスッキリさせたい? chara(0)=int(sHP) chara(1)=int(sMHP) chara(2)=int(sMP) chara(3)=int(sMMP) chara(4)=int(sATK) chara(5)=int(sDEF) chara(6)=int(sSP) //////////////////////////////////////////////////////////////////////////////// return #global dim enemy1,7 LoadCharactorInfo "enemy1.txt",enemy1 mes "HP:"+enemy1(0) mes "最大HP:"+enemy1(1) mes "MP:"+enemy1(2) mes "最大MP:"+enemy1(3) mes "攻撃力:"+enemy1(4) mes "防御力:"+enemy1(5) mes "敏捷性:"+enemy1(6)

このようなことがしたいのでしょうか。



HSP初心者

リンク

2011/8/27(Sat) 13:32:05|NO.40890

すいません。。
bsave命令でint型のまま保存できるんですね><
いつもnotesaveで保存していて取り出した時に
数値として使いたかってintにわざわざ変換しておりました。。。

そこで一括変換の質問をここでしました><
すいませんみなさまのおかげで解決致しました



ニンニクラー油(よっしーsoft)

リンク

2011/11/28(Mon) 17:50:11|NO.43339

それはよかったです



てれてれ

リンク

2011/11/28(Mon) 18:03:21|NO.43340

>それはよかったです
こんな古いスレを今更上げることに
含意があるとは到底思えないのですが、新手の荒らしか何かでしょうか?



ONION software Copyright 1997-2023(c) All rights reserved.