gpt4 book ai didi

tcl - 如何在tcl中的许多文本中搜索某些行

转载 作者:行者123 更新时间:2023-12-04 13:24:06 27 4
gpt4 key购买 nike

我在一个文件夹中有很多文本,文本包含以下格式

#version = 11111
#version = 11112
#version = 11113
#version = 11114
version = 11115
#version 是以前的版本,版本是最新的
我想找出最新版本(11115)和最新版本(11114)的行,并在另一个文本中列出它们。
我已经使用 foreach 和 glob 来找出所有的文本
但我不知道如何设置 (version = 11115)line n 和 (#version = 11114) line n-1(或其他方法来找出这两行)
我不知道如何表达以前的版本。
foreach fileName [glob /aaatools/N*/release/version] {
set fp [open $fileName "r"]
while { [gets $fp data]>=0 } {
{[regexp {set [^version =/]+[A-Za-z0-9_]*} $Version] | [regexp {set ??? } $previous_version] } {
set information [$fileName] [$Version] [$previous_version]
set fp2 [open "tool_version" w+]
puts $fp2 $information

最佳答案

如果你有一个这样结构的文本文件,你可以相当简单地提取你正在寻找的信息。关键技巧是使用 regexp既匹配行又提取有趣的部分。并且建议您使用临时变量来捕获有趣的部分,以便不感兴趣的行不会被覆盖。 (当存在关于是否应接受值的其他额外条件时,这一点更为重要。)

set current ""
set previous ""

set f [open $theTextFile]
set lines [split [read $f] "\n"]
close $f

foreach line $lines {
if {[regexp {^\s*#\s*version\s+=\s+(\d+)} $line -> val]} {
set previous $val
} elseif {[regexp {^\s*version\s+=\s+(\d+)} $line -> val]} {
if {$current ne ""} {
puts stderr "WARNING: $theTextFile has multiple current versions: $current, $val"
}
set current $val
}
}

# Show what we've found
puts "current = $current"
puts "previous = $previous"
请注意,这假设您对每种情况下的最后一个匹配行感兴趣。
这仅扫描单个文件。如果您正在处理多个文件,最简单的做法是将上述代码转换为一个过程,然后从输入文件名的循环中调用它。

关于tcl - 如何在tcl中的许多文本中搜索某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69702515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com