TCL仅检查空格

  • 本文关键字:空格 TCL tcl whitespace
  • 更新时间 :
  • 英文 :


我正在构建一个代码以将用户输入添加到文件中,但是我想捕获一个事件,其中用户只输入了whitepstaces,而无需其他。我怎么做?目前,我正在硬编码"one_answers",如果用户输入一个或两个空格,它将抓住,但我相信有比我的更好的解决方案。

PROC将用户输入插入文本文件

proc inputWords {entryWidget} {
set inputs [$entryWidget get]
$entryWidget delete 0 end
if {$inputs == ""} {
.messageText configure -text "No empty strings"
} elseif {$inputs == " " || $inputs == "  "} {
.messageText configure -text "No whitespace strings"
} else {
set sp [open textfile.txt a]
puts $sp $inputs
close $sp
.messageText configure -text "Added $inputs into text file."
}
}

GUI代码

button .messageText -text "Add words" -command "inputWords .ent"
entry .ent
pack .messageText .ent

接受任意长度的空格字符串,包括0:

string is space $inputs

接受没有空的空格字符串:

string is space -strict $inputs 

结果为true(= 1)或false(= 0)。

文档:字符串

您可以使用{^ s $}之类的正则表达式,该表达式匹配字符串的开始,然后仅在字符串末尾匹配一个或多个whitespaces(空间或tab)。因此,在您的示例中:

elseif {[regexp {^s+$} $inputs]} {
  .messageText configure -text "No whitespace strings"
...

如果要检查所有whitespace 在同一表达式中的空字符串,请使用{^ s*$}。

有关TCL中的正则表达式的更多信息,请参见http://wiki.tcl.tk/396。如果这是您第一次接触正则表达式,我建议您在线寻找正则表达式教程。

假设,您想修剪出用户输入的领先和落后空间,您可以修剪字符串并检查零length。在性能方面,这更好:

% set inputs "    "
% string length $inputs
4
% string length [string trim $inputs]
0
% 
% time {string length [string trim $inputs]} 1000
2.315 microseconds per iteration
% time {regexp  {^s+$} $inputs} 1000
3.173 microseconds per iteration
% time {string length [string trim $inputs]} 10000
1.8305 microseconds per iteration
% time {regexp  {^s+$} $inputs} 10000
3.1686 microseconds per iteration
% 
% # Trim it once and use it for calculating length
% set foo [string trim $inputs]
% time {string length $foo} 1000
1.596 microseconds per iteration
% time {string length $foo} 10000
1.4619 microseconds per iteration
% 

相关内容

  • 没有找到相关文章

最新更新