<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Ruby 輸入&輸出 > 原文: [https://zetcode.com/lang/rubytutorial/io/](https://zetcode.com/lang/rubytutorial/io/) 在 Ruby 教程的這一部分中,我們將討論 Ruby 中的輸入&輸出操作。 輸入是程序從鍵盤,文件或其他程序讀取的任何數據。 輸出是程序產生的數據。 輸出可能會轉到屏幕,文件或其他程序。 輸入&輸出是一個大話題。 我們提出一些示例,以使您對該主題有一個總體了解。 Ruby 中的幾個類具有執行輸入&輸出操作的方法。 例如`Kernel`,`IO`,`Dir`或`File`。 ## Ruby 輸出到控制臺 Ruby 有幾種方法可以在控制臺上打印輸出。 這些方法是`Kernel`模塊的一部分。 `Kernel`的方法可用于 Ruby 中的所有對象。 ```ruby #!/usr/bin/ruby print "Apple " print "Apple\n" puts "Orange" puts "Orange" ``` `print`和`puts`方法在控制臺上產生文本輸出。 兩者之間的區別在于后者添加了新的換行符。 ```ruby print "Apple " print "Apple\n" ``` 打印方法將兩個連續的`"Apple"`字符串打印到終端。 如果要創建新行,則必須顯式包含換行符。 換行符為`\n`。 在后臺,`print`方法實際上調用了要打印對象的`to_s`方法。 ```ruby puts "Orange" puts "Orange" ``` `puts`方法將兩個字符串打印到控制臺。 每個人都有自己的路由。 該方法自動包括換行符。 ```ruby $ ./printing.rb Apple Apple Orange Orange ``` 這是`printing.rb`腳本文件的輸出。 根據 Ruby 文檔,`print`方法與`$stdout.print`等效。 `$stdout`是保存標準輸出流的全局變量。 ```ruby #!/usr/bin/ruby $stdout.print "Ruby language\n" $stdout.puts "Python language" ``` 我們使用`$stdout`變量打印兩行。 Ruby 還有另外三種打印輸出的方法。 ```ruby #!/usr/bin/ruby p "Lemon" p "Lemon" printf "There are %d apples\n", 3 putc 'K' putc 0xA ``` 在示例中,我們介紹了`p`,`printf`和`putc`方法。 ```ruby p "Lemon" ``` `p`在打印對象時調用`inspect`方法。 該方法對于調試很有用。 ```ruby printf "There are %d apples\n", 3 ``` `printf`方法從 C 編程語言中是眾所周知的。 它啟用字符串格式。 ```ruby putc 'K' putc 0xA ``` `putc`方法將一個字符打印到控制臺。 第二行打印換行符。 `0xA`是換行符的十六進制代碼。 ```ruby $ ./printing3.rb "Lemon" "Lemon" There are 3 apples K ``` 這是`printing3.rb`程序的輸出。 使用內核方法將數據打印到控制臺是一個快捷方式:一種打印數據的簡便方法。 以下示例顯示了一種將數據打印到終端的更正式的方法。 ```ruby ios = IO.new STDOUT.fileno ios.write "ZetCode\n" ios.close ``` 在示例中,我們打開一個標準輸出流,并將一個字符串寫入其中。 ```ruby ios = IO.new STDOUT.fileno ``` `new`方法返回一個我們可以向其寫入數據的流。 該方法采用數字文件描述符。 `STDOUT.fileno`為我們提供了標準輸出流的文件描述符。 我們也可以簡單地寫 2。 ```ruby ios.write "ZetCode\n" ``` 我們向打開的流中寫入一個字符串。 ```ruby ios.close ``` 輸入流已關閉。 在 Unix 系統上,標準終端輸出連接到名為`/dev/tty`的特殊文件。 通過打開并寫入,我們將寫入控制臺。 ```ruby #!/usr/bin/ruby fd = IO.sysopen "/dev/tty", "w" ios = IO.new(fd, "w") ios.puts "ZetCode" ios.close ``` 一個小的例子,我們寫入`/dev/tty`文件。 這僅適用于 Unix。 ```ruby fd = IO.sysopen "/dev/tty", "w" ``` `sysopen`方法打開給定路徑,并返回基礎文件描述符號。 ```ruby ios = IO.new(fd, "w") ``` 文件描述符號用于打開流。 ```ruby ios.puts "ZetCode" ios.close ``` 我們向流中寫入一個字符串并將其關閉。 ## Ruby 從控制臺讀取輸入 在本節中,我們將創建一些代碼示例,這些示例將處理從控制臺讀取的內容。 `$stdin`是一個全局變量,其中包含標準輸入的流。 它可用于從控制臺讀取輸入。 ```ruby #!/usr/bin/ruby inp = $stdin.read puts inp ``` 在上面的代碼中,我們使用`read`方法從控制臺讀取輸入。 ```ruby inp = $stdin.read ``` `read`方法從標準輸入讀取數據,直到到達文件末尾。 通過在 Unix 上按`Ctrl + D`以及在 Windows 上按`Ctrl + Z`可以產生 EOF。 ```ruby $ ./reading.rb Ruby language Ruby language ``` 當我們啟動不帶參數的程序時,腳本將從用戶讀取數據。 讀取直到我們按 `Ctrl + D` 或 `Ctrl + Z` 為止。 ```ruby $ echo "ZetCode" | ./reading.rb ZetCode $ ./input.rb < stones Garnet Topaz Opal Amethyst Ruby Jasper Pyrite Malachite Quartz ``` 如果我們進行一些重定向,腳本可以從另一個程序或文件中讀取數據。 從控制臺讀取數據的常用方法是使用`gets`方法。 ```ruby #!/usr/bin/ruby print "Enter your name: " name = gets puts "Hello #{name}" ``` 我們使用`gets`方法從用戶讀取一行。 ```ruby name = gets ``` `gets`方法從標準輸入讀取一行。 數據被分配給名稱變量。 ```ruby puts "Hello #{name}" ``` 我們已讀取的數據將打印到控制臺。 我們使用插值將變量包括在字符串中。 ```ruby $ ./readline.rb Enter your name: Jan Hello Jan ``` 樣本輸出。 在以下兩個腳本中,我們將討論`chomp`方法。 這是一個字符串方法,可從字符串末尾刪除空格。 在執行輸入操作時很有用。 方法名稱和用法來自 Perl 語言。 ```ruby #!/usr/bin/ruby print "Enter a string: " inp = gets puts "The string has #{inp.size} characters" ``` 我們從用戶那里讀取一個字符串,然后計算輸入字符串的長度。 ```ruby $ ./nochomp.rb Enter a string: Ruby The string has 5 characters ``` 消息說該字符串有 5 個字符。 這是因為它也計入換行符。 為了獲得正確的答案,我們需要刪除換行符。 這是`chomp`方法的工作。 ```ruby #!/usr/bin/ruby print "Enter a string: " inp = gets.chomp puts "The string has #{inp.size} characters" ``` 這次我們使用`chomp`方法剪切換行符。 ```ruby $ ./chomp.rb Enter a string: Ruby The string has 4 characters ``` Ruby 字符串確實有 4 個字符。 ## Ruby 文件 從正式的 Ruby 文檔中,我們了解到`IO`類是 Ruby 中所有輸入和輸出的基礎。 `File`類是`IO`類的唯一子類。 這兩個類別緊密相關。 ```ruby #!/usr/bin/ruby f = File.open('output.txt', 'w') f.puts "The Ruby tutorial" f.close ``` 在第一個示例中,我們打開一個文件并向其中寫入一些數據。 ```ruby f = File.open('output.txt', 'w') ``` 我們以寫模式打開文件`"output.txt"`。 `open`方法返回一個 io 流。 ```ruby f.puts "The Ruby tutorial" ``` 我們使用上面打開的流來寫入一些數據。 `puts`方法也可以用于將數據寫入文件。 ```ruby f.close ``` 最后,流關閉。 ```ruby $ ./simplewrite.rb $ cat output.txt The Ruby tutorial ``` 我們執行腳本并顯示`output.txt`文件的內容。 我們將有一個類似的示例,該示例將展示其他有效的方法。 ```ruby #!/usr/bin/ruby File.open('langs', 'w') do |f| f.puts "Ruby" f.write "Java\n" f << "Python\n" end ``` 如果`open`方法之后有一個塊,則 Ruby 將打開的流傳遞到該塊。 在該塊的末尾,文件將自動關閉。 ```ruby f.puts "Ruby" f.write "Java\n" f << "Python\n" ``` 我們使用三種不同的方法寫入文件。 ```ruby $ ./simplewrite2.rb $ cat langs Ruby Java Python ``` 我們執行腳本并檢查`langs`文件的內容。 在第二個示例中,我們顯示`File`類的一些方法。 ```ruby #!/usr/bin/ruby puts File.exists? 'tempfile' f = File.new 'tempfile', 'w' puts File.mtime 'tempfile' puts f.size File.rename 'tempfile', 'tempfile2' f.close ``` 該示例創建一個名為`tempfile`的新文件,并調用一些方法。 ```ruby puts File.exists? 'tempfile' ``` `exists?`方法檢查具有給定名稱的文件是否已經存在。 該行返回`false`,因為我們尚未創建文件。 ```ruby f = File.new 'tempfile', 'w' ``` 文件已創建。 ```ruby puts File.mtime 'tempfile' ``` `mtime`方法為我們提供了文件的最后修改時間。 ```ruby puts f.size ``` 我們確定文件大小。 由于尚未寫入文件,因此該方法返回 0。 ```ruby File.rename 'tempfile', 'tempfile2' ``` 最后,我們使用`rename`方法重命名文件。 ```ruby $ ./testfile.rb false 2011-11-05 16:19:36 +0100 0 ``` 這是一個示例輸出。 接下來,我們將從磁盤上的文件中讀取數據。 ```ruby #!/usr/bin/ruby f = File.open("stones") while line = f.gets do puts line end f.close ``` 這是一個簡單的腳本,它將打開一個名為`stone`的文件,并將其內容逐行打印到終端。 ```ruby f = File.open("stones") ``` 我們打開一個`stones`文件。 默認模式是讀取模式。 `stones`文件包含九個有價值的寶石名稱,每個名稱都位于單獨的行上。 ```ruby while line = f.gets do puts line end ``` `gets`方法從 I/O 流中讀取一行。 當我們到達文件末尾時,`while`塊結束。 ```ruby $ ./readlines2.rb Garnet Topaz Opal Amethyst Ruby Jasper Pyrite Malachite Quartz ``` 這是示例的輸出。 下一個示例將從文件中讀取數據。 ```ruby #!/usr/bin/ruby fname = 'alllines.rb' File.readlines(fname).each do |line| puts line end ``` 該腳本顯示了讀取文件內容的另一種方法。 該代碼示例將在終端上打印其自己的代碼。 ```ruby File.readlines(fname).each do |line| puts line end ``` `readlines`從指定文件讀取所有行,并以數組形式返回它們。 我們使用`each`方法遍歷數組并將行打印到終端。 ```ruby $ ./alllines.rb #!/usr/bin/ruby fname = 'alllines.rb' File.readlines(fname).each do |line| puts line end ``` 示例的輸出。 ## Ruby 目錄 在本節中,我們使用目錄。 我們有一個`Dir`類,可以在 Ruby 中使用目錄。 ```ruby #!/usr/bin/ruby Dir.mkdir "tmp" puts Dir.exists? "tmp" puts Dir.pwd Dir.chdir "tmp" puts Dir.pwd Dir.chdir '..' puts Dir.pwd Dir.rmdir "tmp" puts Dir.exists? "tmp" ``` 在腳本中,我們使用`Dir`類的四種方法。 ```ruby Dir.mkdir "tmp" ``` `mkdir`方法創建一個名為`tmp`的新目錄。 ```ruby puts Dir.exists? "tmp" ``` 使用`exists?`方法,我們檢查文件系統中是否存在具有給定名稱的目錄。 ```ruby puts Dir.pwd ``` `pwd`方法打印當前工作目錄。 這是我們啟動腳本的目錄。 ```ruby Dir.chdir '..' ``` `chdir`方法更改到另一個目錄。 `..`目錄是當前工作目錄的父目錄。 ```ruby Dir.rmdir "tmp" puts Dir.exists? "tmp" ``` 最后,我們使用`rmdir`方法刪除目錄。 這次`exists?`方法返回`false`。 ```ruby $ ./dirs.rb true /home/vronskij/programming/ruby/io /home/vronskij/programming/ruby/io/tmp /home/vronskij/programming/ruby/io false ``` 這是示例的輸出。 在第二個示例中,我們檢索目錄的所有條目,包括其文件和子目錄。 ```ruby #!/usr/bin/ruby fls = Dir.entries '.' puts fls.inspect ``` `entries`方法返回給定目錄的所有條目。 ```ruby fls = Dir.entries '.' puts fls.inspect ``` 我們得到當前目錄的文件和目錄數組。 `.`字符在此上下文中表示當前工作目錄。 `inspect`方法為我們提供了更可讀的數組表示形式。 ```ruby $ ./allfiles.rb ["putc.rb", "simplewrite.rb", "readlines2.rb", "fileexists.rb~" ... ``` 在輸出中,我們可以看到文件和目錄的數組。 第三個示例使用主目錄。 計算機中的每個用戶都有一個分配給他的唯一目錄。 它稱為主目錄。 在這里,他可以放置文件并創建自己的目錄層次結構。 ```ruby #!/usr/bin/ruby puts Dir.home puts Dir.home 'root' ``` 該腳本打印兩個主目錄。 ```ruby puts Dir.home ``` 如果未指定用戶名,則返回當前用戶的主目錄。 當前用戶是腳本文件的所有者。 有人啟動了腳本。 ```ruby puts Dir.home 'root' ``` 在這里,我們打印特定用戶的主目錄:在本例中為超級用戶。 ```ruby $ ./homedir.rb /home/vronskij /root ``` 這是一個示例輸出。 ## Ruby 執行外部程序 Ruby 有幾種執行外部程序的方法。 我們將處理其中一些問題。 在我們的示例中,我們將使用眾所周知的 Linux 命令。 Windows 或 Mac 的閱讀器可以使用特定于其系統的命令。 ```ruby #!/usr/bin/ruby data = system 'ls' puts data ``` 我們調用`ls`命令列出目錄內容。 ```ruby data = system 'ls' ``` `system`命令在子 Shell 中執行外部程序。 該方法屬于`Kernel` Ruby 模塊。 ```ruby $ ./system.rb allfiles.rb characters.rb fileexists.rb homedir.rb~ ... ``` This is a sample output. 我們展示了另外兩種在 Ruby 中運行外部程序的方式。 ```ruby #!/usr/bin/ruby out = `pwd` puts out out = %x[uptime] puts out out = %x[ls | grep 'readline'] puts out ``` 要運行外部程序,我們可以使用反引號`` ` ``或`%x[]`字符。 ```ruby out = `pwd` ``` 在這里,我們使用反引號執行`pwd`命令。 該命令返回當前工作目錄。 ```ruby out = %x[uptime] ``` 在這里,我們獲得`uptime`命令的輸出,該命令指示系統運行了多長時間。 ```ruby out = %x[ls | grep 'readline'] ``` 我們也可以結合使用命令。 ```ruby $ ./system2.rb /home/vronskij/programming/ruby/io 22:50:50 up 5:32, 1 user, load average: 0.46, 0.44, 0.45 readline.rb readline.rb~ readlines2.rb readlines2.rb~ ``` This is a sample output. 我們可以使用`open`方法執行命令。 該方法屬于`Kernel`模塊。 它創建一個連接到給定流,文件或子流程的 IO 對象。 如果要連接到子進程,請使用管道字符`|`來啟動`open`的路徑。 ```ruby #!/usr/bin/ruby f = open("|ls -l |head -3") out = f.read puts out f.close puts $?.success? ``` 在示例中,我們打印`ls -l | head -3`命令的結果。 這兩個命令的組合返回`ls -l`命令的前三行。 我們還檢查子進程的狀態。 ```ruby f = open("|ls -l |head -3") ``` 我們連接到由這兩個命令創建的子流程。 ```ruby out = f.read puts out ``` 我們從子流程讀取并打印數據。 ```ruby f.close ``` 我們關閉文件處理器。 ```ruby puts $?.success? ``` `$?`是一個特殊的 Ruby 變量,它設置為最后執行的子進程的狀態。 如果子進程以 OK 結束,則`success?`方法返回`true`。 ```ruby $ ./system3.rb total 148 -rwxr-xr-x 1 vronskij vronskij 57 2011-10-30 23:33 allfiles.rb -rwxr-xr-x 1 vronskij vronskij 58 2011-10-30 23:33 allfiles.rb~ true ``` This is a sample output. ## Ruby 重定向標準輸出 Ruby 具有用于標準輸入,標準輸出和標準錯誤輸出的預定義全局變量。 `$stdout`是標準輸出的變量的名稱。 ```ruby #!/usr/bin/ruby $stdout = File.open "output.log", "a" puts "Ruby" puts "Java" $stdout.close $stdout = STDOUT puts "Python" ``` 在上面的示例中,我們將標準輸出重定向到`output.log`文件。 ```ruby $stdout = File.open "output.log", "a" ``` 此行創建一個新的標準輸出。 現在,標準輸出將流到`ouput.log`文件。 該文件以附加模式打開。 如果該文件尚不存在,則會創建它。 否則,它將被打開并將數據寫入文件的末尾。 ```ruby puts "Ruby" puts "Java" ``` 我們打印兩個字符串。 字符串將不會像往常一樣顯示在終端中。 相反,它們將被附加到`output.log`文件中。 ```ruby $stdout.close ``` 處理器已關閉。 ```ruby $stdout = STDOUT puts "Python" ``` 我們使用預定義的標準常量`STDOUT`重新創建正常的標準輸出。 `"Python"`字符串被打印到控制臺。 在 Ruby 教程的這一部分中,我們使用 Ruby 進行輸入和輸出操作。
                  <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>

                              哎呀哎呀视频在线观看