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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0907
スカイmesboxに2.8MB程度の文字をコピペして全文保存したい5解決


スカイ

リンク

2015/9/7(Mon) 23:49:02|NO.71466

mesboxに2.8MB程度の文字をコピペしてnotesaveで保存しようとしましたが、32767文字程度までしか保存できませんでした。

mesboxの説明には、
---------------------------------------------------------------------------------------------------------
p5で、入力できる最大文字数を指定することができます。
p5が0の場合は、そのバージョンのWindowsで扱える最大文字数になります。
p5が省略されるかマイナス値の場合には、p1で指定された変数に格納できる最大文字数が自動的に割り当てられます。
---------------------------------------------------------------------------------------------------------
とありますが、

省略、-1、32768以上を指定しても、32767文字程度までしか入力できず(コピペも、キーボードから打ち込んでも無理)
0を指定すると32767文字を超える物も全文ペーストでき、さらにキーボードから打ち込む事も可能ですが、
strlenで文字数をチェックするとは32767文字と表示されてしまいます。
このままnotesaveで保存しても、32767文字程度までしか保存できませんでした。
また、csv検索等の命令も、32767文字程度までしか検索対象になりませんでした。

しかし、ファイルからデータを読み込んだ変数を指定してmesboxを作成した場合は、strlenで正常に文字数が取得可能で、
このままnotesaveすると全文保存でき、csv検索等の命令も全行検索対象となりました。
ただし、予め作成してあったmesboxの内容をobjprm命令で変更した場合は、32767文字程度までしか保存できないようです。

ファイルから読み込めば2.8MB程度の文字列を正常に保存可能でしたが、
これをmesboxにコピペ→正常に保存したいのですが、(できればCSV検索等の命令も使用したい)どうすれば良いでしょうか?
当方、HSP以外の言語や、DLLやモジュール等を作成できる知識はありません。
よろしくお願い致します。


以下使用したスクリプトです

sdim a,300000 mesbox a,640,390,1,0 objsize 640,30 button "文字数チェック",*check button "ファイルから読み込む1 (mexboxオブジェクトを一度削除して、データを読み込んだ変数でmesbox再作成)",*file_load1 button "ファイルから読み込む2 (objprmでmesboxの内容を読み込んだデータに書き換える)",*file_load2 stop *check dialog "文字数:"+strlen(a) ;notesel a : notesave "a.txt" stop *file_load1 dialog "txt",16 if stat=1 : notesel a : noteload refstr : clrobj 0,0 : pos 0,0 : mesbox a,640,390,1,0 stop *file_load2 dialog "txt",16 if stat=1 : notesel a : noteload refstr : objprm 0,a stop



この記事に返信する


スカイ

リンク

2015/9/8(Tue) 01:38:07|NO.71474

似たようなスレッドを発見し、無理だという事が分かりました。
あきらめる事にします。
ありがとうございました。



toto

リンク

2015/9/8(Tue) 02:10:00|NO.71476

自動は無理ですが手動で取得することは可能です。

#define WM_GETTEXT 0x000D #define WM_GETTEXTLENGTH 0x000E sdim s,1000000 mesbox s,640,300,1,0 hmes=objinfo_hwnd(stat) button "get",*get stop *get sendmsg hmes,WM_GETTEXTLENGTH,0,0 sdim ss,stat+1 sendmsg hmes,WM_GETTEXT,stat+1,varptr(ss) title "テキストの長さは"+strlen(ss)



kanamaru

リンク

2015/9/8(Tue) 08:00:31|NO.71477

別スレッドで言いましたが、
windowsAPI使ってリッチエディットコントロールを使えば、
mesboxより多くの容量を扱うことができます。
http://d.hatena.ne.jp/As_hsp/20091120/1258693836
にモジュールがあります。
で、このままでは使える量はmesboxと変わらないので、
http://chokuto.ifdef.jp/urawaza/richedit2.html
などを参考にsendmsgでEM_EXLIMITTEXTを送信します。
これで2.8MB程度扱えるはずです。



mjhd

リンク

2015/9/8(Tue) 11:34:50|NO.71481

別の手段としてFooty2を使う手もあります。HSPスクリプトエディタのエディタ部分と同じものが使えます。
http://www.hpp.be/Download/FileDetail.aspx?id=55



スカイ

リンク

2015/9/8(Tue) 18:08:29|NO.71495

toto 様
サンプルスクリプト、どうもありがとうございます。
私がやりたかった事が、全て達成できてしまいました。


kanamaru 様
教えていただいたリンク先
http://d.hatena.ne.jp/As_hsp/20091120/1258693836
にあるモジュール内の
「//リッチエディットを作成する」と「//書式設定を行う」の間にあるreturnの上に、

pm = m_hwnd, 0x0435, 0 pm(3) = 10 * 1024 * 1024 ; 10Mバイトに設定 sendmsg pm(0),pm(1),pm(2),pm(3)
を追加する事で2.8MB程度のテキストをペースト可能になりました。
参考として教えていただいたリンク先
http://chokuto.ifdef.jp/urawaza/richedit2.html
と、HSPのマニュアルのsendmsgの説明を参考にスクリプトを書いてみました。
これで本当に合っているかは分かりませんが、無事、解決に至りました。
どうもありがとうございました。


mjhd 様
ありがとうございます。
現在、DLして説明書を読んでいる段階ですが、私には難易度が高すぎて
すぐにどうこうは出来なさそうです。
今回の目的とは異なりますが、文字コードの事等、魅力的な機能があるようですので、
説明書を見ながら、少しずつ色々と試してみようかと思います。
どうもありがとうございました。



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