TCLで同時に書き込み中に読み取る方法はありますか?
w + soを使用しようとしましたが、うまくいきませんでした。
set f0 [open out11.tr w+]
だから私は同時に書き終わったすべての行を読みたい
TCLで同時に書き込み中に読み取る方法はありますか?
w + soを使用しようとしましたが、うまくいきませんでした。
set f0 [open out11.tr w+]
だから私は同時に書き終わったすべての行を読みたい
モードは機能しw+
ますが、ファイルを開くとファイルが切り捨てられます (w
同じことを行うモードの変更であるため)。既存のデータを消去したくない場合は、r+
代わりに を使用します (この場合、ファイルが最初に存在する必要があります)。
ファイルが存在しない場合にファイルを作成し、同じチャネルを介して読み書きできるようにし、開いたときに切り詰めたくない場合は、別の形式のモード記述子 (から派生)を使用する必要があります。ニーモニックに興味がある場合は、POSIX 記述子):
set f0 [open out11.tr {RDWR CREAT}]
(w+
はRDWR CREAT TRUNC
、r+
分かりやすいRDWR
です。)
次の例では、w+ でファイルを開きます (読み取り/書き込みを意味しますが、ファイルが既に存在する場合は内容を切り捨てます)。次に、各行を書き込み、読み取り、書き込み、読み取り、...
set lines {
{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi}
{accumsan est ut ante ornare et porta sem iaculis. Fusce a dolor}
{magna, eget viverra quam. In sem justo, hendrerit a porttitor sit}
{amet, scelerisque eu turpis. Nulla arcu arcu, condimentum vel}
{fermentum sit amet, vulputate et sapien. Aenean convallis, purus vel}
{molestie vehicula, diam eros adipiscing nibh, in dapibus nisi orci}
{ut nisl. Ut fermentum felis a lectus lacinia dapibus. Nunc cursus}
{nunc vitae massa fermentum imperdiet. In eu lectus quis arcu}
{convallis imperdiet in quis tortor.}
}
set f [open out.txt w+]
set lastRead 0
foreach line $lines {
# Write to the file
puts $f $line
# Read it back and display to stdout
seek $f $lastRead
gets $f line2
set lastRead [tell $f]
}
close $f