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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0117
entecテキストファイル保存の最大?8解決


entec

リンク

2016/1/17(Sun) 20:59:18|NO.74173

テキストエディタを作っているのですが、およそ32000バイトほどで文章が切れてしまいます。
具体的には、Wikipediaの「日本」の記事で、”最東”のところ切れてしまいます。
notesave,bsave,さらにはWin32APIでも試してみましたが、どうしても最後まで保存できません。


filename=dir_desktop+"\\textfile.txt" text="Hello, world!" ;Win32APIを使用 #uselib "kernel32.dll" #func CreateFile "CreateFileA" sptr,sptr,sptr,sptr,sptr,sptr,sptr #func WriteFile "WriteFile" sptr,sptr,sptr,sptr,sptr #func CloseHandle "CloseHandle" sptr #define GENERIC_WRITE $40000000 #define CREATE_ALWAYS $00000002 #define FILE_ATTRIBUTE_NORMAL $00000080 CreateFile varptr(filename),GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 hFile=stat writtensize=0 WriteFile hFile,varptr(text),strlen(text),varptr(writtensize),0 CloseHandle hFile hFile=0 ;notesaveを使用 notesel text notesave filename ;bsaveを使用 bsave filename,text,strlen(text)

Wikipedia「日本」の記事をすべて完全に保存できるようにしたいです。
よろしくお願いします。



この記事に返信する


zero

リンク

2016/1/17(Sun) 21:24:18|NO.74174

試しにWikiの日本の記事をテキストファイルに保存して、
noteloadで変数に読み込んでからnotesaveで別のファイルに
保存してみましたが、正常に保存されていましたよ。

Wikiの記事のデータはどのように取得していますか?



tds12

リンク

2016/1/17(Sun) 21:37:28|NO.74175

mesboxから取得できる文字列は、32KBで切り捨てられてしまいます。
http://hsp.tv/play/pforum.php?mode=pastwch&num=29606



科学太郎

リンク

2016/1/17(Sun) 21:50:52|NO.74176

次のやり取りを参考にどうぞ。

・mesbox命令のバグでしょうか?仕様でしょうか?
http://hsp.tv/play/pforum.php?mode=all&num=73634



zero

リンク

2016/1/17(Sun) 22:00:55|NO.74177

あ、とんちんかんな回答をしてしまいすみません。
指摘されているようにmesboxでは仕様によって長い文字列を
扱えないので、Footyなどを使うほうがいいかもしれませんね。



entec

リンク

2016/1/18(Mon) 06:53:49|NO.74181

はー、なるほど。
でも、メモ帳とかもおなじテキストコントロールなのではないのでしょうか?
なんとかなりませんかね?



科学太郎

リンク

2016/1/18(Mon) 12:34:09|NO.74182

> なんとかなりませんかね?
解決策は私が紹介した「mesbox命令のバグでしょうか?仕様でしょうか?」の「NO.73636」にあります。
保存するときに WM_GETTEXT メッセージを使って取得します。
そうすれば notesave 命令でも32Kバイトを超えるテキストを保存可能です。



entec

リンク

2016/1/18(Mon) 16:53:11|NO.74183

ありがとうございます!
無事、32KB以上のテキストを保存できました。


#define WM_GETTEXT $0000000D #define WM_GETTEXTLENGTH $0000000E sendmsg mesboxのハンドル,WM_GETTEXTLENGTH,0,0 textsize=stat sdim text_save,textsize sendmsg mesboxのハンドル,WM_GETTEXT,textsize,varptr(text_save) notesel text_save notesave filename

具体的には、WM_GETTEXTLENGTHでサイズを確認してから、WM_GETTEXTで変数に書き込んでいます。



na

リンク

2016/1/19(Tue) 00:46:33|NO.74187

>WM_GETTEXTLENGTHでサイズを確認してから、WM_GETTEXTで変数に書き込んでいます。
ヌル文字を考慮しないとだめですよ。

textsize=stat+1



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