[解決済]スクリプトでアイテム名に連番を付与したい

souma
記事: 33
登録日時: 2019年1月07日(月) 00:37

[解決済]スクリプトでアイテム名に連番を付与したい

投稿記事by souma » 2021年1月16日(土) 16:52

お世話になります。
今回はタイトルの通り、アイテム名に連番を付与する方法があれば、と
思い投稿しました。

プロジェクト段階でデータベースに直接入力しておけば良いのは重々承知なんですが、
正直、アイテム数が多くなってくると手入力による人力ミスが出そうで…。
「何で46が二つあるの?」的な。

ゲーム起動後でのアイテム名変更となると、ゲームを終了した時点で変更も
初期化されますが、そこはロード時に一度のみ行うコモンとして扱おうと思っています。

さて、ただ連番を付与するだけなら道筋は見えているのですが、
これに「アイテム名が未入力の場合は連番を付与せず、次に名前が付いているアイテムに
その連番を付与していく」という要素がどうしても解決できずにいる状態です…。
自分が辿り着けたのが、

コード: 全て選択

//アイテム名に連番を付与
var start = 1; var end =100;
for (var i = start; i <= end; i++) {
if(!$dataItems[i].name == ''){
$dataItems[i].name = '['+i+']'+$dataItems[i].name
}}

この式で、アイテム名が未入力状態であればそれには連番を付与せず、
とはしているのですが、これですと付与される連番も進んでしまいます。

これを、アイテム名が未入力状態であれば連番を保留にして
次の入力状態のアイテムに連番を持ち越すにはどうすれば良いでしょうか?

宜しくお願い致します。
最後に編集したユーザー souma on 2021年1月16日(土) 23:28 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 455
登録日時: 2018年12月23日(日) 13:55

Re: スクリプトでアイテム名に連番を付与したい

投稿記事by ecf5DTTzl6h6lJj02 » 2021年1月16日(土) 18:08

こんばんは。
souma さんが書きました:お世話になります。
今回はタイトルの通り、アイテム名に連番を付与する方法があれば、と
思い投稿しました。

プロジェクト段階でデータベースに直接入力しておけば良いのは重々承知なんですが、
正直、アイテム数が多くなってくると手入力による人力ミスが出そうで…。
「何で46が二つあるの?」的な。

ゲーム起動後でのアイテム名変更となると、ゲームを終了した時点で変更も
初期化されますが、そこはロード時に一度のみ行うコモンとして扱おうと思っています。

さて、ただ連番を付与するだけなら道筋は見えているのですが、
これに「アイテム名が未入力の場合は連番を付与せず、次に名前が付いているアイテムに
その連番を付与していく」という要素がどうしても解決できずにいる状態です…。
自分が辿り着けたのが、

コード: 全て選択

//アイテム名に連番を付与
var start = 1; var end =100;
for (var i = start; i <= end; i++) {
if(!$dataItems[i].name == ''){
$dataItems[i].name = '['+i+']'+$dataItems[i].name
}}

この式で、アイテム名が未入力状態であればそれには連番を付与せず、
とはしているのですが、これですと付与される連番も進んでしまいます。

これを、アイテム名が未入力状態であれば連番を保留にして
次の入力状態のアイテムに連番を持ち越すにはどうすれば良いでしょうか?

宜しくお願い致します。

ループをカウントする変数と、連番の数字をカウントする変数を別にして、連番の数字は付与したのみ増加させるよう処理するという方法でやるのが、一番簡単かなと思います。
あと、start や end を変数でとる必要はないように思います。
特に end のほうは、データベースでアイテムの数を変更したときに書き換えなければいけなくなりますし、
実際のアイテム数以上に設定した場合にエラーが出てしまうと思いますので、
for文の実行条件を データベースに登録されているアイテム数未満の時 として設定したほうがいいと思います。
今回の場合ならば、

コード: 全て選択

for(var i=1, j=1; i < $dataItems.length; i ++){
if(!$dataItems[i].name) continue;
$dataItems[i].name = '[' + j + ']' + $dataItems[i].name;
j ++;   
}

とすれば、お望みの動作になるかと思います。
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: スクリプトでアイテム名に連番を付与したい

投稿記事by ムノクラ » 2021年1月16日(土) 18:18

souma さんが書きました:お世話になります。
今回はタイトルの通り、アイテム名に連番を付与する方法があれば、と
思い投稿しました。

プロジェクト段階でデータベースに直接入力しておけば良いのは重々承知なんですが、
正直、アイテム数が多くなってくると手入力による人力ミスが出そうで…。
「何で46が二つあるの?」的な。

ゲーム起動後でのアイテム名変更となると、ゲームを終了した時点で変更も
初期化されますが、そこはロード時に一度のみ行うコモンとして扱おうと思っています。

さて、ただ連番を付与するだけなら道筋は見えているのですが、
これに「アイテム名が未入力の場合は連番を付与せず、次に名前が付いているアイテムに
その連番を付与していく」という要素がどうしても解決できずにいる状態です…。
自分が辿り着けたのが、

コード: 全て選択

//アイテム名に連番を付与
var start = 1; var end =100;
for (var i = start; i <= end; i++) {
if(!$dataItems[i].name == ''){
$dataItems[i].name = '['+i+']'+$dataItems[i].name
}}

この式で、アイテム名が未入力状態であればそれには連番を付与せず、
とはしているのですが、これですと付与される連番も進んでしまいます。

これを、アイテム名が未入力状態であれば連番を保留にして
次の入力状態のアイテムに連番を持ち越すにはどうすれば良いでしょうか?

宜しくお願い致します。


即興で外れていたら、ごめんなさい。
別枠で、jをカウントさせれば解決しないでしょうか?

コード: 全て選択

//アイテム名に連番を付与
var start = 1;
var end = 100;
var j = 1;
for (var i = start; i <= end; i++) {
  if (!$dataItems[i].name == '') {
    $dataItems[i].name = '[' + j + ']' + $dataItems[i].name;
    j += 1;
  }
}


書いているうちに、被ってしまったようですね…
失礼いたしました。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
souma
記事: 33
登録日時: 2019年1月07日(月) 00:37

Re: スクリプトでアイテム名に連番を付与したい

投稿記事by souma » 2021年1月16日(土) 23:28

お二人とも、素早いご回答、誠に有難う御座います!
おかげ様で問題無く連番付与が行えるようになりました!

あと、言葉足らずで誤解させてしまいましたが、
連番はアイテムの並び順で別けた分類毎に設定したかったので、
当初の形で問題なかったのです。

それでは改めて、ecf5DTTzl6h6lJj02 様、ムノクラ様
本当に有難う御座いました!

“MV:質問” へ戻る