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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0317
アキアキノヒロロ厄介な「文字列操作命令」や「文字列操作関数」について2解決


アキアキノヒロロ

リンク

2022/3/17(Thu) 12:37:59|NO.95751

苦手な、「文字列操作命令」や「文字列操作関数」で、頭を抱えています。

ダイアログで選択した[gpb] ファイル名を「文字列操作」し、[gpload] でノード生成しようとしましたが、うまくいきません。

例えば、ダイアログで選択した[gpb]ファイル名が次のようになっている場合です。
gpb_file="C:\Users\akiaki\Desktop\NaviLine\res\NewTerrain\newterrain.gpb"
これをそのまま、パラメータに入れて、
> gpload id_model, gpb_file
こうすると、エラーになり、生成できません。基本的には、
> gpb_file="res/NewTerrain/newterrain"(拡張子[.gpb]付きでも可)
なのでしょうが、
> gpb_file="res\\NewTerrain\\newterrain"(拡張子[.gpb]付きも)
または、
> gpb_file="C:\\Users\\akiaki\\Desktop\\NaviLine\\res\\NewTerrain\\newterrain.gpb"
でも、ノード生成できることは分かりました。
しかし、この文字列置換の方法がどうしても、うまくいきません。

『HSP3プログラミング情報 Let's HSP! 』の「HSP3命令入門講座」内の
「文字列操作命令」や「文字列操作関数」を参考に色々やってみましたが、
切り出しも文字列置換も、それらを組合せても、思うものにはなりませんでした。
[\]、[\n]、[\r] が邪魔をしているようですが、対処方法をお教え頂きたいです。



この記事に返信する


TOMATO

リンク

2022/3/17(Thu) 13:09:28|NO.95752

スクリプトエディタ上でファイルパスを直接記述するときのみ
「\」→「\\」に置き換えする必要がありますが、
今回のようにファイル選択ダイアログで選択されたファイルのフルパスに関しては
「\」→「\\」に置き換えする必要はないです。

それでもgploadでエラーが起きるのであれば、
前回紹介したファイル選択ダイアログを使っていますか?
http://hsp.tv/play/pforum.php?mode=all&num=95724

ファイル選択ダイアログを使用するとカレントディレクトリが移動してしまうため、
場合によっては戻してあげる必要があります。
(モデルデータとか相対パスで記述されているようなファイルは誤動作する可能性があります)

【参考】
小ワザ/ファイル選択ダイアログ
https://wiki.hsp.moe/%E5%B0%8F%E3%83%AF%E3%82%B6%EF%BC%8F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E9%81%B8%E6%8A%9E%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0.html#x00971fe


#include "hgimg4.as" #uselib "Comdlg32.DLL" #func GetOpenFileName "GetOpenFileNameA" int #define BUFSIZE 260 #define FILTERSIZE 512 #define ALLTYPE "ALL files (*.*)@*.*@" #define GPBFILE "GPBファイル (*.gpb)@*.gpb@" #define OFN_FILEMUSTEXIST $00001000 dim ofn , 22 sdim aplFilter , FILTERSIZE+1 sdim usrFilter , FILTERSIZE+1 sdim filename , BUFSIZE+1 aplFilter = GPBFILE + ALLTYPE + "@" usrFilter = "ユーザ選択フィルタ (*.*)@*.*@" + "@" repeat await 0 mutch=instr(aplFilter,start,"@") if mutch = -1 : break poke aplFilter , start + mutch , $00 start += mutch + 1 loop start = 0 repeat await 0 mutch=instr(usrFilter,start,"@") if mutch = -1 : break poke usrFilter , start + mutch , $00 start += mutch + 1 loop ofn.0 = 88 ; lStructSize ofn.1 = hwnd ; hwndOwner ofn.2 = hinstance ; hInstance ofn.3=varptr(aplFilter) ; lpstrFilter ofn.4=varptr(usrFilter) ; lpstrCustomFilter ofn.5 = FILTERSIZE ; nMaxCustFilter ofn.6 = 1 ; nFilterIndex ofn.7=varptr(filename) ; lpstrFile ofn.8 = BUFSIZE ; nMaxFile ofn.9 = 0 ; lpstrFileTitle ofn.10 = 0 ; nMaxFileTitle ofn.11 = 0 ; lpstrInitialDir ofn.12 = 0 ; lpstrTitle ofn.13 = OFN_FILEMUSTEXIST ; Flags prm=varptr(ofn) cd = dir_cur // カレントディレクトリを退避 GetOpenFileName prm chdir cd // カレントを戻す if stat = 0{ dialog "失敗" , 0 , "終了確認" : end } title filename gpload id_model, filename if id_model < 0 : dialog "gploadでエラーが発生" : end stop



アキアキノヒロロ

リンク

2022/3/17(Thu) 17:29:30|NO.95753

TOMATOさん、早速のご返事、有難うございます。

前回ご紹介頂いた、ファイル選択ダイアログを[GPB]単独用に書き換えて、使わせてもらっています。
ほぼ、今回のTOMATOさんのものと同等です。

やはり、ディレクトリの問題ですか。
> ファイル選択ダイアログを使用するとカレントディレクトリが移動してしまうため、
> 場合によっては戻してあげる必要があります。
> (モデルデータとか相対パスで記述されているようなファイルは誤動作する可能性があります)
その予感はしていましたが、「文字列操作」の苦手意識が強く、かえって「文字列」ばかりに
気が行ってしまいました。

今回のもので試させて頂くと、正常にノード生成し、[hgimg4]上で3D描画されました。

有難うございました。

あまりその様子のはっきりしない動画ですが、[hgimg4]でファイル選択ダイアログを正常活用できた
プログラム実行画面です。
https://twitter.com/akiakinohiroro/status/1504373564497342466



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