如何阅读字数?
行具有以下格式:
vertices_count
X, Y
X, Y
X, Y
(X、Y对可以在同一行)
例如:
3
12.5, 56.8
12.5, 56.8
12.5, 56.8
我想阅读 vertices_count 字数(转义逗号):
所以对于上面的例子,阅读单词应该是:
12.5 56.8 12.5 56.8 12.5 56.8
如何阅读字数?
行具有以下格式:
vertices_count
X, Y
X, Y
X, Y
(X、Y对可以在同一行)
例如:
3
12.5, 56.8
12.5, 56.8
12.5, 56.8
我想阅读 vertices_count 字数(转义逗号):
所以对于上面的例子,阅读单词应该是:
12.5 56.8 12.5 56.8 12.5 56.8
set fh [open f r]
gets $fh num
read $fh data
close $fh
set number_re {-?\d+(?:\.\d*)?|-?\d*\.\d+}
set vertices {}
foreach {_ x y} [regexp -inline -all "($number_re),\\s*($number_re)" $data] {
lappend vertices $x $y
if {[llength $vertices] == $num * 2} break
}
puts $vertices
# => 12.5 56.8 12.5 56.8 12.5 56.8
while {[llength $vertices] < $num * 2} {
gets $fh line
foreach {_ x y} [regexp -inline -all "($number_re),\\s*($number_re)" $line] {
lappend vertices $x $y
if {[llength $vertices] == $num * 2} break
}
}
close $fh
我仍然不清楚你到底在追求什么。这是一些从命名文件中读取数据的代码。从您的其他问题来看,您的输入流中可以有几组数据,并且此代码将它们全部作为列表返回。列表的每个元素都是一组坐标
# Read the input from file
set fil [open filename.file]
set input [read $fil]
close $fil
set data [list]; # No output so for
set seekCount yes; # Next token is a vertex count
foreach token [string map {, " "} $input] {
# Convert commas to spaces
if {$seekCount} {
set nCoords [expr $token * 2];
# Save number of coordinates
set datum [list]; # Clean out vertex buffer
} else {
lappend datum $token; # Save coordinate
incr nCoords -1
if {$nCoords <= 0} {
# That was the last coordinate
lappend data $datum; # Append the list of coordinates
set seekCount yes; # and look for anopther count
}
}
}
这是一个非常快速和肮脏的解决方案,它不会尝试处理错误。然而,它会处理的一件事是逗号后有大量的空格和缺失的空格。
祝你好运,我希望这会有所帮助。
此过程首先读取计数行,然后读取该行数并作为列表放入 $varName。它返回 $varName 中的元素数,如果在读取计数之前发生 EOF,则返回 -1。
proc getNLines {stream varName} {
upvar 1 $varName lines
set lines {}
if {[gets $stream n] < 0} {
return -1
}
while {$n > 0} {
if {[gets $stream line] < 0} {
error "bad data format"
}
lappend lines $line
incr n -1
}
return [llength $lines]
}
while {[getNLines stdin lines] >= 0} {
# ...
}