Ruby 파일 입력 및 출력
Ruby는 커널 모듈에 구현된 완전한 I/O 관련 메서드 세트를 제공합니다. 모든 I/O 메서드는 IO 클래스에서 파생됩니다.
클래스 IO는 read, write, gets, puts, readline, getc 및 printf와 같은 모든 기본 메서드를 제공합니다.
이 장에서는 Ruby에서 사용할 수 있는 모든 기본 I/O 기능을 설명합니다. 더 많은 기능을 보려면 Ruby의 IO 클래스를 확인하세요.
puts 문
이전 장에서는 변수에 값을 할당한 다음 puts 문을 사용하여 출력을 인쇄했습니다.
puts 문은 프로그램에 변수에 저장된 값을 표시하도록 지시합니다. 이렇게 하면 각 줄 끝에 새 줄이 추가됩니다.
Example
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
위 예제의 출력은 다음과 같습니다.
This is variable one This is variable two
gets 문
gets 문은 STDIN이라는 표준 화면에서 사용자 입력을 가져오는 데 사용할 수 있습니다.
Example
아래 코드는 gets 문을 사용하는 방법을 보여줍니다. 이 코드는 사용자에게 값을 묻는 메시지를 표시합니다. 이 값은 val 변수에 저장되고 최종적으로 STDOUT에 인쇄됩니다.
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
위 예제의 출력 결과는 다음과 같습니다.
Enter a value : This is entered value This is entered value
putc 문은
puts문과 다릅니다. puts 문은 전체 문자열을 화면에 출력합니다. putc 문은 한 문자를 순차적으로 출력하는 데 사용할 수 있습니다. Example
다음 코드의 출력은 문자 H입니다.
#!/usr/bin/ruby str="Hello Ruby!" putc str
위 예제의 출력 결과는 다음과 같습니다.
Hprint
문
print문은 puts 문과 유사합니다. . 유일한 차이점은 puts 문은 내용을 출력한 후 다음 줄로 이동하는 반면, print 문을 사용할 때는 커서가 같은 줄에 위치한다는 것입니다. Example
#!/usr/bin/ruby print "Hello World" print "Good Morning"
위 예제의 출력은 다음과 같습니다.
Hello WorldGood Morning
파일 열기 및 닫기
지금까지 표준 입력 및 출력을 읽고 썼습니다. 이제 실제 데이터 파일을 조작하는 방법을 살펴보겠습니다.
File.new메서드
File.new메서드를 사용하여 읽기, 쓰기 또는 읽기 및 쓰기를 위한 File 개체를 만들 수 있습니다. 읽기 및 쓰기 권한은 모드 매개변수에 따라 다릅니다. 마지막으로 File.close 메서드를 사용하여 파일을 닫을 수 있습니다. Syntax
aFile = File.new("filename", "mode") # ... 处理文件 aFile.closeFile.open
Method
File.open 메소드를 사용하여 새 파일 객체를 생성하고 파일 객체를 파일에 할당할 수 있습니다. 그러나 File.open 메서드와 File.new 메서드에는 약간의 차이가 있습니다. 차이점은 File.open 메서드는 블록과 연결할 수 있지만 File.new 메서드는 연결할 수 없다는 것입니다. File.open("filename", "mode") do |aFile|
# ... process the file
end
아래 표에는 파일을 여는 다양한 모드가 나열되어 있습니다.
Mode | Description |
---|---|
r | 읽기 전용 모드입니다. 파일 포인터는 파일의 시작 부분에 위치합니다. 이것이 기본 모드입니다. |
r+ | 읽기 및 쓰기 모드. 파일 포인터는 파일의 시작 부분에 위치합니다. |
w | 쓰기 전용 모드입니다. 파일이 있으면 파일을 덮어씁니다. 파일이 없으면 쓰기용으로 새 파일이 생성됩니다. |
w+ | 읽기 및 쓰기 모드. 파일이 있으면 기존 파일을 덮어씁니다. 파일이 존재하지 않으면 읽기 및 쓰기를 위해 새 파일이 생성됩니다. |
a | 쓰기 전용 모드입니다. 파일이 존재하는 경우 파일 포인터는 파일 끝에 배치됩니다. 즉, 파일이 추가 모드에 있습니다. 파일이 없으면 쓰기용으로 새 파일이 생성됩니다. |
a+ | 읽기 및 쓰기 모드. 파일이 존재하는 경우 파일 포인터는 파일 끝에 배치됩니다. 즉, 파일이 추가 모드에 있습니다. 파일이 존재하지 않으면 읽기 및 쓰기를 위해 새 파일이 생성됩니다. |
파일 읽기 및 쓰기
간단한 I/O에 사용되는 메서드도 모든 파일 개체에 사용할 수 있습니다. 따라서 get은 표준 입력에서 한 줄을 읽고 aFile.gets는 파일 개체 aFile에서 한 줄을 읽습니다.
그러나 I/O 객체는 편의를 제공하기 위해 액세스 방법에 대한 추가 설정을 제공합니다.
sysread 메서드
sysread 메서드를 사용하여 파일의 내용을 읽을 수 있습니다. sysread 메서드를 사용하면 두 모드 중 하나로 파일을 열 수 있습니다. 예:
입력 텍스트 파일은 다음과 같습니다.
This is a simple text file for testing purpose.
이제 이 파일을 읽어 보겠습니다.
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
이 명령문은 파일의 처음 20자를 입력합니다. 파일 포인터는 파일의 문자 21에 배치됩니다.
syswrite 메서드
syswrite 메서드를 사용하여 콘텐츠를 파일에 쓸 수 있습니다. syswrite 메소드를 사용하는 경우 쓰기 모드에서 파일을 열어야 합니다. 예:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
이 명령문은 파일에 "ABCDEF"를 기록합니다.
each_byte 메소드
이 메소드는 File 클래스에 속합니다. each_byte 메소드는 문자열의 각 문자를 반복할 수 있는 메소드입니다. 아래 코드 예시를 참조하세요.
#!/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
문자는 ch 변수에 하나씩 전달된 후 아래와 같이 화면에 표시됩니다.
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.e...
IO.readlines 메소드
classFile은 멤버입니다. 클래스 IO 하위 클래스. 클래스 IO에는 파일을 조작하는 방법도 있습니다.
IO.readlines은 IO 클래스의 메서드입니다. 이 메소드는 파일의 내용을 한 줄씩 반환합니다. 다음 코드는 IO.readlines 메소드의 사용을 보여줍니다.
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
이 코드에서 변수 arr은 배열입니다. input.txt 파일의 각 줄은 arr 배열의 요소가 됩니다. 따라서 arr[0]에는 파일의 첫 번째 줄이 포함되고 arr[1]에는 두 번째 줄이 포함됩니다.
IO.foreach 메서드
이 메서드도 출력을 한 줄씩 반환합니다. foreach 메소드와 readlines 메소드의 차이점은 foreach 메소드가 블록과 연관되어 있다는 것입니다. 그러나 readlines 메소드와 달리 foreach 메소드는 배열을 반환하지 않습니다. 예:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
이 코드는 test 파일의 내용을 한 줄씩 변수 블록에 전달한 다음 출력이 화면에 표시됩니다.
파일 이름 바꾸기 및 삭제
rename 및 delete 메소드를 통해 파일 이름을 바꾸고 삭제할 수 있습니다.
다음 예에서는 기존 파일 test1.txt의 이름을 바꿉니다.
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
다음 예에서는 기존 파일 test2.txt을 삭제합니다.
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")
파일 모드 및 소유권
마스크 chmod 메서드와 함께 사용하여 파일의 모드 또는 권한/액세스 목록:
다음 예에서는 기존 파일 test.txt의 모드를 마스크 값으로 변경합니다.
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
다음 표에는 chmod 메서드가 나열되어 있습니다. 사용 가능한 다양한 마스크:
ㅋㅋㅋ w , 소유자용0100 | x , for 소유자 |
---|---|
0070 | rwx 마스크 , 소속 그룹용 |
0040 | r , 소속 그룹용 |
0020 | w, 소속 그룹 |
0010 | x , 자신이 속한 그룹용 |
0007 | rwx 마스크 , 기타용 |
0004 | r , 기타용 |
0002 | w , 다른 사람들을 위해 |
0001 | x, 기타 |
4000 | 실행 시 사용자 ID 설정 |
2000 | 실행 시 그룹 ID 설정 |
1000 | 사용 후에도 교환 문자를 저장하세요 저장합니다 |
파일 쿼리다음 명령은 파일을 열기 전에 파일이 이미 존재하는지 확인합니다. #!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" ) 다음 명령은 파일이 실제로 파일인지 확인합니다. #!/usr/bin/ruby # 返回 true 或false File.file?( "text.txt" ) 다음 명령은 주어진 파일 이름이 디렉터리인지 확인합니다. #!/usr/bin/ruby # 一个目录 File::directory?( "/usr/local/bin" ) # => true # 一个文件 File::directory?( "file.rb" ) # => false 다음 명령은 파일이 읽기 가능하고, 쓰기 가능하고, 실행 가능한지 확인합니다. #!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false 다음 명령은 파일 크기가 0인지 확인합니다. #!/usr/bin/ruby File.zero?( "test.txt" ) # => true 다음 명령은 파일 크기를 반환합니다. #!/usr/bin/ruby File.size?( "text.txt" ) # => 1002 다음 명령은 파일 유형 확인에 사용됩니다: #!/usr/bin/ruby File::ftype( "test.txt" ) # => file ftype 메소드는 다음 값 중 하나를 반환하여 파일 유형을 식별합니다: file,directory,characterSpecial, blockSpecial, fifo, 링크, 소켓 또는 알 수 없음. 다음 명령은 파일이 생성되거나 수정되거나 마지막으로 액세스된 시기를 확인하는 데 사용됩니다. #!/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 Ruby의 디렉터리모든 파일은 디렉터리에 포함되어 있으며 Ruby는 파일과 디렉터리를 처리하는 방법을 제공합니다. File 클래스는 파일을 처리하는 데 사용되고 Dir 클래스는 디렉터리를 처리하는 데 사용됩니다. 디렉토리 찾아보기Ruby 프로그램에서 디렉토리를 변경하려면 Dir.chdir을 사용하세요. 다음 예에서는 현재 디렉터리를 /usr/bin로 변경합니다. Dir.chdir("/usr/bin") Dir.pwd를 통해 현재 디렉터리를 볼 수 있습니다. puts Dir.pwd # 返回当前目录,类似 /usr/bin Dir.entries를 사용하여 지정된 디렉터리에 있는 파일 및 디렉터리 목록을 가져올 수 있습니다. puts Dir.entries("/usr/bin").join(' ') Dir.entries 디렉터리의 지정된 모든 항목을 포함하는 배열입니다. Dir.foreach는 동일한 기능을 제공합니다. Dir.foreach("/usr/bin") do |entry| puts entry end 디렉토리 목록을 얻는 더 간단한 방법은 Dir의 배열과 유사한 메서드를 사용하는 것입니다. Dir["/usr/bin/*"] Create DirectoryDir.mkdir를 사용하여 디렉터리를 만들 수 있습니다. Dir.mkdir("mynewdir") mkdir을 통해 (기존 디렉터리가 아닌) 새 디렉터리에 대한 권한을 설정할 수도 있습니다. 참고: Mask 755 Set owner, group, world [누구나 ])에는 rwxr-xr-x 권한이 있습니다. 여기서 r = 읽기, w = 쓰기, x = 실행. Dir.mkdir( "mynewdir", 755 ) Delete DirectoryDir.delete를 사용하여 디렉토리를 삭제할 수 있습니다. Dir.unlink 및 Dir.rmdir은 편의를 위해 동일한 기능을 수행합니다. Dir.delete("testdir") Creating Files & Temporary Directories임시 파일이란 단순히 프로그램 실행 중에 생성되는 정보이지 영구적으로 저장되지 않는 정보입니다. Dir.tmpdir은 현재 시스템의 임시 디렉터리 경로를 제공하지만 이 방법은 기본적으로 사용할 수 없습니다. Dir.tmpdir을 사용할 수 있게 하려면 필수 'tmpdir'을 사용해야 합니다. File.join과 함께 Dir.tmpdir을 사용하여 플랫폼 독립적인 임시 파일을 만들 수 있습니다. 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) 이 코드는 임시 파일을 만들고 여기에 데이터를 쓴 다음 해당 문서를 삭제합니다. Ruby의 표준 라이브러리에는 임시 파일을 만드는 데 사용할 수 있는 Tempfile이라는 라이브러리도 포함되어 있습니다. require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close 내장 함수파일 및 디렉터리 작업을 위해 Ruby에 내장된 함수의 전체 목록이 제공됩니다. 아래:
|