我看到一些以前的帖子与打开文件以执行读写操作有关但我无法得到我的任务的答案.我想将一些结果附加到一个文件(如果它不存在,应该创建一个新文件).
但是,如果文件已经有结果,则应跳过追加并继续下一次搜索下一个结果.我为此编写了一个脚本,我在阅读文件时遇到了问题.脚本是这样的:
proc example {} {
set a [result1 result2 ... result n]
set op [open "sample_file" "a+"]
set file_content ""
while { ![eof $op] } {
gets $op line
lappend file_content $line
}
foreach result $a {
if {[lsearch $file_content $result] == -1} {
puts $op $result
}
}
close $op
}
Run Code Online (Sandbox Code Playgroud)
注意:在这个脚本中,我发现变量"line"为空{""}.我想我在阅读文件时遇到了麻烦.请在这件事上给予我帮助
我有一个用数组完成的proc.要返回它,我使用"array get"来检索列表.但是这个列表不仅包含我的数组,还包含它们的索引:
所以我的数组[ a b c d ] 变成了一个列表{ 0 a 1 b 2 c 3 d }
如何在不打扰列表顺序的情况下摆脱这些索引号?
我写了一些代码,它接受一堆对象,在每个对象上使用一个实例方法,并将实例方法返回的值放在一个列表中。
object_list # list of objects
value_list = [object.method() for obj in object_list]
Run Code Online (Sandbox Code Playgroud)
我在代码的很多不同地方都需要这种结构,它们之间的唯一区别是实例方法method总是不同的。
如果方法是函数,那么使用这里解释的映射方法是没有问题的。可以用 做类似的事情exec,但是它不是很优雅,而且我不确定它在返回值方面如何工作:
def call_method(obj, method_name: str):
return exec("obj." + method_name + "()") # returns None
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方法来重构这个问题的代码?
我得到的答案是1我试过这个:
set a "Amazon"
set b [split $a]
set c [llength $b]
puts "$c"
Run Code Online (Sandbox Code Playgroud) 给定a Path,我想根据上次修改时间确定文件的年龄.我知道如何获得最后修改时间:
FileTime t = Files.getLastModifiedTime(path);
Run Code Online (Sandbox Code Playgroud)
我也知道如何获得当前日期/时间:
LocalDate now = LocalDate.now();
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到两者之间有任何联系.我想我必须从一种类型转换为另一种类型,然后以天计算差异,但此时我仍然坚持阅读文档.任何帮助将不胜感激.