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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0201
MSX68000改行がある文字列データからの切り出し13解決


MSX68000

リンク

2022/2/1(Tue) 17:27:33|NO.95277

 前回の質問を受けて、保存したゲームデータの切り出しを作っています。
その中で、こんな感じのデータ部があります。


データ例その1
0123456おにたま\n(←改行コード)
abcde...

データ例その2
0123456onion\n(←改行コード)
abcde...


各データ

A:「0123456」の部分。
 半角だけ・固定長なので、strmidで切り出す。

B:「おにたま」「onion」の部分。
 全角と半角混在・可変長(最長16文字)なので、
 instrで末尾の「\n」を検索して長さを求めてからstrmidで切り出す。

C:「abcde...」の部分。
 半角だけ・固定長なので、Bで切りだした最終位置を基準にstrmidで切り出す。


 これでAはともかく、Bで\nの位置から長さを求めても、Bだけ上手く切り出せません。
Bが全部半角だと成功するが、全角が入っているとBもCも乱れます。

 恐らく全角文字では、「\n」以外に全角・半角区切り文字コードも入っているからと
予想していますが、どうコードを書いたらいいでしょう?



この記事に返信する


窓月らら

リンク

2022/2/1(Tue) 17:53:40|NO.95279

いくつかやり方はありますが、これがいちばん簡単。

data(0)="0123456おにたま\nabcdef" data(1)="0123456onion\nabcdef" repeat 2 split data(cnt),"\n",s1 mes "\nDATA "+cnt mes s1(0) mes s1(1) loop



しまくろねこ

リンク

2022/2/1(Tue) 18:10:19|NO.95280

書き直しです。

buff = "0123456おにたま\nabcde" A = strmid(buff, 0, 7) i1 = instr(buff, strlen(A), "\n") B = strmid(buff, strlen(A), i1) i2 = strlen(buff) - strlen(A) + strlen(B) + strlen("\n") C = strmid(buff, strlen(A) + strlen("\n") + i1, i2) mes A mes B mes C



MSX68000

リンク

2022/2/1(Tue) 19:43:48|NO.95282

窓月ららさん、しろくまねこさん

 何と、そんな簡単な命令があったとは…

 これまで使ったBASIC系命令で見た事がなかったので、読んだ瞬間気が抜けましたw


 似た事をしているサンプルゲーム、「たまねジャンプ」も調べていたのですが、
判りませんでした。

 早速取り込んで応用してみます。



しまくろねこ

リンク

2022/2/1(Tue) 19:46:49|NO.95283

すいません。更に書き直しです。

buff(0) = "0123456おにたま\nabcde" buff(1) = "0123456onion\nabcde" repeat length(buff) split buff(cnt), "\n", re_buff A = strmid(re_buff(0), 0, 7) B = strmid(re_buff(0), strlen(A), strlen(re_buff(0)) - strlen(A)) C = re_buff(1) mes A mes B mes C loop



しまくろねこ

リンク

2022/2/1(Tue) 21:58:23|NO.95287

>MSX68000さん
> 窓月ららさん、しろくまねこさん
「しろくま」ではなく、
「しまくろ」ねこです。
皆さんよく間違われます。



zrs90(5さい)

リンク

2022/2/1(Tue) 23:35:29|NO.95288

上で、回答されている方々は、この件は
ご存知ですが、一応。

● ios/Android (HSPDish)等の動作を考えているなら
Windowsと互換性のない/使えない命令等があるので注意。

hspのバージョンにも寄りますが
3.6 だと、split 命令(※別の手段だとちょっと面倒)
とかが、ソレに該当します。

(※以前、あったケースですが、掲示板で色々質問して
Windows仕様で、ある程度、ゲームを作っちゃってから
実は、フタを開けたら Android 用のゲーム だった。
みたいな方が、お見えだったので...

私も、この件で、調べるまで、命令が使えない!?
...とか、全く知らなかったんですが。(笑))

先に、HSP3dish プログラミングマニュアル
と、doclibフォルダ内、support_cmds.txt 等を
参照しながら、製作すると良いです。



しまくろねこ

リンク

2022/2/2(Wed) 07:53:15|NO.95290

> ● ios/Android (HSPDish)等の動作を考えているなら
> Windowsと互換性のない/使えない命令等があるので注意。
>
> hspのバージョンにも寄りますが
> 3.6 だと、split 命令(※別の手段だとちょっと面倒)
> とかが、ソレに該当します。

そんなときは、コレ。
mod_dstr.as
https://sites.google.com/site/simakuroneko/home/product/hsp3dish/mod_dstr

> 当モジュールは、
> シフトJIS(SJIS)コードの文字列をUTF-8コードの文字列に変換。
> 文字列の一部を取り出す。 (バイト数ではなく文字数で処理。HSP標準の「strmid」命令と同等)
> 文字列の長さを調べる。 (バイト数ではなく文字数を返す。HSP標準の「strlen」命令と同等)
> 文字列を分割する。 (HSP標準の「split」命令と同等)
>
> 主にHSP3Dish(スマートフォン用(Android/iOS)アプリ)向けに利用すると便利かと思います。


#include "hsp3dish.as" #include "mod_dstr.as" buff(0) = "0123456おにたま\nabcde" buff(1) = "0123456onion\nabcde" redraw 0 color 255, 255, 255 : boxf color 0, 0, 0 repeat length(buff) dstr_split buff(cnt), "\n", re_buff A = dstr_mid(re_buff(0), 0, 7) B = dstr_mid(re_buff(0), dstr_len(A), dstr_len(re_buff(0)) - dstr_len(A)) C = re_buff(1) mes A mes B mes C loop redraw 1 stop
失礼しました。



zrs90(5さい)

リンク

2022/2/3(Thu) 01:06:50|NO.95298

しまくろねこ さんへ

こんなモジュールがあったとは...
機会があったら、ダウンロード
(※諸事情で今は無理ですが。)
させて頂きます。

ありがとうございました。



h

リンク

2022/2/4(Fri) 20:04:56|NO.95312

splitはandroid向けなのですか?
質問者さんは満足したんだろうか?



しまくろねこ

リンク

2022/2/4(Fri) 20:36:33|NO.95313

>hさん
> splitはandroid向けなのですか?
splitはHSP3Dish非互換コマンドです。
Windows上でのみ動作し、Androidではエラー(アプリが落ちます)になります。

> 質問者さんは満足したんだろうか?

> 早速取り込んで応用してみます。
とのことですので一応満足されたのではないでしょうか。多分・・・。



窓月らら

リンク

2022/2/4(Fri) 20:48:20|NO.95314

余計なお世話ですが、

>前回の質問を受けて、保存したゲームデータの切り出しを作っています。

前回の質問をしらないで回答したのですが、ゲームデータが自分のゲームプログラムということなら、まずは扱いやすいデータ形式にするのが先ですけどね。
例えばいちばん簡単なのは配列変数にぜんぶ突っ込んで配列変数丸々 bsave bload しちゃうとかですね。
場合によっては peek poke も使えます。



zrs90(5さい)

リンク

2022/2/4(Fri) 21:49:17|NO.95315

先日、このスレッドで、HSP3Dish使用時の
split 命令の注意点について、投稿した者です。

このスレッドで、ほぼ屁理屈な意見
(※申し訳ないです。) だけした
私と違い、Android等のアプリ開発時に
対処出来る、代替モジュールの入手方法まで
案内しておられます。

もしこの件で、再度、質問等があれば
このスレッドを見てもらう形にすれば
よろしいのでは?...ダメでしょうか?



しまくろねこ

リンク

2022/2/4(Fri) 22:00:27|NO.95316

>zrs90(5さい)さん
一応解決済みになっていますし、そこまで深刻にならなくてもよいのではないでしょうか?



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.95277への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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