<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 輸入&輸出 > 原文: [https://zetcode.com/lang/tcl/io/](https://zetcode.com/lang/tcl/io/) 在本章中,我們將使用 Tcl 中的輸入和輸出操作。 Tcl 有幾個執行 io 的命令。 我們將介紹其中的一些。 Tcl 使用稱為通道的對象讀取和寫入數據。 可以使用`open`或`socket`命令創建通道。 Tcl 腳本可使用三個標準通道,而無需顯式創建它們。 操作系統會為每個新應用自動打開它們。 它們是`stdin`,`stdout`和`stderr`。 腳本使用標準輸入`stdin`來讀取數據。 腳本使用標準輸出`stdout`寫入數據。 腳本使用標準錯誤`stderr`來編寫錯誤消息。 在第一個示例中,我們將使用`puts`命令。 它具有以下概要: ```tcl puts ?-nonewline? ?channelId? string ``` `channelId`是我們要在其中寫入文本的通道。 `channelId`是可選的。 如果未指定,則采用默認值`stdout`。 ```tcl #!/usr/bin/tclsh puts "Message 1" puts stdout "Message 2" puts stderr "Message 3" ``` `puts`命令將文本寫入通道。 ```tcl puts "Message 1" ``` 如果未指定`channelId`,則默認情況下寫入`stdout`。 ```tcl puts stdout "Message 2" ``` 此行與上一行相同。 我們僅明確指定了`channelId`。 ```tcl puts stderr "Message 3" ``` 我們寫入標準錯誤通道。 錯誤消息默認情況下轉到終端。 ```tcl $ ./printing.tcl Message 1 Message 2 Message 3 ``` 示例輸出。 ## `read`命令 `read`命令用于從通道讀取數據。 可選參數指定要讀取的字符數。 如果省略,該命令將從通道讀取所有數據,直到最后。 ```tcl #!/usr/bin/tclsh set c [read stdin 1] while {$c != "q"} { puts -nonewline "$c" set c [read stdin 1] } ``` 該腳本從標準輸入通道讀取一個字符,然后將其寫入標準輸出,直到遇到`q`字符為止。 ```tcl set c [read stdin 1] ``` 我們從標準輸入通道(`stdin`)讀取一個字符。 ```tcl while {$c != "q"} { ``` 我們繼續讀取字符,直到按`q`為止。 ## `gets`命令 `gets`命令從通道讀取下一行,返回行中直到(但不包括)行尾字符的所有內容。 ```tcl #!/usr/bin/tclsh puts -nonewline "Enter your name: " flush stdout set name [gets stdin] puts "Hello $name" ``` 該腳本要求用戶輸入,然后打印一條消息。 ```tcl puts -nonewline "Enter your name: " ``` `puts`命令用于將消息打印到終端。 `-nonewline`選項禁止換行符。 ```tcl flush stdout ``` Tcl 緩沖區在內部輸出,因此用`puts`編寫的字符可能不會立即出現在輸出文件或設備上。 `flush`命令強制輸出立即顯示。 ```tcl set name [gets stdin] ``` `gets`命令從通道讀取一條線。 ```tcl $ ./hello.tcl Enter your name: Jan Hello Jan ``` 腳本的示例輸出。 ## `pwd`和`cd`命令 Tcl 具有`pwd`和`cd`命令,類似于 shell 命令。 `pwd`命令返回當前工作目錄,`cd`命令用于更改工作目錄。 ```tcl #!/usr/bin/tclsh set dir [pwd] puts $dir cd .. set dir [pwd] puts $dir ``` 在此腳本中,我們將打印當前工作目錄。 然后,我們更改工作目錄并再次打印工作目錄。 ```tcl set dir [pwd] ``` `pwd`命令返回當前工作目錄。 ```tcl cd .. ``` 我們將工作目錄更改為當前目錄的父目錄。 我們使用`cd`命令。 ```tcl $ ./cwd.tcl /home/janbodnar/prog/tcl/io /home/janbodnar/prog/tcl ``` 樣本輸出。 ## `glob`命令 Tcl 具有`glob`命令,該命令返回與模式匹配的文件的名稱。 ```tcl #!/usr/bin/tclsh set files [glob *.tcl] foreach file $files { puts $file } ``` 該腳本將所有帶有`.tcl`擴展名的文件打印到控制臺。 ```tcl set files [glob *.tcl] ``` `glob`命令返回與`*.tcl`模式匹配的文件列表。 ```tcl foreach file $files { puts $file } ``` 我們瀏覽文件列表,并將列表的每個項目打印到控制臺。 ```tcl $ ./globcmd.tcl attributes.tcl allfiles.tcl printing.tcl hello.tcl read.tcl files.tcl globcmd.tcl write2file.tcl cwd.tcl readfile.tcl isfile.tcl addnumbers.tcl ``` 這是`globcmd.tcl`腳本的示例輸出。 ## 處理文件 `file`命令操縱文件名和屬性。 它有很多選擇。 ```tcl #!/usr/bin/tclsh puts [file volumes] [file mkdir new] ``` 該腳本將打印系統的已安裝卷,并創建一個新目錄。 ```tcl puts [file volumes] ``` `file volumes`命令返回到系統上安裝的卷的絕對路徑。 ```tcl [file mkdir new] ``` `file mkdir`創建一個名為`new`的目錄。 ```tcl $ ./voldir.tcl / $ ls -d */ doc/ new/ tmp/ ``` 在 Linux 系統上,有一個已安裝的卷-根目錄。 `ls`命令確認`new`目錄的創建。 在下面的代碼示例中,我們將檢查文件名是常規文件還是目錄。 ```tcl #!/usr/bin/tclsh set files [glob *] foreach fl $files { if {[file isfile $fl]} { puts "$fl is a file" } elseif { [file isdirectory $fl]} { puts "$fl is a directory" } } ``` 我們遍歷當前工作目錄中的所有文件名,并打印它是文件還是目錄。 ```tcl set files [glob *] ``` 使用`glob`命令,我們創建當前目錄的文件和目錄名稱的列表。 ```tcl if {[file isfile $fl]} { ``` 如果有問題的文件名是文件,我們將執行`if`命令的主體。 ```tcl } elseif { [file isdirectory $fl]} { ``` `file isdirectory`命令確定文件名是否為目錄。 請注意,在 Unix 上,目錄是文件的特例。 `puts`命令可用于寫入文件。 ```tcl #!/usr/bin/tclsh set fp [open days w] set days {Monday Tuesday Wednesday Thursday Friday Saturday Sunday} puts $fp $days close $fp ``` 在腳本中,我們打開一個文件進行寫入。 我們將一周中的幾天寫入文件。 ```tcl set fp [open days w] ``` 我們打開一個名為`days`的文件進行寫入。 `open`命令返回一個通道 ID。 ```tcl set days {Monday Tuesday Wednesday Thursday Friday Saturday Sunday} ``` 該數據將被寫入文件。 ```tcl puts $fp $days ``` 我們使用`open`命令返回的通道 ID 寫入文件。 ```tcl close $fp ``` 我們關閉打開的頻道。 ```tcl $ ./write2file.tcl $ cat days Monday Tuesday Wednesday Thursday Friday Saturday Sunday ``` 我們運行腳本并檢查`days`文件的內容。 在下面的腳本中,我們將從文件中讀取數據。 ```tcl $ cat languages Python Tcl Visual Basic Perl Java C C# Ruby Scheme ``` 我們在目錄中有一個簡單的文件,稱為語言。 ```tcl #!/usr/bin/tclsh set fp [open languages r] set data [read $fp] puts -nonewline $data close $fp ``` 我們從提供的文件中讀取數據,讀取其內容,然后將數據打印到終端。 ```tcl set fp [open languages r] ``` 我們通過以只讀模式打開語言文件來創建頻道。 ```tcl set data [read $fp] ``` 如果我們沒有為`read`命令提供第二個參數,它將從文件中讀取所有數據,直到文件結尾。 ```tcl puts -nonewline $data ``` 我們將數據打印到控制臺。 ```tcl $ ./readfile.tcl Python Tcl Visual Basic Perl Java C C# Ruby Scheme ``` `readfile.tcl`腳本的示例運行。 `eof`命令檢查所提供通道的行尾。 ```tcl #!/usr/bin/tclsh set fp [open languages] while {![eof $fp]} { puts [gets $fp] } close $fp ``` 我們使用`eof`命令讀取文件的內容。 ```tcl while {![eof $fp]} { puts [gets $fp] } ``` 循環繼續進行,直到`eof`遇到文件結尾都返回`true`為止。 在體內,我們使用`gets`命令從文件中讀取一行。 ```tcl $ ./readfile2.tcl Python Tcl Visual Basic Perl Java C C# Ruby Scheme ``` `readfile2.tcl`腳本的示例運行。 下一個腳本將執行一些其他文件操作。 ```tcl #!/usr/bin/tclsh set fp [open newfile w] puts $fp "this is new file" flush $fp file copy newfile newfile2 file delete newfile close $fp ``` 我們打開一個文件,并在其中寫入一些文本。 文件被復制。 然后刪除原始文件。 ```tcl file copy newfile newfile2 ``` `file copy`命令復制文件。 ```tcl file delete newfile ``` 原始文件用`file delete`命令刪除。 在最后一個示例中,我們將使用文件屬性。 ```tcl #!/usr/bin/tclsh set files [glob *] set mx 0 foreach fl $files { set len [string length $fl] if { $len > $mx} { set mx $len } } set fstr "%-$mx\s %-s" puts [format $fstr Name Size] set fstr "%-$mx\s %d bytes" foreach fl $files { set size [file size $fl] puts [format $fstr $fl $size] } ``` 該腳本將創建兩列。 在第一列中,我們有文件的名稱。 在第二列中,我們顯示文件的大小。 ```tcl foreach fl $files { set len [string length $fl] if { $len > $mx} { set mx $len } } ``` 在此循環中,我們找出了最長的文件名。 格式化輸出列時將使用此格式。 ```tcl set fstr "%-$mx\s %-s" puts [format $fstr Name Size] ``` 在這里,我們打印列的標題。 要格式化數據,我們使用`format`命令。 ```tcl set fstr "%-$mx\s %d bytes" foreach fl $files { set size [file size $fl] puts [format $fstr $fl $size] } ``` 我們遍歷文件列表并打印每個文件名及其大小。 `file size`命令確定文件的大小。 ```tcl $ ./attributes.tcl Name Size attributes.tcl 337 bytes newfile2 17 bytes allfiles.tcl 75 bytes printing.tcl 83 bytes languages 51 bytes hello.tcl 109 bytes days 57 bytes read.tcl 113 bytes files.tcl 140 bytes globcmd.tcl 82 bytes write2file.tcl 134 bytes doc 4096 bytes cwd.tcl 76 bytes tmp 4096 bytes readfile.tcl 98 bytes isfile.tcl 219 bytes ``` 樣品運行。 在本章中,我們介紹了 Tcl 中的輸入/輸出操作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看