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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1108
大富豪ディレクトリを変数で指定9解決


大富豪

リンク

2023/11/8(Wed) 19:21:45|NO.100459

・・・連投申し訳ありません・・・

ディレクトリを変数で管理して移動したいのですが、
文字列の当て込みのルールが分からなくなりました;

スクリプトがあるホルダー内で以下のようにホルダーがあるとして、

┬01┬011
|   |
|  └012
|
└02┬021
   └022


a="01\\011"
chdir a :dirlist x,"*.*",0:mes x

または

a="01"
chdir a :dirlist x,"*.*",0:mes x

これでdir移動できますが、
変数に置き換えてchdir指定する事はできますか?

b(0)=01
b(1)=011

a=""+b(0)+"\\"+b(1)+""
chdir a :dirlist x,"*.*",0:mes x ; (⇒NG)


a="01" : chdir a :dirlist x,"*.*",0:mes x ; ⇒ OK
a=01 : chdir ""+a+"" :dirlist x,"*.*",0:mes x ; ⇒ NG

””の括りや文字列の当て込みのルールが
よく分からなくなりました・・・;

宜しくお願いします。



この記事に返信する


沢渡

リンク

2023/11/8(Wed) 22:54:11|NO.100465

「a=01」と書こうが「a=001」と書こうが、整数変数aに入る値は「1」ですので、
それをそのまま文字列に変換したら、いずれにしても「"1"」にしかなりません。

もし、「上位のフォルダは2桁の数字、下位のフォルダは3桁の数字」と
ルールを決めているのでしたら、strfで変換するのはどうでしょうか?
たとえばb(0)を「上の桁を0で埋めた2桁の数字」に変換したいのであれば、

strf("%02d",b(0))
でできますし、同様にb(1)を「上の桁を0で埋めた3桁の数字」に変換するのなら、

strf("%03d",b(1))
でできます。



大富豪

リンク

2023/11/9(Thu) 04:03:49|NO.100467

>沢渡さん
ご対応ありがとうございます。

階層の深さの違いを分かりやすく桁数で表現したつもりですが、
あくまでも目的は変数でのディレクトリ指定です。

chdir "a01新規\\あ011登録", "*.*",0 ; (例)
通常はこう書くところ、

c="a01新規" ; (実際に存在するホルダー名を直接指定している)
chdir c
 でchdirは文字列として(?) ""を含めて丸ごと認識しますが、
 ( c="あいうえお" : mes c と同じ状態だと思います)


例えば、

inputなどで入力を取得して、
chdir "" 内のディレクトリー名に変数で指定したいのです。
------

chdir "a01新規\\ "+c+" "

(文字列に変数を入れ込む記述("+c+")をしましたが、
実際は認識しません)

input c,150,30 ; 既に存在するホルダー名を入力
button goto "OK",*ok
stop

*ok
chdir ""+c+""
dirlist x,"*.*",0
mes x

これだとエラーになります。

c="a01新規" : chdir c ;⇒ OK
 は、 "" も含めて丸ごと文字列のように認識している(?)のでOKですが、

c=a01新規 : chdir ""+c+"" ;⇒ NG
 は""内を認識しません。


※ディレクトリ(移動)を変数で指定するにはどういう記述にすれば?
という感じです。



名無し

リンク

2023/11/9(Thu) 05:02:48|NO.100469

もしかしてなのですが、
inputのボックス内に文字列含むフォルダ名を入力してますかね?
>>chdir ""+c+""
の前の行に「mes c」を入れて貰えれば分かるかなと思うのですが、
inputで使用する変数が数値型の場合、文字列を入れても数値として認識しようとして
「0」にしかならないと思います。

>>input c,150,30
の前行に「sdim c」若しくは「c=""」等を行い文字列型に予めしておくことで
解決するかなと思いますがどうでしょうか?

因みに余談ですが、
>>c="a01新規" ; (実際に存在するホルダー名を直接指定している)
>>chdir c
実行できる例として挙げていると思われる上記コード(NO.100459のコードも)ですが、
スレッドタイトルになっている「ディレクトリを変数で指定」はこちらで達成できている為、
疑問点がいまいち分からず"?"状態になってしまいました。
「"chdir"でディレクトリの指定をinputで入力されたフォルダにしたい」
といった感じで実際に行いたい内容を書いた方が分かりやすかったかなと思いました。

更に余談なのですが、
スクリプトを記載する際、「<pre>」と「</pre>」(<>は半角で記載する)
でコードを囲むと見やすくなって助かります。↓こんな感じ
sdim c					;文字列型にする
input c,150,30 ;↓変えてません button goto "OK",*ok stop *ok mes c ;確認用に変数cの内容を表示する chdir ""+c+"" ;↓変えてません dirlist x,"*.*",0 mes x



大富豪

リンク

2023/11/9(Thu) 11:00:27|NO.100471

>名無しさん
 ありがとうございます。

>inputのボックス内に文字列含む
 実際は文字列だけのホルダー名を使っていますが、
 階層が分かりやすいと思って桁数違いの数字で投稿しました;

>「sdim c」若しくは「
>文字列を入れても数値として認識
 02-new , 03-new とか
 数字で管理しようとしている部分もあるので、
 色々試してみます。
 ありがとうございます。


>ディレクトリを変数で指定したい

<pre>chdir "a01新規",....</pre>
 一階層下がる場合はいいのですが、

<pre>chdir "a01新規¥¥b03新規",....</pre>
 とか、二階層下がる場合、
 二階層目の変数の記述の仕方が分からない★
 という感じです。



<pre>chdir 【変数A】</pre>
 【変数A】を括弧 "" を含めて変数に置き換え。
  【変数A】="a01新規" で うまくいきます

<pre>chdir "【変数A】¥¥【変数B】"</pre>
 ¥¥を含めた 【変数B】をどう表記すれば良いか分かりません。


※<pre>初めて知りました;
表題の件も含めて今後そう致します。


分かりにくくて大変申し訳ありません・・・。



沢渡

リンク

2023/11/9(Thu) 12:46:01|NO.100472

たとえば上位のフォルダ名をaに、下位のフォルダ名をbに入れているのなら、

a="a01新規" b="b03新規" chdir a+"\\"+b
これでいいですし、変数bにディレクトリ区切り文字の「\」を含めるのなら、

a="a01新規" b="\\b03新規" chdir a+b
これで良いのでは?



沢渡

リンク

2023/11/9(Thu) 13:12:31|NO.100473

ああ、今気付きましたが、もしかして「chdirでディレクトリの位置を変更したのに、
二度目のchdirでそれを考慮しないディレクトリ指定を行い、それでエラーになる」という
パターンだったりしますか?
もしすでにやっているのなら問題ないのですが、コードの冒頭で

home=dir_cur
のようにして基準となる位置を記憶しておき、chdirでディレクトリを変更する前に

chdir home
と、基準となる位置に戻る作業が必要になるかもしれません。



大富豪

リンク

2023/11/9(Thu) 13:42:56|NO.100474

>沢渡さん

ありがとうございます、
解決しました・・・^^;

a="a01新規"
b="b03新規"
chdir a+"\\"+b

文字列(?)として +"¥¥"+を
変数で挟む発想が全くありませんでした@@;

mes = "  No. "+x+" 新規ホルダー"
と文字列に変数を入れ込むのはよくあるのですが、
+  ” の組み合わせ方がよく分かってなかったようです・・・。


☆ ご対応頂き誠にありがとうございました。



(追伸)
>「chdirでディレクトリの位置を…の件ですが、

スクリプトから下層ディレクトリに移動すると、
元のディレクトリに戻す必要がある場合、
別途コマンドが必要な事に気がつき、

chdir ".." ; 上の階層に戻る
を入れるようにしました。^^;



名無し

リンク

2023/11/9(Thu) 15:20:29|NO.100477

なるほど、フォルダ毎に違う変数に入れたかったのか...
となるとinput云々は関係なかったですね。(今後の何かの参考にでもしてもらえれば)

NO.100459(最初の投稿)にある
>>a=""+b(0)+"\\"+b(1)+""
>>chdir a :dirlist x,"*.*",0:mes x ; (⇒NG)
こちらのコード、NGという事になってますが、やり方としてはこれで良かった感じですね。
解決してよかった。

参考程度に、ご自身でのみ使用する用途なら良いのですが、
ディレクトリの選択、色んな処理をしているうちに思わぬ場所に変わったりするので、
(例えばdialogでファイル選択したらそのディレクトリに移動される等)
可能であれば常にフルパスで記載した方がトラブルが減るかなと思ってます。
といった意味で、NO.100473の方法は有用だと思います。

<pre>の件ですが、最初と最後にある括弧("<"と">")はご自身で半角にして頂けると助かります。
説明するのに半角で入れるとスクリプトと認識され、preの文字も消えて意味が分からなくなるので
敢えてここでは全角で書いた感じです。



大富豪

リンク

2023/11/9(Thu) 16:25:26|NO.100478

>名無しさん
この度はご対応頂きありがとうございました。
私の説明の仕方が悪く分かりにくかったと思います、
すみません;

変数が入力される元はinputやbutton、
とかデータから引用したり色々です。
変数に¥¥や””をどう含めるかがよく分からなかった次第です;

フルパスの件了解です。
やってみます。

<プリ>の件、全角でした・・・
今後意識しておきます。

改めまして、ご対応ありがとうございました。



記事削除

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

NO.100459への返信

マスコット

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

名前

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

削除用パスワード

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

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

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