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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0123
アキアキノヒロロカレントディレクトリの上階層のパスの求め方9解決


アキアキノヒロロ

リンク

2019/1/23(Wed) 15:21:04|NO.86375

カレントディレクトリ や その下の階層のパスは、

求めるパス = [ dir_cur ] (+ "下の階層のフォルダ名" )

で指定できますが、上の階層のパスの求め方が分かりません。
[ dir_cur ] の文字列の最後の "\...." 以下 を削除するなど操作して
得ようとしましたが、うまい方法が見つかりません。
特に "\" でひっかかります。エスケープシーケンスについては、
文字列指定がうまくいきません。[ match() ] 命令のヘルプにある解説を
参考にしてやってみても、「パラメーター式の記述が無効です」といった
エラーばかりでてしまいます。
よろしく、お教え願います。



この記事に返信する


ham

リンク

2019/1/23(Wed) 15:53:36|NO.86376

splitの方が簡単なのでは。

a="C:\\1\\2\\3" split a,"\\",b c=stat repeat c mes b(cnt) loop



ham

リンク

2019/1/23(Wed) 17:42:17|NO.86377

あ、上の階層を求める時はこんな感じで。

a="C:\\1\\2\\3\\4\\5" split a,"\\",b c=stat path="" repeat c-1 path+b(cnt)+"\\" ;フォルダ名を繋げてパスにする loop path=strtrim(path,2,'\\') ;右端の\を消去 mes a ;元のパス mes path ;一つ上までのパス



アキアキノヒロロ

リンク

2019/1/23(Wed) 17:48:32|NO.86378

hamさん、ありがとうございます。
[ split ] 命令、初めて知りました。

pre
main_dir = dir_cur ; この文字列から最後の[\]以下を取り除く
split main_dir, "\\", divide_dir

; "\\" を区切り用文字列として、main_dir を分割した要素を divide_dir に配列として代入

up_dir = "" ; 求める上階層のパス

repeat (stat-1) ; (分割した要素の数 - 1)回 repeat
if cnt < (stat-2) : up_dir = up_dir + divide_dir(cnt) + "\\"
if cnt = (stat-2) : up_dir = up_dir + divide_dir(cnt)
loop

mes up_dir
/pre

で、出来ました。



アキアキノヒロロ

リンク

2019/1/23(Wed) 18:01:23|NO.86379

hamさんのご返事を基にして、自分なりに考えたものを掲示板に書いている間に、
解答のスクリプトまで載せて頂いていたようで、恐縮です。
ほぼ同じやり方で、一安心です。
スクリプトの投稿の仕方が間違ってしまいました。お許しを!



 

リンク

2019/1/23(Wed) 19:23:49|NO.86380

解決済みですが
パスのあとに「../」を入れた方が簡単かと思いますよ



GrapeColor

リンク

2019/1/25(Fri) 08:43:42|NO.86391

上の方と被りますが、これではだめですか?

mes dir_cur chdir ".." mes dir_cur
".."は一つ上の階層を示す記号です



アキアキノヒロロ

リンク

2019/1/25(Fri) 18:23:41|NO.86393

匿名の方、GrapeColorさん、ありがとうございます。
"../" や ".." があるなんて、思ってもいませんでした。
[ split ] 命令 同様、色々勉強になりました。



小泉優也

リンク

2019/2/1(Fri) 19:19:16|NO.86453

splitはHSP3.5でのメモリリークに気を付けてください。



アキアキノヒロロ

リンク

2019/2/1(Fri) 22:36:07|NO.86455

小泉優也さん、ご注意ありがとうございます。
メモリリークの回避方法がわからなかったので、掲示板検索したところ、
sinoさん( NO.85817 )のスレがあり、助かりました。
「HSPプロ生ちゃんエディション」なら大丈夫とも、ありましたが、
これって、「3.51」のことですよね。「3.51」でプログラムすれば、
特別、気を使わなくとも、「split」命令等そのままでも、メモリリーク
しないということですか?



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