0

ファイルが変更されたかどうかを確認し、新しいデータのみを印刷する効率的な方法は何ですか?

もともと、行数を比較する readline アプローチに傾倒していましたが、それは非常に非効率的でした。

私の最初の質問は、Netlogo からファイル サイズまたはタイム スタンプを確認する方法があるかどうかでした。答えは「いいえ」でした。しかし、Charles Staelin は親切にも get-date-ms メソッドを pathdir 拡張に追加してくれました。そのため、ファイルの変更 (タイムスタンプによる) をチェックできるようになりましたset currenttimestamp pathdir:get-date-ms "somefile.nlist" if currenttimestamp != filetimestamp

追加された方法を使用して:

to checkfile
  ifelse checktick mod 19 = 0
    [set currenttimestamp pathdir:get-date-ms "somefile.nlist" 
     if currenttimestamp != filetimestamp
     [file-open "somefile.nlist"
      let thiscount 0
      while [not file-at-end?][
        set in1 file-read-line
        set global-in1 in1
        set thiscount thiscount + 1
        if thiscount > global-filelength AND (not file-at-end?)[ ;it seems that this not-at-file-end is redundant - why not?
          print in1
          set global-filelength thiscount
          set hasfilechanged true

       ]

        ]
     file-close
      set filetimestamp currenttimestamp
      set checktick checktick + 1
      ]

     ]

    [ set checktick checktick + 1]

end
4

1 に答える 1

0

Charles Staelin は最近、これを彼のpathdir拡張機能に追加しました。これにより、一連のファイルおよびパス指向のプリミティブが NetLogo に追加されます。http://groups.yahoo.com/group/netlogo-users/message/15301を参照してください。拡張機能は、https://github.com/NetLogo/NetLogo/wiki/Extensionsにリストされています。

于 2012-10-02T17:56:00.287 に答える