●●●●TCL/TKなら俺に聞け 2●●●●
- 1 :デフォルトの名無しさん:2007/05/01(火) 14:52:44
- 【英語サイト】
プロジェクト本拠地
http://tcl.sourceforge.net/
最新版ソースコード
ftp://ftp.tcl.tk/pub/tcl/nightly-cvs/
The Tcler's Wiki
http://wiki.tcl.tk/
The comp.lang.tcl Newsgroup
http://groups.google.com/group/comp.lang.tcl/
ActiveTcl
http://www.activestate.com/products/activetcl/
【日本語サイト】
もっとTcl/Tk
http://www.interq.or.jp/japan/s-imai/tcltk/
Tcl/Tk Scripting Laboratory
http://www.geocities.jp/urano343/tcltk.html
Tcl/Tk Primer
http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/tcltk_primer/
Tcl 8.4.1 Manual Command Reference
http://www.freesoftnet.co.jp/tclkits/doc/TclCmdRef/tcl_contents_jp.htm
CategoryTclTk - mynote
http://reddog.s35.xrea.com/wiki/CategoryTclTk.html
【前スレ】
●●●●TCL/TKなら俺に聞け●●●●
http://pc11.2ch.net/test/read.cgi/tech/1033628416/
- 271 :デフォルトの名無しさん:2008/06/27(金) 23:22:33
- >>269
puts [set [set $c]]
>>267
2行は無理。BWidgetsのコンボを改造すればできるかも
- 272 :デフォルトの名無しさん:2008/06/28(土) 00:44:17
- >>271
へ〜、setって変数の参照にも使えるんだ。 勉強になりますた。
- 273 :デフォルトの名無しさん:2008/06/28(土) 03:31:47
- >>263
> ただし連続する空白文字に対する動作が意図と異なるかもしれない。
この制約がどうにも辛いです。
連続した空白があってもそれをただ一つの区切りとみなしつつ、
安全にファイルなどから読み込んだ文字列を処理するには
どうしたらいいのだろうか。
- 274 :269:2008/06/28(土) 04:50:38
- >>270
>>271
ありがとうございます。
- 275 :デフォルトの名無しさん:2008/06/28(土) 06:01:58
- >>273
そんなの教わったregsub使えよ
while {[gets $ch line] >= 0} {
puts [lindex [split $line [regsub -all -- {\s+} $line { }]] 0]
}
- 276 :デフォルトの名無しさん:2008/06/28(土) 12:50:19
- >>273
set line {He said "I am}
foreach word [string map {\" \\"} $line] {
puts $word
}
- 277 :デフォルトの名無しさん:2008/06/28(土) 14:34:54
- >>276
'{' inside string
- 278 :デフォルトの名無しさん:2008/06/28(土) 17:20:38
- 文字列の中に"や{がある事を気にする必要がある時と
必要がない時の条件がよく分からん。。。
あと、ファイルから読み込んだ行を一律regsubしてしまって
常に構わないのかどうかも。。。
- 279 :デフォルトの名無しさん:2008/06/28(土) 21:56:13
- >>278
文字列をリストに自動変換してるところは気にしろ。文字列をforeachしたり
リスト系のコマンドに直接文字列を渡したりしてるところは注意だ。
>>276
set line "He said \"I am \{ a boy \}"
foreach word [string map {\" \\\" \{ \\\{ \} \\\}} $line] {
puts $word
}
- 280 :デフォルトの名無しさん:2008/06/28(土) 23:10:12
- > \} \\\}
これは必要? あってもなくても同じではないの?
- 281 :本田:2008/07/01(火) 06:46:34
- >Tcl/Tk 8.5.3 June 30, 2008
>Tcl/Tk 8.6a1 June 25, 2008
>Tcl/Tk 8.4.19 Apr 18, 2008
http://www.tcl.tk/
- 282 :263:2008/07/02(水) 07:53:23
- >>273
そもそもの話をしてもいいだろうか。
こんなコードは試しましたか?
set lines {He said "I am
a boy"}
set i 0
foreach l $lines {
puts $i:$l
incr i
}
Tclのlist「形式」は平易ながらバイナリデータまで扱える立派な「データ構造」なので、
まともに実装しようとすればTclが最初から持ってるパーサーを実装しなおすようなことになるよ。
平易ではあるがあまり(書いたソフトの)ユーザーには触ってもらいたくないデータ形式のような気がする。
コメントも使えないしね。自分自身で読み書き保存するためにはいいけど、
ユーザーに触らせるならJSONやYAMLなどのより一般的な形式がいいだろうね。
今ならtcllibのCVS HEADにライブラリが置かれてるよ。
- 283 :239:2008/07/02(水) 09:03:58
- なんか、今頃また盛り上がってるが・・・
>>282
それじゃ根本的に違うんだよね〜
getsで一行ごとにテキストファイルから読んでるの文字列に「"」があるのがミソなんで
set lines {He said "I am}
を処理することになるんですよ。
- 284 :デフォルトの名無しさん:2008/07/02(水) 19:51:00
- 8.5から文字列をリストに変換できるかどうかチェックする
string is list $strが追加されてんぞ。
- 285 :デフォルトの名無しさん:2008/07/03(木) 00:00:27
- info completeで失敗したら、さらに1行読み込んでappendすりゃいいだけだろ
そもそもデータ自体が1行ずつ処理されるように書かれていないのになぜ、1行ずつ
処理したがるのか
- 286 :デフォルトの名無しさん:2008/07/03(木) 01:29:08
- ファイルの文書が、必ずしも""の対応関係があっている保障はないわけだが。
- 287 :デフォルトの名無しさん:2008/07/03(木) 01:43:11
- たしかにそういうこともあるな
flex/bisonでやるか PureTclでやるならfickle/taccle
- 288 :デフォルトの名無しさん:2008/07/04(金) 11:09:03
- canvasにarcなどを1000個くらい書くと激重でどうしようもありません。
自分の描画ルーチンが重いのではなく、Tkがcanvasをリフレッシュするのが激重です。
描画したアイテムを選択して移動とかするつもりはなく、単に絵が表示されればいいのですが…
こんな場合は、image photoに直接力技で図形を書いていくしかないですかね。
- 289 :デフォルトの名無しさん:2008/07/05(土) 12:36:31
- Tkのキャンバスウィジェット並みの機能ってほかのGUIフレームワークにないですかね。
書いた絵をドラッグできるとかそういう系。
- 290 :本田:2008/07/06(日) 13:21:30
- >>289
Zinc Is Not Canvas!
http://www.tkzinc.org/tkzinc/index.php
OpenGLが、速い環境が無いと、遅すぎてかなわん。
- 291 :デフォルトの名無しさん:2008/07/07(月) 21:37:10
- Zincもええが、tkpathの方がシンプルでとっつきやすいよ
- 292 :デフォルトの名無しさん:2008/07/08(火) 00:37:16
- tkpath使ったら早くなるかとおもったけど全然早くならなかった・・・
- 293 :デフォルトの名無しさん:2008/07/09(水) 07:59:32
- >>288
>>292
1000を超える描画単位(図形やウィジェットなど)をリアルタイムで取り扱うことはスクリプト言語系のツールキットでは想定されてないと思う。
素直にネイティブコードで動く言語で実装したほうが早いんじゃない? 描画結果のキャッシュでもしつつ。
- 294 :デフォルトの名無しさん:2008/07/09(水) 20:18:40
- いやまだ手はある。Tcl3DでOpenGLで直接描画すれば・・・!
- 295 :デフォルトの名無しさん:2008/07/09(水) 22:18:26
- マルチスレッド拡張使ってる人いる?
- 296 :デフォルトの名無しさん:2008/07/09(水) 23:06:43
- ときどき使う。
- 297 :デフォルトの名無しさん:2008/07/09(水) 23:44:51
- >>296
非同期で走っている複数のスレッドから進行状況や終了などをメインのスレッドで
受け取るにはどういう手段があるんでしょう? tsv でスレッド内で状況をセットして
メインでpollするというぐらいしか思いつかないのですが。 メインの方で
vwaitしてスレッドのほうからthread::sendなんて出来ませんよね?
- 298 :デフォルトの名無しさん:2008/07/10(木) 06:48:22
- C++などで書いてるソフトにTclのインタプリタを組み込んでるやつはいないだろうか。
Tcl_Eval()でTclスクリプトを実行したときにそのスクリプトにエラーが含まれていると、
エラーメッセージはResultの中に入ってる。
これをResultの代わりにエラー出力に出したいんだが、その方法がよくわからない。
やり方があるようなら教えてもらえないだろうか。
- 299 :297:2008/07/10(木) 06:54:59
- あ、だめだ。 これ以前にExpectがthread-safeで無くてスレッドからは使えないとか。
Expectを多用してるので諦めます。
http://community.activestate.com/forum-topic/expect-tcl-threads
- 300 :本田:2008/07/10(木) 07:54:03
- stderr
http://wiki.tcl.tk/2620
stderr is one of the stdio output files opened
- applications and functions tend to use it for the output of error messages.
- 301 :298:2008/07/10(木) 10:32:22
- >>300
ご協力ありがとう。
読んでみたけどどうやらこれはTclインタプリタ側(Tclスクリプト側)から
外部コマンドを呼び出したときのstderrについて議論しているみたいで、この話とはちょっと違う。
Tcl_CreateInterp()でinterpを作った後、
Tcl_SetStdChannel(channel, TCL_STDOUT);
Tcl_SetStdChannel(channel, TCL_STDERR);
を呼び出すことでinterpが呼び出すputsコマンドによる標準出力、エラー出力をトラップできることは確認できている。
だがTcl_Eval()やその他のTcl変数を直接いじるAPIを呼び出したときの文法エラー、実行時エラーは出力されないみたいなんだ。
(で、Resultの中に入っている)
こいつを、他と同じようにトラップできればいいんだが……。
- 302 :デフォルトの名無しさん:2008/07/10(木) 11:44:58
- >>297
>>299
http://www.tcl.tk/doc/howto/thread_model.html
- 303 :デフォルトの名無しさん:2008/07/10(木) 14:59:25
- >>301
TCL_ERRORだったらResultを出力すればいいだけじゃね?
- 304 :デフォルトの名無しさん:2008/07/10(木) 22:13:52
- >>298
なんでそんなことそをする必要があるかもう少し詳しく書いた方がいいぞ。そうしないと、
>>303みたいにすりゃいいだろ思うんだが
if (Tcl_Eval(interp, script)!=TCL_OK) {
char str;int len;Tcl_Channel e=Tcl_GetStdChannel(TCL_STDERR);
str=Tcl_GetStringFromObj(Tcl_GetObjResult(interp), &len);
Tcl_Write(err,str,len);Tcl_Flush(interp,err);
}
- 305 :304:2008/07/10(木) 22:23:39
- あー、どうでもいいけど、Tcl_WriteObjつかうと、Tcl_GetObjResultから一発で済むわ。
- 306 :本田:2008/07/22(火) 20:12:44
- TkSTEP 0.3b3 (Tk 4.1)
NEXTSTEP(tm)-lookalike-wanabee-hack-kit for Tk
Alfredo K. Kojima
tkstep0.3b3.tar.gz
tkstep8.0.4-2.tar.gz
Alfredo Kojima
http://en.wikipedia.org/wiki/Alfredo_Kojima
Alfredo Kengi Kojima
http://si3.inf.ufrgs.br/informa/Edicao12/entr_ago00.htm
TkSTEPは、現在、開発がストップしてるけど、
windowmakerなど他の仕事で作者は有名なんだな。
- 307 :本田:2008/07/23(水) 01:18:22
- The Tcl IRCd
http://www.hping.org/tclircd/
The Tcl IRCd is an IRC server written in the Tcl language.
The current version is not a complete implementation of the IRC protocol
but should interoperate well with most IRC clients, and allows to register,
change nick, create channels, talk on a public channel or in query and so on.
The program is small,
less than 500 lines of code, and was written in order to be very simple to modify/extend.
- 308 :デフォルトの名無しさん:2008/07/24(木) 04:12:37
- string hoge とかって具合に 任意の string * コマンド(?)を追加したりはできないでしょうか。
- 309 :デフォルトの名無しさん:2008/07/24(木) 20:37:58
- proc stringHello {} {puts "HELLO WORLD"}
set map [namespace ensemble configure string -map]
dict append map hello stringHello
namespace ensemble configure string -map $map
string hello
ただし8.5以上。
8.4のときはstringコマンドをtcl_stringなんかに名前を変えて
そのうえでそれのラッパーのstringを作ったりしてた。
- 310 :デフォルトの名無しさん:2008/07/24(木) 23:57:42
- >>269
>$$$c とか $[$[$c]] とか…
puts [subst $[subst $[subst $c]]]
遅レスだが…
- 311 :デフォルトの名無しさん:2008/07/27(日) 18:35:14
- >>269 & >>310
$$var (間接指定)について
http://psg.com/%7Ejoem/tcl/faq.html#DoubleIndirect
に丁寧な説明がある。
古い我家頁だが、今でもアクセス可能と思う。
- 312 :デフォルトの名無しさん:2008/07/29(火) 00:59:08
- BrowseX for Windows使ってた人いない?
いきなり消滅してて悲しい・・・
- 313 :デフォルトの名無しさん:2008/08/02(土) 08:48:51
- Active Tcl やっと8.5.3になった
- 314 :デフォルトの名無しさん:2008/08/05(火) 04:33:00
- tclコードをソース隠ぺいのため、バイナリ化または、
暗号化したいがどうすればよいでしょうか?
- 315 :デフォルトの名無しさん:2008/08/05(火) 21:26:28
- バイナリ化(exe化)ならここに色々ある。
http://home.netyou.jp/22/tanida/MazeOfProgram.htm
隠ぺいのためになるかは不明.
- 316 :デフォルトの名無しさん:2008/08/11(月) 10:37:56
- comポートとかソケットをopenで開いてgetsした時、
相手が何も返してこないと、一生待ちつづけてしまうのですが、
タイムアウトさせたりする方法は無いですか?
- 317 :デフォルトの名無しさん:2008/08/12(火) 07:07:15
- >>316
Tcllibは調べた?
- 318 :デフォルトの名無しさん:2008/08/12(火) 08:05:26
- >>316
fconfigure -blocking
fileeventで非同期に処理するのが良いと思う
- 319 :デフォルトの名無しさん:2008/08/13(水) 20:58:56
- >>316この手のシークエンスを記述するためにafter ms命令が用意されている
- 320 :316:2008/08/14(木) 09:50:55
- >>318
fileeventがまさに探していた機能です
サンクスコ
>>319
それは考えたけど、一度発行したgetsを取り消す術がないからダメポ
78 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
取りに行ったけどなかった。次は一時間後に取りに行くです。新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.3 2008/07/26
FOX ★ DSO(Dynamic Shared Object)