{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## 5-7 IO/File\n", "### 5-7-1 File/IO オブジェクトの操作" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hoge\n", "\n" ] } ], "source": [ "file = File.open('fname.txt')\n", "puts file.read\n", "file.close" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hoge\n", "\n" ] } ], "source": [ "File.open 'fname.txt' do |file|\n", " puts file.read\n", "end" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"hoge\\n\"\n", "\"fuga\\n\"\n", "\"hey\\n\"\n", "\"ho\\n\"\n" ] } ], "source": [ "File.open 'fname.txt' do |file|\n", " while line = file.gets\n", " p line\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"hoge\\n\"\n", "\"fuga\\n\"\n", "\"hey\\n\"\n", "\"ho\\n\"\n" ] }, { "data": { "text/plain": [ "hoge\n", "fuga\n", "hey\n", "ho\n" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'fname.txt' do |file|\n", " file.each_line do |line|\n", " p line\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "104\n", "111\n", "103\n", "101\n", "10\n", "102\n", "117\n", "103\n", "97\n", "10\n", "104\n", "101\n", "121\n", "10\n", "104\n", "111\n", "10\n" ] }, { "data": { "text/plain": [ "hoge\n", "fuga\n", "hey\n", "ho\n" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'fname.txt' do |file|\n", " file.each_byte do |line|\n", " p line\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"hoge\\nfuga\\nhey\\nho\\n\"" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.read('fname.txt')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'fname2.txt', 'w' do |f|\n", " f.write 'Hello'\n", "end" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"Hello\"" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.read('fname2.txt')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "97" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'foo', File::WRONLY | File::CREAT do |f|\n", " # \"puts¥n\" と書き込み\n", " f.puts 'puts'\n", " # 改行文字(¥n)だけを書き込み\n", " f.puts\n", " # \"print\" と書き込み\n", " f.print 'print'\n", " # \"007\" と書き込み\n", " f.printf \"%03d\", 7\n", " # \"a\" と書き込み\n", " f.putc 97\n", "end" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"puts\\n\\nprint007a\"" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.read('foo')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "■アクセス位置の操作" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hoge\n", "fuga\n", "hey\n", "ho\n", "文字列を追記\n", "\n" ] } ], "source": [ "File.open 'fname.txt', 'a+' do |f|\n", " f.puts '文字列を追記'\n", " f.rewind\n", " puts f.read\n", "end" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "File.open 'fname.txt', 'a+' do |f|\n", " f.puts '文字列を追記2回目'\n", " #f.rewind\n", " puts f.read\n", "end" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'fname.txt' do |f|\n", " f.seek 10\n", " f.seek -10, IO::SEEK_CUR\n", " f.seek -10, IO::SEEK_END\n", "end" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n" ] }, { "data": { "text/plain": [ "30" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'fname.txt' do |f|\n", " f.pos = 30\n", " p f.pos\n", "end" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n", "\"を追記\\n文字列を追記2回目\\n\"\n" ] }, { "data": { "text/plain": [ "\"を追記\\n文字列を追記2回目\\n\"" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'fname.txt' do |f|\n", " f.pos = 30\n", " p f.pos\n", " p f.read\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "■エンコーディングの扱い" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"こんにちは\\n\"\n" ] }, { "data": { "text/plain": [ "\"こんにちは\\n\"" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open 'utf16.txt' do |f|\n", " f.set_encoding('UTF-8')\n", " f.set_encoding('UTF-16LE', 'UTF-8')\n", " f.set_encoding('UTF-16LE:UTF-8')\n", " p f.read\n", "end" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Encoding.default_external" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "EUC-JP\n", "UTF-8\n" ] } ], "source": [ "File.open 'fname.txt', 'r:euc-jp:utf-8' do |f|\n", " puts f.external_encoding\n", " puts f.internal_encoding\n", "end" ] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.4.1", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.4.1" } }, "nbformat": 4, "nbformat_minor": 2 }