TCL 输出文件 1

TCL output file 1

我有一个小的 tcl 脚本可以从文件中输出文本

在 test.txt 中是文本:

---------------------------[list]-----------------------------------------
00.01 aaaa
00.02 bbbbbbbbbbbbbbbbbb
--------------------------------------------------------------------------

我的 tcl 脚本

bind pub - !textlist pub:textlist

proc pub:textlist {nick uhost hand chan args} {
  set file [open /home/test.txt]
  set input [read $file]
  set lines [split $input "\n"]
  foreach line $lines {
    putnow "PRIVMSG $chan :$line"
  }
}

输出现在是:

<@t> !textlist
<@test> ---------------------------[list]-----------------------------------------
<@test> 00.01 aaaa
<@test> 00.02 bbbbbbbbbbbbbbbbbb
<@test> --------------------------------------------------------------------------
<@test> :

如何删除通道输出中的最后一个:?在文件中 test.txt 不是最后一行之后的新行 -----

此致

当您有一个包含两个换行符的文件时:

aaaa
bbbb

使用换行符的split操作将拆分组件 分为三个部分。最后一部分是空的。

您可以在拆分操作之前删除换行符:

regsub "\n$" $input {} input
set lines [split $input \n]

或者您可以更改文件的处理方式:

set fh [open myfile.txt]
while { [gets $fh line] >= 0 } {
  puts $line
}
close $fh

(另外:您的示例代码在读取文件后并未关闭文件)。

read 命令实际上有一个选项可以丢弃文件末尾的尾随换行符。所以,只需将 "read" 行更改为:

set input [read -nonewline $file]