如何在使用tcl的文件中讀取多行文件?這是默認情況下gets命令讀取直到找到新行,如何更改此行爲以讀取文件直到找到特定字符?使用TCL從文件中讀取多行?
3
A
回答
3
使用fconfigure
。
set fp [open "somefile" r]
fconfigure $fp -eofchar "char"
set data [read $fp]
close $fp
4
如果你不介意閱讀過一點,你可以在一個循環與gets
或read
循環做到這一點:
set data ""
while {[gets $chan line] >= 0} {
set idx [string first $whatToLookFor $line]
if {$idx == -1} {
append data $line\n
} else {
# Decrement idx; don't want first character of $whatToLookFor
append data [string range $line 0 [incr idx -1]]
break
}
}
# Data has everything up to but not including $whatToLookFor
如果您正在尋找多模式,我建議將整個文件讀入內存並進行處理。這比試圖編寫正確的匹配器容易得多:
set data [read $chan]
set idx [string first $whatToLookFor $data]
if {$idx > -1} {
set data [string range $data 0 [incr idx -1]]
}
這後一種形式對二進制數據也可以正常工作。如果你這樣做,先記住fconfigure $chan -translation binary
。
2
除了多納爾的好建議,可以通過讀取記錄分隔符整個文件和拆分得到的記錄列表:
package require textutil::split
set records [textutil::splitx [read $chan] "record_separator"]
相關問題
- 1. 使用getline從文件讀取多行?
- 2. 從文件中讀取多行文件
- 3. 從文件中讀取多行文件
- 4. 從文本文件中讀取多行
- 5. 使用python從文件中讀取行
- 6. 使用SeekableByteChannel從文件中讀取行
- 7. 使用BufferedReader從文件中讀取行
- 8. C從文件讀取多行文件
- 9. 使用循環從多行文本文件中讀取數據
- 10. BASH - 從文本文件讀取多行
- 11. 從Tcl運行其他程序讀取文件
- 12. 從文件中讀取行
- 13. 從bin文件中讀取併除以TCL中的字節
- 14. 在TCL循環讀取目錄中的多個文件
- 15. 從輸入文件讀取多行
- 16. 從txt文件讀取多行C++
- 17. 如何從c中的文本文件讀取多行文件#
- 18. C - 從文本文件中讀取多行文件
- 19. 從多行文本框中讀取多個文件
- 20. TCL從.csv文件包中讀取數據
- 21. 在tcl的foreach命令讀取文件
- 22. tcl錯誤讀取包索引文件
- 23. E0308從讀取文件行中讀取行中的行。()
- 24. 將多行寫入TCL中的文件
- 25. 使用fgets從.txt文件讀取並打印多行
- 26. 使用python讀取多行文件中的下幾行
- 27. 使用AWK從文件中讀取多個事件的變量
- 28. 如何使用tcl讀取文件的每個部分?
- 29. 從文件中讀取文本行
- 30. 從文本文件中讀取行
可以'-eofchar'超過1字符? – slebetman
那,我不這麼認爲。 (或許@DonalFellows會以另一種方式加入。)儘管如此,最糟糕的情況是,你必須逐行閱讀並連接一些字符串。那應該不會太可怕。 –
'eofchar'確實必須是一個角色,因爲檢查它是否被看到是在「基本傳輸單元」上以相等方式完成的。那麼,實際上它甚至可能需要是一個字節;我不太確定相對於編碼處理在通道堆棧中處理的位置(代碼很複雜)。說實話,我不會推薦使用除空字符串或\ u001a'以外的任何東西。 –