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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0923
popcorncsvファイルからデータの呼び出し3未解決


popcorn

リンク

2009/9/23(Wed) 01:02:14|NO.27899

立て続けに質問となってしまい申し訳ありません。

いろいろなサンプルを見て、ノートパッド命令とsplitの使い方は理解できました。
sdimで文字型の配列変数を必要分準備して、repeat,loopで配列に情報を入れて
までは良かったんです。

問題は、splitの変数が文字列であるため、数値型に直す必要があります。
そこで、 intやdoubleを使うのですが、ここでよくわからないことになります。

↓練習で作ったものです。
	maxenemy = 10	;敵機の出る数
sdim buf,1000 notesel buf noteload "STG2.csv" sdim einfo,10,10 ;csvから取り出した1行の情報を入れる sdim etime,10,10 ;敵機出現時間 sdim enum,10,10 ;敵機番号 sdim epattern,10,10 ;敵機の行動パターン sdim ekind,10,10 ;敵機の種類 repeat maxenemy noteget einfo(cnt),cnt + 2 split einfo(cnt),",",etime(cnt),enum(cnt),epattern(cnt),ekind(cnt) etime(cnt) = int(etime(cnt))   ;ここで数値型にする enum(cnt) = int(enum(cnt)) epattern(cnt) = int(epattern(cnt)) ekind(cnt) = int(ekind(cnt)) loop mes enum(0) + etime(0) ;ただ数値型になったかの確認用

とまあこんな感じなんですが、
エラー31 異なる型の配列変数を代入しました。となってしまいます。
(エラー箇所はsplitの行です。)

またintの部分を外に出してみると
	repeat maxenemy
noteget einfo(cnt),cnt + 2 split einfo(cnt),",",etime(cnt),enum(cnt),epattern(cnt),ekind(cnt) loop repeat maxenemy etime(cnt) = int(etime(cnt)) enum(cnt) = int(enum(cnt)) epattern(cnt) = int(epattern(cnt)) ekind(cnt) = int(ekind(cnt)) loop mes enum(0) + etime(0) ;ただ数値型になったかの確認用
としてみると、結果は 0 と出てきます。
デバックウィンドウで配列の中身を調べてみると (0)は正確な数字が入っていて
(1)〜(9)はすべて中身が0でした。
(etime,enumber,epattrn,ekindにあてはまります。)

まとめると
・上の記述では、splitでエラー(型があってない)
・下の記述では(0)以外配列の中身がすべて0になる。(もちろん本来0ではありません。)

sdimやnoteselなど初めて使ったので、特性を理解できてないなどあると思います。
どうしてこうなるのか、わかるかたは返信をよろしくお願いします。



この記事に返信する


nextel

リンク

2009/9/23(Wed) 08:00:35|NO.27903

>・上の記述では、splitでエラー(型があってない)
 ループの1回目で 変数その物も 文字型から 数値型になってしまっている為、
 ループの2回目で エラーになってると思います。

>・下の記述では(0)以外配列の中身がすべて0になる。(もちろん本来0ではありません。)
 ループの1回目で 変数その物も 文字型から 数値型になってしまっている為、内容がリセットかな?
  

数値型変数を 別に用意したら どうでしょう?
追加

dim setime,10 ;敵機出現時間 dim senum,10 ;敵機番号 dim sepattern,10 ;敵機の行動パターン dim sekind,10 ;敵機の種類




変更

setime(cnt) = int(etime(cnt))   ;ここで数値型にする senum(cnt) = int(enum(cnt)) sepattern(cnt) = int(epattern(cnt)) sekind(cnt) = int(ekind(cnt))



popcorn

リンク

2009/9/23(Wed) 11:25:34|NO.27911

nextelさん、返信ありがとうございます。
えっと、書いてあることからすると、
splitエラーの場合についてですが、
>ループの1回目で 変数その物も 文字型から 数値型になってしまっている
ということは、
配列
 etime(cnt) = int(etime(cnt)) 

について、たとえば1週目(cnt = 0)の時、
 etime(0) = int(etime(0)) 
と (0) の場合だけでなくて、
(0) から (9) まですべてが一度に数値型になるということなのでしょうか?


また、0になっちゃうよエラーについては
やはり敵の数だけ配列を準備したいので、将来的に1ステージに100出るとすると...>
500 〜 600 は必要かなぁと思います。
こうなると、型の変更のためだけに配列を準備して大丈夫かなぁ、
と思えてしまうのですが、返信を読む限りではそれ以外に方法はなさそうですね。

要点をまとめます。
・配列の型の変更は(0)だけなど限定的ではなく(0) 〜 (n) までの配列が
 一度にすべて変わってしまうということ?
・型の変更には別の配列が必須である?

違ったならまた教えてください。
よろしくお願いします。



popcorn

リンク

2009/9/23(Wed) 11:29:27|NO.27912

急いで返信書いたので、報告が後回しになってしまいました。
申し訳ありません。

別の配列を作って代入したところ、うまくいきました。
ありがとうございました。



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