【问题标题】:Input file needs to be edited by the code in tcl输入文件需要通过tcl中的代码进行编辑
【发布时间】:2014-11-02 05:27:49
【问题描述】:

我有一个文本文件,一旦用户输入,我需要对其进行编辑。 我已经使用 foreach 命令和 split 将输入文件拆分为每行在 \n 处换行的行,然后我通过再次对每一行使用 split 将每行进一步分解为单词。 我的目标是用一个新词替换一个特定的词。 然后我应该用新的一行替换一个特定的行。 我该怎么做?

【问题讨论】:

  • 请发布您的代码;指出你做了什么,什么没用。
  • 您会想了解lsearchlreplacestring map 也会帮助你。
  • 你可以用 regsub 替换
  • 简单地说:你构建了一个所有行的 new 列表(别担心;你复制了大部分原始行并且它很有效)然后你写下这些行输出到文件(如果需要)。如果您显示您的代码,一切都会更加清晰......
  • @FrobberOfBits,我从中获取输入的文本文件名为deck。我想用 i-v 替换 ivfrz。 foreach line [split $deck \n] { foreach word [split $line] { if {[lsearch -all $word ivfrz] >= 0} { string replace $word 0 4 i-v } } }

标签: list replace tcl element


【解决方案1】:

您根本不需要拆分文件的内容:

set fh [open deck r]
set deck [read -nonewline $fh]
close $fh

regsub -all {\mivfrz\M} $deck {i-v} deck

我使用\m\M 约束来确保我只匹配整个单词。见http://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm#M72

重写你的方法:

foreach line [split $deck \n] {
    set words [split $line]
    foreach index [lsearch -all -exact $words "ivfrz"] {
        lset words $index "i-v"
    }
    lappend new_deck $words
}

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多