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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1107
HO\を\\としたいのですが33未解決


HO

リンク

2007/11/7(Wed) 16:13:16|NO.12170

a = "c:\Program Files\aa\abc.exe"
とあったとします。
これをHSPでも動くように c:\\Program Files\\aa\\abc.exeと変換するような
スクリプトを組みたいのですがヒントをお願い致します



この記事に返信する


a

リンク

2007/11/7(Wed) 19:02:00|NO.12178

instrとstrmidあたりを探してみてください。



Kpan

リンク

2007/11/7(Wed) 20:35:31|NO.12181

これは無理な話ではないですかね? (^^;

>「\」は特殊な意味を持つキャラクタとして解釈されます。
> 〜
>ですから、ディレクトリを示すための文字列、たとえば、

とマニュアルにあるように、内部では↓と同じような感じで
認識しているわけで。(デバッグウィンドウ見れば分かります


a = "c:Program Filesaaabc.exe"



ANTARES

リンク

2007/11/7(Wed) 20:53:39|NO.12183

>これをHSPでも動くように c:\\Program Files\\aa\\abc.exeと変換するような
>スクリプトを組みたいのですがヒントをお願い致します
 必要ありません。
a="c:\\Program Files\\aa\\abc.exe"
と書くと、aの内容は
c:\\Program Files\\aa\\abc.exe
ではなく
c:\Program Files\aa\abc.exe
となります。
 つまり、「\\」は""の中で「\」を表現する方法であって、
実際に「\\」を使うわけではありません。



HO

リンク

2007/11/8(Thu) 00:54:17|NO.12185

aさん
調べてみます。

Kpanさん
やはり無理のようですかね・・・

ANTARESさん
私のかきかたが悪かったようで申し訳ありません。うまくかけませんが、
例えば設定ファイルでユーザー側でc:\Program Files\〜と設定できて
プログラム側で自動的にHSPで使える形式c:\\Program〜と出来ないのでしょうか
いった意味です。



pizza

リンク

2007/11/8(Thu) 03:06:32|NO.12188

\\と書かないといけないのはスクリプト上だけです。
外部ファイルから読み込んだ文字列の\を\\にする必要はありません。

外部ファイルから読み込んだパスでexistしてみてください。



HO

リンク

2007/11/8(Thu) 10:19:19|NO.12194

pizzaさま

外部から読み込んだあとに動かしたいのです。

fold = "a:\Program Files\abc\ss" exec fold,16
例えばこれだと動きませんよね
なのですこし意味がわかりません



HO

リンク

2007/11/8(Thu) 10:22:06|NO.12195

分かり辛くなったので具体的にかきます
レジストリからインストールされているフォルダの情報を取得し
それを変数に入れ、その変数をexecで実行したいという意味です。
レジストリからひろって変数に格納まではいけるのですが
つまり a = c:\Program Files(略) が入ってる状態です。
ここからexecでどう起動したものか、ということです。何度もすみません。



Kpan

リンク

2007/11/8(Thu) 20:46:40|NO.12201

いったいどのようなスクリでレジストリから文字列を取得、
exec命令に渡しているんですかね?

hspext.dllなら、普通にgetreg命令のp1の変数をexec命令に
そのまま指定してしまえばOKだと思うんですが・・・。



ANTARES

リンク

2007/11/8(Thu) 21:41:17|NO.12204

>つまり a = c:\Program Files(略) が入ってる状態です。
 だから、それでいいんだってば。
論より証拠。試してください。
試してうまく行かなかったのなら、うまく行かなかった原因は
ほかにあります。

#include "hspext.as"
regkey 0,"Software\\Adobe\\Acrobat Reader\\8.0\\InstallPath"
sdim path,260
getreg path,"",1
mes path
path+="\\AcroRd32.exe"
mes path
exec path



GENKI

リンク

2007/11/9(Fri) 00:54:40|NO.12207

> 例えば設定ファイルでユーザー側でc:\Program Files\〜と設定できて
> プログラム側で自動的にHSPで使える形式c:\\Program〜と出来ないのでしょうか

この回答がまさにこれ。↓

> \\と書かないといけないのはスクリプト上だけです。
> 外部ファイルから読み込んだ文字列の\を\\にする必要はありません。

HOさんは難しく考えすぎですよ。
\を"\\"と書くのは「HSPの書式」じゃなくて、「HSPのスクリプト内での書式」です。
なので、スクリプトの外では何も気にせず\は\と書いてください。


hensu = "C:\\Program Files" input hensu, 600 button "実行",*jikkou stop *jikkou dialog ""+hensu+"\nを関連付けされたアプリケーションで実行します。" exec hensu, 16 stop

ちなみに"\n"や"\t"も同じで、スクリプトの外では何も気にせず普通どおり改行やタブを記述してください。



HO

リンク

2007/11/9(Fri) 04:55:24|NO.12212


hensu = "C:\\Program Files"
これをhensu = "c:\Program Files"としても動きました!

ただ

hensu = "C:\Program Files\aa\a"
といったようにするとエラーが出てしまいます。
\を\\にすると動きます。
フォルダを開きたいのですが・・・
エラー内容は外部ファイル呼び出し中のエラーです。とでます。

こうなるのはどうしてなのでしょうか?

hensu = "C:\Pro〜"
のように\でどうやるのか例題があれば助かるのですが



HO

リンク

2007/11/9(Fri) 05:01:37|NO.12213

レスついでにわかりやすく書かせて頂きます。
GENKIさんのサンプルをお借りします。

ANTARESさん
>だから、それでいいんだってば。
>論より証拠。試してください。

昨日からいろいろと試してやってますorz
実際に\だとエラーでるけど、\\だと通ることは把握済です。



hensu = "C:\Program Files\aa\a"  ;←この部分が違うだけです input hensu, 600 button "実行",*jikkou stop *jikkou dialog ""+hensu+"\nを関連付けされたアプリケーションで実行します。" exec hensu, 16 stop

これでaフォルダを開くにはどうすればいいでしょうか
という意味です。



HO

リンク

2007/11/9(Fri) 05:18:29|NO.12214

2番目にレスしていただいたKpanさんの書きこみのように無理な話なのかな?
それいったらでもプログラムランチャーってどういう仕組みで出来ているのかなと興味があります。
フォルダとかプログラムを登録して動かせてるってことは、
変数でc:\aa\bb\ccというのがあるとしたら、それをデータとしてもっていて、
スクリプト上ではc:\\aa\\bb\\ccとなっているんですよね?
ここのところが私が間違っているのかもしれませんが


昨日私がレスさせて頂きました

fold = "a:\Program Files\abc\ss" exec fold,16
これ動いた方いますか?

これだけいったらたぶん私の言いたいことがわかって頂けたかな



f

リンク

2007/11/9(Fri) 06:48:13|NO.12215

「先生!5の2乗って25なんですよね?
 でも計算すると10になるんです。
 何故ですか?

「いや、それは乗算は乗算でもただの掛け算してるからじゃね?
 5に2を掛けるのではなく、5に5を掛けるのが5の2乗だよ。

「先生!やっぱり計算しても25になりません!
 だれか5*2の計算をして25になる人いますか?

・・・こんな印象を受けたんだけど。
人の話をちゃんと聞けというか。


>hensu = "C:\Program Files\aa\a"
>といったようにするとエラーが出てしまいます。
>\を\\にすると動きます。

当たり前だろ・・・。
C:Program Files
のフォルダならほぼ間違いなくあるだろうが、
C:Program Filesaaa
なんてフォルダのある人はまず居ないだろ。

>fold = "a:\Program Files\abc\ss"
>exec fold,16
>これ動いた方いますか?

execする前にmesして内容確認してみろ。
a:Program Filesabcss
とか言うフォルダがある人は動くかもな。



とりあえず、HSPで手入力したフォルダ名だけで話をせずに、外部から読み込んだディレクトリ名と、
HSPで直接書いたディレクトリ名をmes命令で表示して、確認して見れば良いんでね?



dll

リンク

2007/11/9(Fri) 14:33:03|NO.12220

HOさん
>hensu = "C:\Program Files\aa\a"  ;←この部分が違うだけです
>※スクリプト以下略
>これでaフォルダを開くにはどうすればいいでしょうか
>という意味です。
> 
>fold = "a:\Program Files\abc\ss"
>exec fold,16
>これ動いた方いますか?
だからできないって何度も何度も言ってるでしょ?


fさん
>「先生!やっぱり計算しても25になりません!
> だれか5*2の計算をして25になる人いますか?
同感。まさにそんな感じ。



Megane

リンク

2007/11/9(Fri) 15:35:39|NO.12222

HO氏がどこで勘違いしているかはわかります。
勘違いというか、捉え方の違いというべきでしょうか。

「c:\program files\aa\abc.exe」というファイルを実行したいとしましょう。

<<スクリプト内で、>>上記のアドレスを指定するとき、
すなわち、命令の引数とするときや、文字列変数に代入するときには、
a = "c:\\program files\\aa\\abc.exe"
exec "c:\\program files\\aa\\abc.exe" と書きますね。
これを、HSP本体は「c:\program files\aa\abc.exe」と解釈します。

ダイアログや、各種命令でファイル名を取得すると、
「c:\program files\aa\abc.exe」となります。
\がひとつの形で取得されますし、そのままほかの命令の引数にすれば
HSPは\ひとつの形そのままで解釈しうまくいきます。

何度も書いてあることですが、
「HSPではいつでも」\\で書くのではなく、
「スクリプトの中に直接書くときだけ、」\では間違えるから\\で書くのです。



Megane

リンク

2007/11/9(Fri) 15:44:51|NO.12224

最初にあった「外部ファイルから読み込むとき」も、
<<スクリプトに>>直接書いたのではなく、
他のtxtに書いたのをbloadあたりの命令で取得したわけですから、
\ひとつで取得されて、そのまま他の命令に使えます。

fold = "a:\Program Files\abc\ss"
exec fold,16
これは、スクリプトに直接書いたものですから、\は2つ重ねなければならず、作動しません。

違いがお分かりになりますか?



ANTARES

リンク

2007/11/9(Fri) 20:15:59|NO.12233

>フォルダを開きたいのですが・・・
>エラー内容は外部ファイル呼び出し中のエラーです。とでます。
>
>こうなるのはどうしてなのでしょうか?
 情報が少なすぎて回答不能です。


>昨日からいろいろと試してやってますorz
 私の書いたスクリプトを実行してみましたか?
実行してみたとしたら、"\\AcroRd32.exe"の部分はどのように
表示されましたか?
 試しても見るべきものをきちんと見ていなければ何の意味もありません。
試すということは、「実行して変数の内容を確認する」ということです。
「こう書いたらうまくいったが、こう書いたらうまく行かない」
などと言っている限り、進歩はありません。
重要なことは「こう書いたら変数の内容はどうなるか」です。
mes命令、dialog命令、デバッグウィンドウなどで、
変数の内容を確認しない限り、何度試しても何の意味もありません。


>実際に\だとエラーでるけど、\\だと通ることは把握済です。
 この認識が誤っているのです。
「"\\"」≠「\\」
「"\\"」=「\」
「"C:\Program Files\aa\a"」=「C:Program Filesaaa」
(「"\P"」=「P」「"\a"」=「a」)
「"C:\\Program Files\\aa\\a"」=「C:\Program Files\aa\a」
ということを理解しない限り、先には進めません。


>これだけいったらたぶん私の言いたいことがわかって頂けたかな
 「みんながHOさんの言いたいことをわかってない」と考えている限り、
解決しません。HOさんがみんなの言っていることを理解できずにいる
というより理解しようとしていないというのが実態です。


>フォルダを開きたいのですが・・・
>エラー内容は外部ファイル呼び出し中のエラーです。とでます。
>
>こうなるのはどうしてなのでしょうか?
 で、再びこれに対するレスです。
そのときの変数の内容を確認してください。
そうすれば、何が悪いのかわかるはずです。

 もし、わからなかったら、確認のしかたが誤っているか、
確認した内容の意味が理解できないかどちらかです。
だから、どうやって確認したのかと確認した内容を書いてください。

 スクリプトをここにコピペできるなら、それがいちばん話が早いのですが……。



ANTARES

リンク

2007/11/9(Fri) 21:05:56|NO.12237

> 情報が少なすぎて回答不能です。
 一つだけ言えるのは、「\」を「\\」に変えても
問題は解決しないということです。

>そのときの変数の内容を確認してください。
 訂正します。
 exec命令を実行する直前の、exec命令に使っている変数の内容を
確認してください。

>だから、どうやって確認したのかと確認した内容を書いてください。
 もうひとつ、「exec」の後に何と書いているかも記してください。
(後ろや途中に全角スペースが入っていたりすることもあるので、
コピペが望ましい)



GENKI

リンク

2007/11/9(Fri) 21:52:52|NO.12239

> これをhensu = "c:\Program Files"としても動きました!

偶然です。適切な方法ではありません。

> hensu = "C:\Program Files\aa\a"
> といったようにするとエラーが出てしまいます。

当然です。その記述では「C:Program Filesaaa」フォルダを指定したことと同じことです。




さて、前回は言葉足らずだったようで申し訳ありません。
私が提示したサンプルを実行して表示された入力ボックスに

a:\Program Files\abc\ss
と入力してみてください。実在するフォルダであればちゃんと開けると思います。
あのサンプルは入力ボックスをHSPスクリプトの外、hensu変数をHSPスクリプトの中、に見立てたサンプルなんです。
HSPスクリプトの外とは設定を書いたテキストファイルや、レジストリ、実行時の引数やサンプルで示したような実行中の入力欄がそうです。
HSPスクリプトの中とはスクリプトエディタで編集する部分で、実行形式のファイルにすると編集できないものです。


変数に「C:\」という文字列を入れるために、HSPのスクリプトの中で、

hensu = "C:\\"
のように\マークを2つ続けて書くのには理由がありまして、HSPのスクリプト内では\を特殊な記号として使っているので
特殊な記号の\マークなのか、文字列の\マークなのか区別するために\マークを2つ書く仕様になっています。
これはあくまで「HSPのスクリプト内」で書くときのみの仕様で、HSPのスクリプト内だけで通用する特別な書き方です。
HSPスクリプトエディタでスクリプトを書くとき意外は普通どおり\マークは1つで十分です。

他の方が何度も繰り返し言っているように、mes命令、dialog命令、デバッグウィンドウなどで変数の中身を表示してよく確認してみてください。

hensu = "a:Program Files\abcss" mes "実際の変数の中身:"+hensu hensu = "a:\Program Files\abc\ss" mes "実際の変数の中身:"+hensu hensu = "a:\\Program Files\\abc\\ss" mes "実際の変数の中身:"+hensu hensu = hensu + " ←ここを適当に変えてみてください。" mes "hensu = " : pos 65,55:input hensu,500 pos 0 : objsize 200 : button "変数の中身を表示",*out stop *out mes "実際の変数の中身:"+hensu stop
このサンプルも、実行すると表示される入力ボックスの中身を思うように弄ってみてください。
スクリプトの方は書き換えたりする前によーく見て実行結果と照らし合わせてみてください。



>> fさん
それ上手い。



HO

リンク

2007/11/10(Sat) 18:45:00|NO.12277

>HOさん
>だからできないって何度も何度も言ってるでしょ?
はじめてみましたが(お一人できない「かも」しれないとかきこみしているのはありましたが)
出来るかのようにレスがかえってきていたから悩んでいたわけで・・・

Meganeさんの
>最初にあった「外部ファイルから読み込むとき」も、
><<スクリプトに>>直接書いたのではなく、
>他のtxtに書いたのをbloadあたりの命令で取得したわけですから、
>\ひとつで取得されて、そのまま他の命令に使えます。
この件について興味があります。もう少し詳しく教えて頂けませんでしょうか
bloadでやると出来るといった感じでしょうか

GENKIさん
なるほど、入力ボックスにですか!ありがとうございます
これから試してきます

プログラムランチャーとか入力ボックスにパスを表示させなくても
飛べるのはどういう仕組みなんでしょうか
HSPで作られたランチャーはいくつかありますが、ランチャーでボタン一つでプログラムに
飛べる仕組みがわかければ、この質問も解決するのかなと



HO

リンク

2007/11/10(Sat) 18:53:08|NO.12278

>スクリプトをここにコピペできるなら、それがいちばん話が早いのですが……。
ちなみに、これはNO.12213に書いてます
でも上記でそれは出来ないといってる方がいますので
出来ないということなのだと思います
やはりあまり話しが伝わっていないみたいです
\と\\のことについて理解しています

ランチャーとかで設定ファイルに
[path]
c:\Program Files\aa\b
とテキストで書かれているファイルを
HSP上でどう読み出しているのかなと
\を\\に変換するプログラムを組んでいるのだとは思いますが



HO

リンク

2007/11/10(Sat) 18:57:20|NO.12283

GENKIさんのサンプルで解決するかもしれません
もうすこし時間ください



ちょっと通りすがり( ・_ゝ・)

リンク

2007/11/11(Sun) 00:13:37|NO.12295

これだけ言っても解決しないという事は、問題の原因が他にありそう。
HOさんの取得した外部ファイルのパスが数値型になってたりしたり


以前のHOさんの発言で

>分かり辛くなったので具体的にかきます
>レジストリからインストールされているフォルダの情報を取得し
>それを変数に入れ、その変数をexecで実行したいという意味です。
>レジストリからひろって変数に格納まではいけるのですが
>つまり a = c:\Program Files(略) が入ってる状態です。
>ここからexecでどう起動したものか、ということです。何度もすみません。


上の発言で
 >「a = c:\Program Files(略) が入ってる状態です」

これって、普通はこう書きますよね(もっと言えば「\」は「\\」だが)
 

「a ="c:\Program Files(略)" 」

............................................



//数値型 a=c:\\ exec a,16//エラー
.................................

//文字列型 a="c:\\" exec a,16 //OK!



ANTARES

リンク

2007/11/11(Sun) 02:58:28|NO.12298

>ランチャーとかで設定ファイルに
>[path]
>c:\Program Files\aa\b
>とテキストで書かれているファイルを
>HSP上でどう読み出しているのかなと
>\を\\に変換するプログラムを組んでいるのだとは思いますが

 わかりました。
HOさんは「\」を「\\」に変えなければならないと信じていて
誰が何といおうとその信念を変えるつもりはないということですね。

 では、aさんのアドバイスに従って「\」を「\\」に変える
スクリプトを書いて、何の役にも立たないことを思い知ってください。

 何、サンプルスクリプトが欲しい?
一生かかっても実現不可能なことに手を貸すほどヒマではありません。

 私がある有名な推理作家のことを「アール・スタンリー・ガードナー」
(Erle Stanley Gardner)と言ったら
「それは間違っています。僕は知っているんです。E・S・ガードナーです。」
と言った人がいました。



f

リンク

2007/11/11(Sun) 06:54:42|NO.12299

なんか激しく突っ込みどころ満載だったので、激しくつっこんでみる。

>>だからできないって何度も何度も言ってるでしょ?
>はじめてみましたが(お一人できない「かも」しれないとかきこみしているのはありましたが)
>出来るかのようにレスがかえってきていたから悩んでいたわけで・・・

この発言からして、人の話を聞いていないのが良く分かって、いっそ微笑ましいよ・・・。

>ちなみに、これはNO.12213に書いてます

これはHSP上で位置指定してるだけだろが。
外部にどんな内容のファイルを置いて、
HSPでそれをどのように読み込んで、
HSPでそれをどのように実行しているか、

それを見せろと言っているんだ。

>\と\\のことについて理解しています

いや、理解してない。
断言しとく。

>ランチャーとかで設定ファイルに
>[path]
>c:\Program Files\aa\b
>とテキストで書かれているファイルを
>HSP上でどう読み出しているのかなと
>\を\\に変換するプログラムを組んでいるのだとは思いますが

ではそのような変換プログラムを組まずにテキストファイルに書いた位置のアプリを起動できたら、


校 庭 1 0 周 な。


「このようにしたい」と聞くより
「このような問題が起きています」聞くほうが早いんでね?

「こうしたい」と思っているだけで何にもしていないのか、
それとも作ってみた所、エラー14辺りが出ているのかはっきりしてないしな。
エラー14ならはっきり言っとくが、単純に実行ファイルの指定を間違ってるぞ。
\や\\は関係なく。
「そんなに出来ない事なのか?」と思って確認スクリプト書いた時に、
間違って空文字列を指定してエラーだした俺が言っとく(笑


思うに、この状態では誰もサンプルは書いてくれないんでね?
自分自身で気付いてもらわないと、どうにもならんだろうし。



tks

リンク

2007/11/11(Sun) 10:14:53|NO.12304

こんなのでどうでしょう?

a="C:\\Program Files\\a.txt";スクリプトで書くときだけ\\ mes a;そのあとは\ bsave a,a,strlen(a);保存したファイルを開いてみてください。これも\ exist a sdim b,strsize+1 bload a,b,strsize mes b;そのファイルを読み込んだ変数も\ exec b,16;でも無事に開けます



AKIHIRO

リンク

2007/11/11(Sun) 11:34:54|NO.12306

ようするに記述するときには\\と記述しなくてはならず。

変数に代入されているものに対しては¥だけで機能的に問題ないので、わざわざ
その変数の中の¥を\\に変換する必要はないということでは?

何度も皆様が同じことを指摘しているのに、間違いを認めない頑固さはもっと
違うところで発揮したほうがいいです。



dll

リンク

2007/11/11(Sun) 12:02:22|NO.12307

HOさん NO.12278
>\を\\に変換するプログラムを組んでいるのだとは思いますが

だからさ〜、上の方で何度も言ってるだろ?
\\を使うのはスクリプトエディタで書く時だけって。何度言ったら分かるの?
ホントに頑固だねぇ〜



Hue

リンク

2007/11/11(Sun) 14:35:02|NO.12310

もう回答してるからもうこのスレあげる必要ないんじゃないかな・・・
HOさんはわかってないみたいだけど同じこと何度いっても意味ないと思うし。



RabbitLeo

リンク

2007/11/11(Sun) 14:52:02|NO.12311

返信件数が多いのに解決してないみたいなので思ったことを書かせてもらいます。

>No.12212 HOさん

>フォルダを開きたいのですが・・・
>エラー内容は外部ファイル呼び出し中のエラーです。とでます。

と書いてありますが、フォルダを開くときは
exec a

では開けないと思います。 ヘルプを見ればすぐに分かるのですが、
exec "filename",p1,"command"

"filename" : 対象となるファイル名
p1=0〜(0)  : ファイル実行モード
"command"  : コンテキストメニューの操作名

  〜(中略)〜

  操作名     |     説    明
 ---------------------------------------------------------------------
  edit       | エディタを開いて編集する。
  explore    | フォルダを選択して、エクスプローラを起動します。
  open       | 関連付けられたアプリケーションでファイルを開きます。
  print      | 関連付けられたアプリケーションでファイルを印刷します。
  properties | ファイルまたはフォルダのプロパティを表示します。
ということです。

フォルダを開きたい場合は、
第3パラメータ(command)に "explore" を指定してやればいいのではないでしょうか?

違っていたらすみません。



Hue

リンク

2007/11/11(Sun) 16:02:58|NO.12313

このスレほっとくと上がり続けるから一応・・・。

>それいったらでもプログラムランチャーってどういう仕組みで出来ているのかなと興味があります。

ってことでランチャー作ってみた。ソースコードは↓のアドレス。
ttp://www5.uploader.jp/dl/korosama/korosama_uljp00022.zip.html
DLパス:hsp3

↑のプログラムは起動して参照を押して何かファイルを選択したら入力ボックスにそのファイルのパスが代入
されるようになってる。その代入されたファイルパスをよーくみてね。\は1個だけだから。
\\に変換する必要がないってことわかるんじゃないかな・・・


もちろん外部から読み込んでやる場合も同じ。
ちなみに外部から読み込んでフォルダ、またはファイルを開くソースコードはこれ

sdim test,1000 bload "a.txt",test exec test,16
ちなみにsdimで1000もとる必要ないから減らしてね。

a.txtの中身は
例で言えば C:\Program Files\hsp31\readme.txt    (\は1個だぞ!)
間違わないとは思うけどbloadでa.txtを読み込むから
カレントディレクトリにa.txtを置いておく必要があるよ

これでダメなら諦めるの推奨・・・



As

リンク

2007/11/11(Sun) 21:53:56|NO.12325

なんか笑ってしまう・・・。笑


エディタ上で\を書く場合は「\\」としてください。
これはエディタ上のみのことで bload noteload 命令で読み込むファイルでは
わざわざそんなことする必要はないです。

めんどくさいですがこういう仕組みなので我慢してください。



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