★ INCM Plug-in開発掲示板 ★ TinyGrass Ver0.32a [戻る]
[0037] 00/02/01 01:30 RAY(7Lr5MGQzWps): Re:36)なるほど〜
> えーと、深く考えたことはなかったんですが、ファイルハンドル
>はそれぞれ独立しているので、順番は関係ない…と思います。
そうなんですか。ありがとうございます。
これで安心して作ることが出来ます。
> アセンブラではどちらでもよかったんですが、Cの場合はスタ
>ックみたいのにファイルハンドルを積んでるんでしょうか…?
詳しいことは分かりませんが,おそらく。
BASICでいう for〜nextのような入れ子構造と同じだと
随分前に教わった記憶があります。
RAY
[0036] 00/01/31 07:28 一 五明(9v2hKa5FPfo): Re:35)順番はどっちでもいいはず
>きちんと書く場合の正しい書き方がよく分かりません。
># というか分からなくなってしまいました。
>open(IN,$infile);
>open(OUT,$outfile);
>の順番で開いた場合どのように閉じるのが正しいのでしょうか?
えーと、深く考えたことはなかったんですが、ファイルハンドル
はそれぞれ独立しているので、順番は関係ない…と思います。
>C言語などの場合は以下のように閉じますが
>close(OUT);
>close(IN);
あ、これ初めて知りました(^^;
アセンブラではどちらでもよかったんですが、Cの場合はスタ
ックみたいのにファイルハンドルを積んでるんでしょうか…?
例えばDOSの場合は1プロセスで15ファイルまでしか開けないの
で、これを言語内で回避するような処理を入れているとすればそ
うなる可能性はありますね。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0035] 00/01/30 23:37 RAY(Wm3GACyDPtU): perlについての質問なんですが
ここには初めて書き込みます。RAYといいます
幾つかプラグインを作っているのですが
今になってふと疑問に思う命令がありまして…
いろいろと調べたのですが
調べれば調べるほど分からなくなって困っています。
その命令というのは close() なんです。
perlの場合は書かなくてもプログラムが終了するか
新たに open()を使えば閉じてくれるようなんですが
きちんと書く場合の正しい書き方がよく分かりません。
# というか分からなくなってしまいました。
たとえば
open(IN,$infile);
open(OUT,$outfile);
の順番で開いた場合どのように閉じるのが正しいのでしょうか?
C言語などの場合は以下のように閉じますが
close(OUT);
close(IN);
perlのプログラムでは逆に閉じているものもあり
どちらが正しいのか判断が付きません。
もしかして, 閉じる順番は関係ないのでしょうか。
incmのプラグインもよく見ているのですがよく分かりませんでした。
なにか規則性があるのでしたら教えていただきたいのですが…。
よろしくお願いします。
RAY
[0034] 00/01/30 19:43 一 五明(9v2hKa5FPfo): ▼Perl入門(3)書き換え…記事単位に区切る
まず、さっきコピー&名前変更したサンプルをエディタで読み込みます。
サンプルベースは、とりあえず34行目辺りの「記事の出力」と書いてある
辺りを書き換えればいろんなのが読めるようになってます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
##### 記事の出力 #########################################################
ATCL:{
$page+=1; print STDOUT "\nPage $page:";
$/="<hr"; # 区切り
while(<HTTP>){ # 区切り毎に、ファイル終端まで $_に読む
print LOG $_; s/\r\n?/\n/g;
if($date=&getdate($_)){ # $dateに日付が取得出来たら記事とみなす
$date=~s/^..//; # 年を2桁化
print STDOUT "*"; # 読み取り状況表示
$head="";
$head=~s/&([a-z]+);/unamp{$1}/eg; # 特殊文字デコード
$user=&geturl($_,$head); # HP/Mailアドレスの抽出
print "S:*,*,$date,\n",$head; # 記事ヘッダ出力
&wrtmes($_,$user); # 本文の出力
}
} # ← while(<HTTP>)の終わり
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
この付近です。
なお、エディタのタブ(TAB)設定は4にして下さい。TAB8だと右側のコメントが
次の行に飛びます。PerlスクリプトはTAB4で書かれていることが多いので、拡張
子別にTAB設定が出来るエディタの場合、.plは4に設定しておいたほうが無難です。
(この文章中ではTAB8に直してます)
で、まず最初に書き換えるのは、さっき引用した上のほうの
$/="<hr"; # 区切り
です。この中の"<hr"の部分を、掲示板システムの区切りに応じて書き換え
るわけです。どういう文字(タグ)が区切りになってるかは、掲示板のHTMLファ
イルを覗いて見て下さい。"<table","<TABLE","<hr","<HR" 等で上手く行く
ことが多いようです。
なお、"<hr>"のようにタグ丸ごと指定してもいいのですが、この辺は掲示板
の管理者が書き換えたりしている(例えばhrタグなら<hr size=4>のように)
可能性が高いので、タグの先頭部分だけを区切りに指定したほうが無難なわけ
です。
プロバイダ提供、掲示板サイトの専用掲示板などでカスタマイズが有り得な
い場合はタグ丸ごと使っても構いません。
書き換えたら巡回なりインポートなりしてみれば、タイトルや名前、あるい
はNo.のある掲示板はそれも取得出来てませんが、一応それらしくなってる(?)
と思います。
ただし、書き込み日付の無い(もしくは想定外の形式の)掲示板は読めません。
次はタイトル等の抽出方法の説明、の予定。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0033] 00/01/30 19:43 一 五明(9v2hKa5FPfo): ▼INCMのためのPerl入門(2)書き換える前に
とりあえず、書き換える前に覚えておくことです。
◇ cm_****.plのいろんな呼び名
cm_****.plは、INCMのプラグインであると同時にPerlのスクリプトであり、
プログラムであり、ソース(ファイル)です。
要するに(それぞれニュアンスの違う)いろんな呼び方をされることがあっ
て紛らわしいのですが、基本的に指してるものは同じです。
(C言語等の場合はソースと実行ファイルが別だったりして、もう少しやや
こしい)
◇ スクリプトは先頭から順に実行される
正確にはサブルーチン部分は除きますが、とりあえずサンプルで書き換える
範囲に関してはそう思ってOKです。なおサンプルでは、「##### CMLIB15:〜」
という行以降がサブルーチンです。
◇ 「#」以降、行末までは実行されない(コメント部)。
ただし、"〜" や '〜'で囲まれた部分に出て来る「#」は除きます。
どこが実行される部分で、どこがコメントかは見れば何となく判ると思います。
逆に言えばコメント以外の部分は、先頭から順番に何らかの動作を行います。
◇ ただし実行出来ない場合もある(エラー)
エラーには、
・実行前に出て、最初からスクリプトが実行出来ないエラー(コンパイル時
エラー)
・実行中に出て、そこで動作終了するエラー(実行時エラー)
の2種類が有ります。詳しくは後述します。
◇ 実行単位(命令)毎に、後ろにセミコロン(;)を付ける。
これをせずに次の命令を続けて書いてしまうとエラーになります。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0032] 00/01/30 19:43 一 五明(9v2hKa5FPfo): ▼INCMのためのPerl入門(1)準備
…というわけで、Perlでプラグインを開発したいという人のための
Perl入門です。ほとんど無理矢理の見切り発車で我ながら不安なもの
はありますが、よろしくお願いします(^^;
さて、何はともあれ、INCMとPerl製のプラグイン(cm_*****.plのよ
うなやつ)が使える状態であることが前提です。
次にサンプルベース
http://www.teleway.ne.jp/~timeflow/CM_SAMPL.LZH
…をダウンロードします。cm_sample.plと言うファイルが入ってます。
これをINCMのフォルダにコピーして、作りたいプラグインの対象掲示
板(システム)名に名前変更して下さい。
で、読みたい先のBBSフォルダを作成しURLを設定し、プラグインにさっ
きコピー&改名したのを選択します。
で、それをシステムに合わせて書き換えれば、巡回や、インポート
(ローカルHTMLファイルの変換)する際、呼び出されて使えるわけです。
なお、今回のサンプルベースは比較的単純なシステムが前提です。ツ
リー系等の複雑なシステムのサンプルはそのうち作る予定です。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0031] 00/01/29 07:58 一 五明(9v2hKa5FPfo): Re:30)RE: G-LIGHTプラグイン
> 標準状態(KENT-WEBのサンプルのような状態)のG-LIGHT掲示板を
G-LIGHTの最近のバージョンはタイトル無いんですよね…代わりに地域名
が付いたりして。
タイトルの有無の判別はFORMから出来るので、修正しようと思います。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0030] 00/01/29 00:20 まさか(XlhZSp9.Fuk): G-LIGHTプラグイン
G-LIGHTプラグインを使っています。
標準状態(KENT-WEBのサンプルのような状態)のG-LIGHT掲示板を
巡回したときに、INCMで「タイトル」「発言者」等の内容がずれる
ことがあります。どうやらメールアドレスを省略した場合に起こっ
ている様子。
プラグインのソースを見ると、最初の<b>〜</b>(間タグなし)を
タイトルとしているようですね。が、私の巡回する掲示板ではタイ
トルがないほか、メールアドレスを省略すると発言者が<b>〜</b>
(間タグなし)となるため、ずれてしまうのではないかと思います。
とりあえず私の環境では、
s/<b>([^\n<]+)<\/b>//; $title="T:$1\n"; # タイトル
の行をコメントアウトすることで、正常っぽく動いています。
でもこれ、ちゃんと対応すると、タイトルのある掲示板とない掲
示板とで処理を変えなくちゃならないですね。
[0029] 00/01/27 19:58 一 五明(9v2hKa5FPfo): Re:27)RE: Yahoo掲示板
>chat_pf_1
>って、どんな意味なのでしょうか?
Yahooの送信FORM中のデーターで、「1番目のニックネーム」の意ら
しいです。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0028] 00/01/27 02:07 なっちゃん(r8LlEgcjC4c): Re:27)Re: Yahoo掲示板
あ、名前わすれた
[0027] 00/01/27 02:05 ???(r8LlEgcjC4c): Re:7)Yahoo掲示板
いまだに、掲示板への書きこみ方ががわからず、苦戦しております。
>「ヘルプ」に『記事のプロパティのPOSTでchat_pf_1のように
chat_pf_1
って、どんな意味なのでしょうか?
[0026] 00/01/24 20:48 一 五明(9v2hKa5FPfo): TGrass0.30のバグ?
ここの掲示板に、おそらく「Webモードから10番に返信しようとした
ところ、なぜか1番への返信になって、タイトルが0になった」らしい
書き込みがあります。INCM掲示板でも同じ現象が起きてますね(^^;
実は、「>10」とか「Re10」しか書き込まなかった場合そうなります。
返信形式は「>10 タイトル」のような形を想定していて、タイトル
は1文字以上あるものと決め打ちしていたのでそうなってしまったわけ
です。
修正はtgrass.cgiの34行目付近の
if($subj=~ s/^(RES?|>|\>)[:;\. ]*0*((\d|0|1|2|3|4|5|6|7|8|9)+)[:;\)]*( )*(.+)$/$5/i){
↑ここを
if($subj=~ s/^(RES?|>|\>)[:;\. ]*0*((\d|0|1|2|3|4|5|6|7|8|9)+)[:;\)]*( )*(.*)$/$5/i){
↑こう直せばOK…のはずです。(+だと1文字以上、*だと0文字以上)
ただしCMT出力時はタイトル部分が空白になるはずで、他のところで空白を想定
していない処理を行ってる可能性がありますので、
if($subj=~ s/^(RES?|>|\>)[:;\. ]*0*((\d|0|1|2|3|4|5|6|7|8|9)+)[:;\)]*( )*(.*)$/$5/i){ $subj="返信" if(!$subj);
↑追加
とでもして、タイトルが空白になってしまった場合強制的にタイトルを付ける
ようにしたほうが無難だと思います。
一応0.31を上げておきましたが、このくらいだと手で修正したほうが速いかも。
→ http://www.teleway.ne.jp/~timeflow/TG031.LZH
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0025] 00/01/24 06:54 一 五明(9v2hKa5FPfo): プラグイン作者はIE5に注意(;_;)
IE5の「名前を付けて保存」で保存したHTMLは、タグの大文字小文字が
変化したり、テーブルに変な字下げが入ったり(タグの中で平気で改行
したりする)、頭に変なタグがくっ付いたり、URLを勝手に書き換えたり
その他いろいろのようです。
ブラウザがIE5の場合、テスト用のローカルファイルはキャッシュから
直接掘り出すか、何もせずにログだけ記録するプラグイン(?)でも作って
取って来たほうが賢明のようです。
くれぐれも改変ログをテストに使って、本物を読ますと読めなくて最初
からやり直しと言うことにならないよう…(T_T)。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0024] 00/01/22 20:07 一 五明(9v2hKa5FPfo): Re:21)RE: 解決しました
>binmode文は2カ所にありましたが、
>最初の方だけ有効にすると解決しました。
えーと、既にCRCRLFになってしまってる場合はそうなりますかね。
binmode宣言していないファイルハンドルは入力時CRLF→LF、出力
時LF→CRLFの変換なので、入力時だけ切ればOK…みたいですね(あん
まし把握してない)。
>ところで、IDを非表示にするにはどうすれば良いですか?
>ソースをよくみると書いてありました。
あ、ドキュメントに書き忘れてた(^^;
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0023] 00/01/21 23:44 GAE(vbbj25HUgnk): Re:22)ガーン
ソースをよくみると書いてありました。
情けない(汗)
GAE
http://www.gld.mmtr.or.jp/~naofumi/incm/
[0022] 00/01/21 23:35 GAE(vbbj25HUgnk): [TinyGrass]IDの非表示
INCM掲示板の方を TinyGrass 0.30 に変えてみました。
問題なく動いているようです(笑)
ところで、IDを非表示にするにはどうすれば良いですか?
http://www.gld.mmtr.or.jp/~naofumi/incm/
[0021] 00/01/21 12:26 GAE(.yLuozr171c): Re:20)解決しました
binmode文は2カ所にありましたが、
最初の方だけ有効にすると解決しました。
INCM掲示板の方もやってみようと思います。
GAE
http://www.gld.mmtr.or.jp/~naofumi/incm/
[0020] 00/01/20 12:00 GAE(.yLuozr171c): Re:19)binmode
> TGRASS.DOCにもそれらしいことを書いてありますが、WinNTサーバーだと、
>コメントアウトしてある binmode文を有効にしないと、記録時にCRLFがCRCRLF
>になってしまうはずです。
Win98ですが確かに CRCRLF になってました。
これを変えてチェックしてみます。
> 改行コードは消滅したのか、それとも表示出来ないコードになったのか?
> またログの段階で既に改行コードは変or消滅なのか、それともログは
>(それほど)おかしくないのに、tgrassの出力段階で変になるのか、とりあ
>えずその辺りの調査お願いします。
おかしなことに、改行がつながるだけではなくて、
記事が中途半端なところから表示されます。
でもスクリプトの不具合ではないかもしれません。
別のサーバに全く同じ物をコピーしてみるとそちらではうまく動きました。
Perlのバージョンも同じものなので、何が悪いのかさっぱりわからず…。
でも、binmode文のところを有効にすればうまくいくかもしれないので
それで試してみます。
GAE
http://www.gld.mmtr.or.jp/~naofumi/incm/
[0019] 00/01/18 20:06 一 五明(9v2hKa5FPfo): Re:18)RE: ローカルサーバにてテスト
>ただ、もともとローカルで使っていた掲示板は
>Webモードだと改行コードが悪いせいか、
>一行ごとに空行が必ず入ってしまっていたので、
TGRASS.DOCにもそれらしいことを書いてありますが、WinNTサーバーだと、
コメントアウトしてある binmode文を有効にしないと、記録時にCRLFがCRCRLF
になってしまうはずです。
まだこっちは原因が判りやすいのですが…
>その後、ブラウザでWebモードを読み出してみると
>改行コードがなく、つながった状態で表示されました。
これは何なんでしょうね…
改行コードは消滅したのか、それとも表示出来ないコードになったのか?
またログの段階で既に改行コードは変or消滅なのか、それともログは
(それほど)おかしくないのに、tgrassの出力段階で変になるのか、とりあ
えずその辺りの調査お願いします。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0018] 00/01/18 16:26 GAE(.yLuozr171c): Re:17)RE: ローカルサーバにてテスト
>といってもよくわからないかもしれないので、
>後ほどログを送ります。
と思いましたが、遅れるようなログではなかったので
ちょっと調べてみます(汗)
ただ、もともとローカルで使っていた掲示板は
Webモードだと改行コードが悪いせいか、
一行ごとに空行が必ず入ってしまっていたので、
これが問題なのでしょうか…。
GAE
http://www.gld.mmtr.or.jp/~naofumi/incm/
[0017] 00/01/18 12:26 GAE(.yLuozr171c): Re:16)ローカルサーバにてテスト
ローカルにサーバをたてて使っている掲示板(0.16あたり)を
0.30 に置き換えてみたのですが、どうもうまく動きません。
記事が140程度あったので分割cgiで分割。
その後、ブラウザでWebモードを読み出してみると
改行コードがなく、つながった状態で表示されました。
といってもよくわからないかもしれないので、
後ほどログを送ります。
GAE
http://www.gld.mmtr.or.jp/~naofumi/incm/
[0016] 00/01/18 03:55 一 五明(9v2hKa5FPfo): Re:15)ここも0.30に入れ替えてみるテスト
さっき入れ替え時にFTPの改行コードの設定ミスって2重改行に
なって困りました(^^;
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0015] 00/01/17 23:56 一 五明(9v2hKa5FPfo): Re:13)たぶん出来ました>TGrassログ分割版0.30
分割数は100毎です。
読み出しは結局もっと単純?なやり方にしました。
→ http://www.teleway.ne.jp/~timeflow/TG030.LZH
一応ローカルではテストしましたが、眠いのでバグが残ってる可能
性もあります。
いきなりINCM掲示板を差し替えるのは危険な気がするので、別ディ
レクトリに0.30をインストール後、元のbbs.txtとwrtcnt.txtをコピー
してきて、分割cgiで分割後、第2掲示板みたいにしてしばらくテスト
運用してみるといいかも。元の掲示板とどう使い分けるのは問題ですが。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[0014] 00/01/17 23:10 teioo(7yWJ6GJDixY): Re:10)返信
お手数をかけますが、宜しくお願い致します m(_ _)m
[0013] 00/01/17 19:30 一 五明(9v2hKa5FPfo): Re:9)その他
書き込む際は、書き込み時のファイルオープンの
open(BBS,">>b/bbs.txt");
とあるところを
open(BBS,sprintf(">>b/bbs%4.4d.txt",int($ptmax / 50)));
にすればOKのはずです。
で、当然と言うか何と言うか一番難しいのは読み出しで、これが
できればUP出来ますがちょっと悩み中。
Perlの場合、空のファイルハンドル(<>)から読んだ場合、コマン
ドラインに書かれたファイル名(配列@ARGVに入ってます)を順番に
openして読み込んでいく(プログラム側からは単一ファイルのよう
に扱える)と言う仕様があって、確か@ARGVは条件によっては書き換
えが可能だったと思うので、それに必要ファイル名を叩き込めば現
在の処理と大差無いプログラムで出来そうな気はするんですが。
http://www.teleway.ne.jp/~timeflow/MENU.HTM
[次のページ]