writeinistr 等の Unicode 対応No.08739
IKKI さん 15/10/13 22:14
 
秀丸担当さん、こんばんは。

writeinistr 等の Unicode 対応版を追加できませんか。

現状でも ht_tools.dll を使えばできるのですが…
本体の外部入出力系関数で Unicode 非対応なのって、もはや INI ファイル関係だけ
な気がします。
turukame.3:05503 の話では API が NT 系限定な点がネックになりそうな感じでした
が、
Windows 9x の完全サポートはもうあきらめても良い頃合いなのでは……?

ご検討いただければ幸いです。

[ ]
RE:08739 writeinistr 等の Unicode 対応No.08740
でるもんたいいじま さん 15/10/13 22:36
 
IKKIさん、こんばんは。

> writeinistr 等の Unicode 対応版を追加できませんか。
...
> turukame.3:05503 の話では API が NT 系限定な点がネックになりそうな
> 感じでしたが、
> Windows 9x の完全サポートはもうあきらめても良い頃合いなのでは……?

うーむ。いまだに工場とかではWindows 9xで機械を制御しているところが
山ほどありそうな気がします。もちろん、現役の機械が壊れたら中古市場を
あたり、それでもダメならVirtualPCとかの中でWin9xを動かす予定のところが。

個人的にもWindows 98/Meのサポートは続けてほしいと思います。

もちろん、INIファイル系をUnicode対応にすること自体には賛成です。

64bit版ではそのままkernel64.dll(かな?)を呼べばいいはずですし、
32bit版ではまずLoadLibrary("kernel32.dll")して、それから
GetLibrary("GetPrivateProfileStringW")がNULLを返さないことを
確認して、最終的にCallLibrary()、というラッパー関数をちょいと
書けば行けると思います。

[ ]
RE:08740 writeinistr 等の Unicode 対応No.08741
IKKI さん 15/10/13 22:44
 
いいじまさん、こんばんは。

>うーむ。いまだに工場とかではWindows 9xで機械を制御しているところが
>山ほどありそうな気がします。
はい。そのあたりは承知していて、なので「完全」サポートと書きました。
つまり、9x 系でも秀丸自体は使えるけど Unicode 版の関数を呼ぶとエラーになると
か、そういうイメージです。

[ ]
RE:08741 writeinistr 等の Unicode 対応No.08742
でるもんたいいじま さん 15/10/14 05:46
 
いいじまです。

>>うーむ。いまだに工場とかではWindows 9xで機械を制御しているところが
>>山ほどありそうな気がします。
> はい。そのあたりは承知していて、なので「完全」サポートと書きました。

なるほど。そういう意図でしたか。

> つまり、9x 系でも秀丸自体は使えるけど Unicode 版の関数を呼ぶと
> エラーになるとか、そういうイメージです。

はい、私も同意見です。
とすると、Windowsのバージョンを取得するためのキーワードが欲しく
なりますね。たとえば次の2つ。
 ・OPの種類 → 0(=9x系)、1(=NT系)、3(=64bit)を返す
 ・Windowsのバージョン → たとえば Windows2000なら0x500を返す

[ ]
RE:08742 writeinistr 等の Unicode 対応No.08743
K'zawa さん 15/10/14 09:33
 
いいじまさん、こんにちは。
K'zawaです。

>とすると、Windowsのバージョンを取得するためのキーワードが欲しく
>なりますね。たとえば次の2つ。
> ・OPの種類 → 0(=9x系)、1(=NT系)、3(=64bit)を返す
> ・Windowsのバージョン → たとえば Windows2000なら0x500を返す

platformキーワードで取得できます。

[ ]
RE:08743 writeinistr 等の Unicode 対応No.08745
秀丸担当 さん 15/10/14 14:55
 

writeinistr等のUnicode対応は確かにしていないです。
APIがNT系というのはあまり問題とはならないですが、既存のINIファイルが
Unicode(UTF-16)ではなかったり、新規にiniファイルが作成される場合は
Unicode(UTF-16)とはならないことが懸念されていました。
これはWindowsの持つ挙動で、それと同じということであれば文法そのままにし
て対応することもできると思います。
そういう方向でしてみます。

Windowsのバージョン等を知る補法はK'zawaさんの言われる通りplatformキー
ワードで取得できます。

[ ]
RE:08745 writeinistr 等の Unicode 対応No.08746
IKKI さん 15/10/14 15:23
 
もしかして誤解があったらいけないので補足します。
私が言ったのは、既存の writeinistr とは別に、Unicode 専用の writeinistrw 関
数を用意するという意味でした。

>既存のINIファイルがUnicode(UTF-16)ではなかったり、
>新規にiniファイルが作成される場合はUnicode(UTF-16)とはならない
>それと同じということであれば文法そのままにして対応
これは既存の writeinistr 関数をそのまま Unicode にも対応させる、という意味に
聞こえます。
それだと、ご指摘のような非互換の問題が出てくると思います。



[ ]
RE:08746 writeinistr 等の Unicode 対応No.08747
でるもんたいいじま さん 15/10/14 15:37
 
いいじまです。

ありがとうございます>K'zawaさん

IKKIさん:
> もしかして誤解があったらいけないので補足します。
> 私が言ったのは、既存の writeinistr とは別に、Unicode 専用の
> writeinistrw 関数を用意するという意味でした。

私は文法としては、find系と同じように
writeinistr "xyz.ini","section","key","value",unicode;
とするほうがわかりやすいのではと思います。最終的には好みですけど。

>>既存のINIファイルがUnicode(UTF-16)ではなかったり、
>>新規にiniファイルが作成される場合はUnicode(UTF-16)とはならない
>>それと同じということであれば文法そのままにして対応
> これは既存の writeinistr 関数をそのまま Unicode にも対応させる、
> という意味に聞こえます。
> それだと、ご指摘のような非互換の問題が出てくると思います。

いや、秀丸担当さんがおっしゃりたいのは、仮に新しい予約語を導入しても、
writeinistrw(仮称)の中身がAPIのGetPrivateProfileStringWを呼ぶ
だけであれば上記のようになってしまう、ということだと思います。

秀丸マクロの新しい関数を呼べば新規のiniファイルでも、あるいは
すでにCP932で作成済みのiniファイルでもUTF-16になってくれる、
ということまで期待すると、「じゃあそのへんはあなたがマクロで
実装してよ」ということになると思います。

[ ]
RE:08747 writeinistr 等の Unicode 対応No.08748
IKKI さん 15/10/14 16:33
 
>writeinistr "xyz.ini","section","key","value",unicode;
>とするほうがわかりやすいのではと思います。最終的には好みですけど。
あ、はい、それはどっちでもいいです。
私が言ったのは、このように
  writeinistr("xyz.ini", $ASCII, $ASCII, $ASCII);
  writeinistr("xyz.ini", $Unicode, $Unicode, $Unicode);
全く同じ構文で透過的に ANSI(SJIS)/Unicode の自動判別を行うことを秀丸担当さん
がもし考えているとしたら、それは無理があるのではないか?ということでした。

>writeinistrw(仮称)の中身がAPIのGetPrivateProfileStringWを呼ぶ
>だけであれば上記のようになってしまう、ということだと思います。
そうだとすると、
Unicode 版の関数が既存の CP932 で作成済みの INI ファイルを読み書きできないの
は OK (仕方ない) ですが、
Unicode 版の関数で INI ファイルを新規作成したときは Unicode のファイルを作っ
てほしいですね。
ちょうど h-tom さん作 ht_tools.dll 相当の使い心地を期待しています。

[ ]
RE:08748 writeinistr 等の Unicode 対応No.08751
秀丸担当 さん 15/10/14 17:22
 

でるもんたいいじまさんの言われるように、Unicode専用のwriteinistrwを作っ
たとしても、既存の非Unicodeのiniファイルや新規のiniファイルでは、結局
Unicodeにはならないです。
writeinistrwはUnicodeが保証されず、保証されるのはやはり非Unicodeまでとい
うことになり、互換性の面でも従来のgetinistrはどのみち「?」に変換されるの
で、別にする意義があまり見いだせないと考えました。

ですが新規のiniファイルで、Unicode(UTF-16)のファイルをあらかじめ作ってか
ら作成するという機能が付くのであれば、それなりに意義はあると思います。
別にするということで考えてみます。

[ ]
RE:08751 writeinistr 等の Unicode 対応No.08754
秀丸担当 さん 15/10/15 17:04
 

V8.56β10で、writeinistrw等のUnicode版を追加してみました。

[ ]
RE:08754 writeinistr 等の Unicode 対応No.08757
IKKI さん 15/10/16 13:16
 
早速のご対応ありがとうございました。
とりあえず使ってみたところ、意図したとおりに動いているようです。
また何かありましたらご報告します。

[ ]