1

読み取りおよび書き込み操作を実行するためにファイルを開くことに関連する以前の投稿をいくつか見ましたが、自分のタスクに対する答えが得られません。いくつかの結果をファイルに追加したい(存在しない場合は新しいファイルを作成する必要があります)。
ただし、ファイルにすでに結果がある場合は、追加をスキップして、次の結果の次の検索に進む必要があります。このためのスクリプトを作成しましたが、ファイルの読み取りに問題があります。スクリプトは次のようなものです。

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
}

注:このスクリプトでは、変数「line」が空であることがわかります{""}。ファイルの読み取りに問題があると思います。これで私を助けてください

4

1 に答える 1

8

忘れてしまったのは、読む前にファイルの先頭を探すことです。

proc example {} {
    set a {result1 result2  ... result n}; # <== curly braces, not square
    set op [open "sample_file" "a+"]
    set file_content ""
    seek $op 0; # <== need to do this because of a+ mode
    while { ![eof $op] } {
        gets $op line
        lappend file_content $line
    }
    foreach result $a {
        if {[lsearch $file_content $result] == -1} {
            puts $op $result
        }
    }
    close $op
}

アップデート

1つのreadステートメントを使用して、読み取り(whileループおよびすべて)を簡略化できます。

proc example {} {
    set a {result1 result2  result3}
    set op [open "sample_file" "a+"]
    seek $op 0
    set file_content [read $op]
    foreach result $a {
        if {[lsearch $file_content $result] == -1} {
            puts $op $result
        }
    }
    close $op
}

example
于 2012-11-08T19:36:03.400 に答える