Najlepszy samouczek Ruby złożyć wejście i wyjście W 2024 r. W tym samouczku możesz dowiedzieć się stawiaoświadczenie,dostajeStatement,oświadczenieputc,sprawozdaniedruku,Otwieranie i zamykanie plików,Odczyt i zapis plików,Zmiana nazwy i usuwanie plików,Tryb plików i własności,Dostęp do dokumentu,katalog Ruby,Tworzenie katalogu tymczasowego pliku &,Wbudowane funkcje,
Ruby zapewnia zestaw metod związanych z I / O-realizowanych w kernel (jądro) modułu. Wszystkie I Metoda / O pochodzi od grupy IO.
IOzawiera wszystkie podejścia oparty na klasach, takichjak: odczyt, zapis, staje się stawia,readline, getc iprintf.
Ta sekcja wyjaśni wszystkie dostępne Ruby opartych funkcje I / O. Aby uzyskać więcej funkcji, zobacz klasę RubyIO.
W poprzedniej części, przypisana do zmiennej, a następnie użyj wydruk oświadczeniestawia.
stawiazestawienie wskazuje, że program wyświetla wartości zapisanych w zmiennych. Spowoduje to dodanie nowego rzędu na końcu każdej linii.
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
Uruchom wyjście Powyższy przykład to:
This is variable one This is variable two
dostajerachunek mogą być wykorzystywane w celu uzyskania danych wprowadzanych przez użytkownika ze standardowego ekranu zwanego standardowego wejścia.
Poniższy kod demonstruje jak używać dostaje oświadczenie. Kod poprosi użytkownika, aby wprowadzić wartość, która będzie przechowywana w zmiennej val końcowy zostanie wydrukowany na standardowe wyjście.
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
Uruchom wyjście Powyższy przykład to:
Enter a value : This is entered value This is entered value
Istawiaróżne oświadczenia, oświadczeniestawiawyjście całego napisu na ekranie, podczas gdyputcOświadczenie może być stosowane do produkcji sekwencję znaków.
Wyjście z następującym kodem jedyną postacią H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
Uruchom wyjście Powyższy przykład to:
H
wydrukowanieoświadczenia iumieszczapodobne oświadczenie. Jedyną różnicą jest to, że po stwierdzeniestawiawyjście będzie przejść do następnej linii, a korzystanie z instrukcjiprint,kursor znajduje się na tej samej linii.
#!/usr/bin/ruby print "Hello World" print "Good Morning"
Uruchom wyjście Powyższy przykład to:
Hello WorldGood Morning
Jak na razie, trzeba czytać i pisać do standardowego wejścia i wyjścia. Teraz będziemy patrzeć na to, jak rzeczywiste plików danych.
Można utworzyć obiektFilesłuży do odczytu metodęFile.new,pisać i czytać i pisać, czytać i pisać uprawnień w zależności od parametrów trybu. Wreszcie, można użyć metodyplik.closeaby zamknąć plik.
aFile = File.new("filename", "mode") # pl. 处理文件 aFile.close
Można utworzyć nowy obiekt pliku za pomocą metodyFile.Open,a obiekt jest przypisany do pliku plik. Jednakże istnieje pewna różnica pomiędzyFile.OpeniFile.newmetod. Różnica jest metodaFile.openmoże być związany z blokiem, a nie metodyFile.new.
File.open("filename", "mode") do |aFile| # pl. process the file end
Poniższa tabela zawiera listę otwartych plików w różnych trybach:
模式 | 描述 |
---|---|
r | 只读模式。文件指针被放置在文件的开头。这是默认模式。 |
r+ | 读写模式。文件指针被放置在文件的开头。 |
w | 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 |
w+ | 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 |
a | 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 |
a+ | 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。 |
Sposób prosty I / O mogą być również stosowane do wszystkich obiektów plików. Więc dostaje czyta wiersz ze standardowegowejścia,aFile.gets aFile odczytuje linię z obiektu pliku.
Jednakże, I / O obiektu zapewnia dodatkowy zestaw metod dostępu, zapewnia nam wygodę.
Można użyć metodysysreadodczytać zawartość pliku. Gdy z wykorzystaniem metody sysread, można użyć dowolnego jeden tryb, aby otworzyć plik. Na przykład:
Poniżej znajduje się plik tekstowy wejściowy:
This is a simple text file for testing purpose.
Teraz spróbujmy odczytać pliku:
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
To oświadczenie wejdzie 20 pierwszych znaków w pliku. Wskaźnik na plik zostanie umieszczony w pozycji w pliku 21 znaków.
Można użyć metodysyswritezapisu do pliku. Gdy z wykorzystaniem metody syswrite, trzeba otworzyć plik w trybie zapisu. Na przykład:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
Sprawozdania są napisane "ABCDEF" do pliku.
Metoda ta należy do klasyFile.Each_byte Metoda iteracyjna jest w stanie ciąg znaków każda. Rozważmy następujące przykłady kodu:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") aFile.rewind aFile.each_byte {|ch| putc ch; putc ?. } else puts "Unable to open file!" end
Jedna po drugiej postaci przepuszcza zmiennej CH, a następnie wyświetlony na ekranie, jak to pokazano poniżej:
A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.epl.
KlasaFilejest podklasą klasy IO. Klasa IO ma także kilka metod manipulacji plikami.
IO.readlinesjest klasa IO metoda. Sposób postępowy zwraca zawartości pliku. Poniższy kod przedstawia sposóbIO.readlinesużywania:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
W tym kodzie zmienna jest tablicą arr. Każdy wiersz jest plikiem arr tablicainput.txtelementu. Dlatego arr [0] będzie zawierał pierwszą linię, a arr [1] będzie zawierać drugą linię pliku.
Metoda zwraca również wyjście progresywne.Foreachpomiędzy różnymi sposobami i metodamireadlineszwiązany jest blok metodyforeach.Jednak w przeciwieństwie dometody,metodareadlinesforeach zamiast wracać tablicę. Na przykład:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
Kod ten będzietestowaćzawartość pliku przeszedł zmienną blok postępowy, to wyjście będzie wyświetlany na ekranie.
Można zmieniać nazwy i usuwać pliki,zmiana nazwyiusuwaniemetod.
Poniższy przykład zmienia nazwę pliku, który już istniejetest1.txt:
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
Poniższy przykład, aby usunąć istniejącątest2.txt pliku:
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")
Użyjchmod,aby zmienić metodę z uprawnieniami wzór maski lub pliku / liście dostępu:
Przykłady następujących zmian do istniejącego modelutest.txtplików dla wartości maski:
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
W poniższej tabeli wymieniono różne maski Metodachmodmożna stosować:
掩码 | 描述 |
---|---|
0700 | rwx 掩码,针对所有者 |
0400 | r ,针对所有者 |
0200 | w ,针对所有者 |
0100 | x ,针对所有者 |
0070 | rwx 掩码,针对所属组 |
0040 | r ,针对所属组 |
0020 | w ,针对所属组 |
0010 | x ,针对所属组 |
0007 | rwx 掩码,针对其他人 |
0004 | r ,针对其他人 |
0002 | w ,针对其他人 |
0001 | x ,针对其他人 |
4000 | 执行时设置用户 ID |
2000 | 执行时设置所属组 ID |
1000 | 保存交换文本,甚至在使用后也会保存 |
Następujące polecenie, aby sprawdzić plik przed otwarciem pliku już istnieje:
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
Następujące polecenie, aby zapytać, czy plik jest naprawdę pliku:
#!/usr/bin/ruby # 返回 true 或false File.file?( "text.txt" )
Następujące polecenie, aby sprawdzić, czy w danym pliku jest katalogiem:
#!/usr/bin/ruby # 一个目录 File::directory?( "/usr/local/bin" ) # => true # 一个文件 File::directory?( "file.rb" ) # => false
Są następujące polecenie, aby sprawdzić plik do odczytu, zapisu, plik wykonywalny:
#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false
Poniższe polecenie sprawdza rozmiar pliku do zera:
#!/usr/bin/ruby File.zero?( "test.txt" ) # => true
Następujące polecenie zwraca rozmiar pliku:
#!/usr/bin/ruby File.size?( "text.txt" ) # => 1002
Poniższe polecenie służy do sprawdzania typ pliku:
#!/usr/bin/ruby File::ftype( "test.txt" ) # => file
Metoda ftype zwraca wartość poniżej zidentyfikować typpliku: Plik, katalog characterSpecial, blockSpecial, FIFO, link, gniazdolub nieznane.
Poniższe polecenie służy do sprawdzania plik został utworzony, zmienione lub czas ostatniego dostępu:
#!/usr/bin/ruby File::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008 File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008 File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008
Wszystkie pliki znajdują się w katalogu, Ruby dostarcza potrzebnych plików i katalogów.Plikklasy służące do pracy zplikami,klas Dir do katalogu roboczego.
Aby zmienić katalog w programie Ruby, skorzystajDir.chdir.Poniższe przykłady zmiany aktualnego katalogu/ usr / bin.
Dir.chdir("/usr/bin")
Można wyświetlić aktualnąDir.pwd katalogu:
puts Dir.pwd # 返回当前目录,类似 /usr/bin
Można użyćDir.entriesuzyskać listę plików i katalogów wewnątrz określonego katalogu:
puts Dir.entries("/usr/bin").join(' ')
Dir.entrieszwraca tablicę zawierającą wszystkie określony katalog.Dir.foreachzapewnia taką samą funkcjonalność:
Dir.foreach("/usr/bin") do |entry| puts entry end
Uzyskać listę katalogu bardziej zwięzły sposób to metoda za pomocą klasy Array reż:
Dir["/usr/bin/*"]
Dir.mkdirmogą być wykorzystywane do tworzenia katalogu:
Dir.mkdir("mynewdir")
Można także ustawić uprawnienia do nowego katalogu (nie istniejącego katalogu) przyjęła mkdir:
Uwaga: Maska 755 Ustaw właściciela (właściciel), należący do grupy (grupy), każdy (światowa [ktoś]) Uprawnienia rwxr-xr-x, gdzie R = czytać czytać, w = Napisz, x = wykonać egzekucję.
Dir.mkdir( "mynewdir", 755 )
Dir.deletebyć stosowany do usuwania katalogów.Dir.unlinkiDir.rmdirpełnią tę samą funkcję, zapewnia nam wygodę.
Dir.delete("testdir")
Pliki tymczasowe są tworzone, które są po prostu w trakcie realizacji programu, ale nie na stałe zapisane informacje.
Dir.tmpdirstanowi ścieżkę w bieżącym katalogu tymczasowego systemu, który domyślnie, ale jest niedostępny. AbyDir.tmpdirdostępne ze konieczna jest wymagana "tmpdir".
MożnaDir.tmpdiriFile.joinużywane razem, aby stworzyć platformę niezależne pliki tymczasowe:
require 'tmpdir' tempfilename = File.join(Dir.tmpdir, "tingtong") tempfile = File.new(tempfilename, "w") tempfile.puts "This is a temporary file" tempfile.close File.delete(tempfilename)
Kod ten tworzy plik tymczasowy, w którym do zapisu danych, a następnie usunąć plik. Rubin standardowa biblioteka zawiera bibliotekę nazwietempfilebiblioteki mogą być wykorzystywane do tworzenia pliku tymczasowego:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
Poniżej przedstawiono kompletną listę plików i katalogów w wbudowanych funkcji Ruby: