« 【よみもの】もーりおのつぶやき 第37回 | メイン | HSPTV!メルマガ 第69号 »

2008年12月18日

【講座】「教えて!おにたま!!」

<松尾 さんからのおたより>

はじめまして。
hsp3.1を使用させていただいて間もないのですが、現在
簡易mlソフト作りにチャレンジしています。
しかしながら、hspにはpop3サーバーから送信されてくる
データを、1行ごと、つまり改行マークまでを1ラインとした、
例えばn88-basicでいうところの「line
input#?」のような関数がなく、困っています。


<こたえ>

line inputステートメントは、今ではあまり知られていないと
思いますが、n88-basicなど昔のMicrosoft系BASICにあった
定番のストリームアクセス命令ですね。懐かしいです。
さて、HSPではネットワークやシリアル通信からのデータを
1行単位で取ってくる命令を標準では用意していません。
しかし、命令の組み合わせで同様の処理は実現可能です。
主に以下の方法が取れると思います。

・変数バッファ(メモリ)に受信データを一気にすべて読み込んだ
後に、テキストを1行づつ取り出す
・受信データを1文字(1バイト)づつ改行コードが出てくるまで
取り出してから、処理を行なう

上の方法であれば、データを取り出した後、メモリノートパッド
命令(noteselやnoteget等をヘルプで検索してください)か
getstr命令により1行単位で取得することができます。
サンプルのnote1.hspやnote2.hspも参考になるかと思います。
下の方法は、シリアル通信のサンプルで行なっています。
「sample/hspext/terminal.hsp」を参考にしてみてください。
ソケット通信の場合は、受信部分をsockgetc命令で行なうと
考えるといいでしょう。

それでは、またまた。HSPに限らず、PCのコトや
プログラミング関係どんなことでもお便り待っていますね。

(おにたま)

投稿者 usuaji : 2008年12月18日 06:28

口臭チェッカー市場