Tcl を使用してトランスクリプト コマンド (Questa sim) を使用するシミュレーターを使用しています。Unix で「cat」コマンドのようなファイル コンテンツをエコーしたいです。
tcl で 1 行のコマンドで実行できますか? ファイルの最初の 5 行だけを "cat" することは可能ですか?
一行で
puts [read [open data.dat r]]
または段階的に..
set handle [open data.dat r]
puts [read $handle]
close $handle
ファイルを開いてその内容を標準出力にエコーするには (のようにcat
)、次のようにします。
set f [open $filename]
fcopy $f stdout
close $f
最初の 5 行だけを実行するには (これは とまったく同じですhead -5
)、次の手順を使用します。
proc head {filename {lineCount 5}} {
set f [open $filename]
for {set i 0} {$i < $lineCount} {incr i} {
if {[gets $f line] >= 0} {
puts $line
}
}
close $f
}
行末を検出することは、単にバイトを送信することよりも複雑であるため、より多くの作業が必要になります。
次のコードは、特定のファイルから一度に 5 行を読み取るためのものです。
#!/usr/bin/tclsh
set prev_count -1
set fp [open "input-file.txt" "r"]
set num_lines [split [read $fp] \n]
for {set i 4} {$i < [llength $num_lines]} { incr i 5} {
set line_5 [lrange $num_lines [incr prev_count] $i ]
set prev_count $i
puts "$line_5\n\n"
}