カテゴリー
Ruby

IOクラスについて知ろう

この章ではIO クラスとファイルの入出力について説明します。
ファイルの入出力の基本はファイルを開いて、ファイルに書き込んだり、ファイルから読み込んだりして、最後にファイルを閉じます。
ファイルの入出力にはIO クラスのオブジェクト(IO オブジェクト)を使用します。
ではIO クラスを使用して、ファイルを操作する方法について説明します。9 ファイルを開いたり閉じたりする方法は2つあります。99 構文の中のアクセスモードとは「ファイルを読み込み用で開くのか」、「書き込み用で開くのか」、「読み書き両方で開くのか」を文字列で指定したものです。99999 9「ファイル操作の手順の2」のファイルに書き込んだり、ファイルから読み込んだりするには次の表のメソッドを使用します。
以下のメソッドを使って、入力したり、出力したりします。9999
では次の例で「test.dat」からデータを読み込んでみましょう。99 初めにファイルを開きますが、この例では先ほどの基本構文 2でファイルを開いています。
アクセスモードは読み込み専用の9を使用しています。
「オブジェクト.gets 」と言う形式でファイルからデータを読み込むことができます。
getsメソッドはファイルの中の1行分を読み込むことが出来ますので、「abcde」だけを読み込み、ファイルの終わり(EOF)になるとnilを返します。
最後に9という形式でファイルを閉じます。
基本構文2でファイルを開いた場合にはcloseメソッドは省略できます。
先ほどの例では1行しか取り出さないので、すべての要素を取り出したい場合はwhileを使用します。
次の例のようにwhileを使うと「abcde」「efgh」のすべてが取り出せます。
「a.gets」で取り出されたデータがbに入り、それをprintで出力しています。9
次の例をみてみましょう。99 readlineメソッドもgetsと同じでファイルの中の1行分だけ読み込むことが出来ます。
基本構文は9です。
次の例をみてみましょう。99 9と言う形式で、ファイルのすべての行を配列(この例ではb)に格納してくれます。
それを eachメソッド で繰り返し取り出しています。
結果は以下の通りです。9
次の例をみてみましょう。
9
「IOオブジェクト.getc 」という形式でファイルから1文字ずつ読み込みます。
このメソッドはファイルの終わり(EOF)になるとnilを返します。9
次の例をみてみましょう。9 基本構文は9です。
ファイルの初めから終わりまでを読み込んで出力します。
ファイルの終端に達するとnil を返します。9
次は9という構文でサイズを入力し、そのサイズ分だけファイルからデータを取り出します。9 この例では2バイト分だけ読み込んでいるので、結果は「ab」です。

次の例をみてみましょう。99 と言う基本構文でファイルの中身をすべて読み込むことが出来ます。9
次はファイルに書き込むメソッドについて説明します。
では例をみてみましょう。9 =>9と言う形式でファイルに改行を入れて書き込むことが出来ます。
これでt.datに「abcdef」「aiueo」が改行を入れて書き込まれます。
次の例をみてみましょう。9
9と言う形式でファイルに改行を入れないで書き込むことが出来ます。
結果はte.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
次の例をみてみましょう。9 9と言う形式でファイルに改行を入れないで書き込むことが出来ます。
結果はt.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
writeメソッドを使って、改行を入れて書き込みたい場合には以下の通り、9を入れます。9

次の例をみてみましょう。9 9と言う形式でファイルに書き込むことが出来ます。
結果はte.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
次はファイルポインタについて説明します。
ファイルのデータを読み書きするには「ここまで読んだから次はここから読む」もしくは「ここまで書いたから次はここから書く」のように位置を覚えておかなくてはいけませんが、プログラマ自身が覚えている必要はなく、ファイルポインタと言う位置情報にこのデータが記録されています。
次の例をみてみましょう。9 「IOオブジェクト.pos」と言う形式で、現在のファイル位置を得ることが出来ます。
2バイト読み込んだので、現在のファイルの位置は2の箇所にあります。
例の実行結果は「ab」と「2」を出力します。
またposは現在の位置を知るだけでは無くて、任意の位置に移動することが出来ますので次の例で説明します。99 移動したい場合は9と記述します。
「i.pos=5」は5バイトだけ移動します。
5バイトで出力すると「fgh」を出力します。
「i.pos=0」は先頭まで移動します。先頭まで移動したので「abcdefgh」を出力します。
次はファイルポインタを移動するseekメソッドについて説明します
では例をみてみましょう。99 9で、ファイルポインタを自由に移動させることができます。
第 2引数のwhenceには以下の3種類から選択して、ファイルポインタの動きを決めることが出来ます。9 では例の説明をします。
「i.read(2)」で2のサイズだけ動いていて、その後に9でさらに5のサイズだけ移動しているので9で現在の位置を見ると7になります。
7進んだ位置で出力すると「h」を出力します。
9のように9に変更したとしますと、これは絶対位置なので9で現在の位置を見ると5になります。9
次はrewindメソッドについて説明します。
rewindメソッドはファイルポインタを先頭に戻します。
では例をみてみましょう。999と言う形式でファイルポインタを先頭に戻します。
puts i.posで出力すると0が出力されます。9

カテゴリー
Ruby

if文で星座判定をしよう

この章ではif文で星座判定プログラムを作成します。
少し長いプログラムですが、if文が繋がっているだけです。
では例をみてみましょう。9999999999999 このプログラムではユーザーに誕生日の月と日を入力させて、その結果を表示するプログラムです。
では先頭から説明をしていきます。
ユーザーに文字を入力させるにはgetsメソッドを使います(メソッドについては「メソッドについて知ろう」で説明します)。
getsメソッドはユーザーがキーボードから入力した文字列を返します。
文字列を返すので、これを整数値に変換しないとif文の判定ができません。
そこでさらに9を使います。
入力値は文字列として入力されるので、これを整数値に変換するのが9です。
この章はif文の入れ子を説明するために用意したので、これらのメソッドについては「星座判定メソッドを作ろう」「stringクラスについて知ろう」で詳しく説明します。
これらのメソッドで行うことは以下の赤枠の箇所の入力です。
入力するまでプログラムの実行は止まりますので、入力をしてエンターキーを押すと次に進みます。9 では次に進みます。
このプログラムのif文の入れ子を使ってます。
つまり、if文の中にif文が入っている構造です。9 例えばmonthに1が入っているとします。
そうすると上のif文の9がtrueになりますので、さらに入れ子のif文の判定に入ります。
1月ですと、山羊座と水瓶座の2つの星座がありますので、9という形式でif文の入れ子の条件式を作成します。
そして、dayの値が31を超えると「間違い」が出力されます。
まとめますと、入れ子のif文とは始めのif文の条件式にマッチしたものに対して、さらに条件を絞りたい場合に使われます。
つまり、1月という初めの条件式にマッチしたら、さらに山羊座か水瓶座を調べたいので、if文の入れ子を使っています。

カテゴリー
C++

ユーザーに文字を入力させる方法

この章ではユーザーにキーボードから入力させる方法について説明します。
この方法もC言語で使われていますがC++でも使えるので説明をします。
では例をみてみましょう。1 1gets(配列名);は文字列と文字列の間に空白を入れることが出来ます。
例えば,「dog cats」のようにdog とcatsの間に空白を入れて複数入力することが出来ます。
例えば以下のように出力されます。1 この後に説明するscanfでは1のように空白を文字列に入れることはできません。
scanfについては説明しましたが、復習のつもりでもう一度説明します。
scanfはエンターキーを押すまで入力することが可能になります。
では例をみてみましょう。1 結果は以下の通りです。11 1111scanfの中の文字を入れる配列は複数書くことが出来ます。
この例ではxとsの2つを設定しています。
その場合にはそれぞれの配列をカンマで区切ります。1 結果は以下の通りです。1 もう一つユーザーにキーボードから入力させる方法があります。1 入力演算子「>>」を使うことでもユーザーにキーボードからの入力をさせることが出来ます。1 ユーザーが入力したデータは1の中の変数nに入ります。
その後、1で変数nを出力しています。

カテゴリー
C言語

ユーザーに文字列を入力させる方法

この章ではユーザーにキーボードから入力させる2つの方法について説明します。
ユーザーに文字列を入力してもらう方法は2つあります。
初めにgetsを使った方法について説明します。
では例をみてみましょう。1 初めに入力値を入れる配列をchar型の配列で作成します。
それが以下の箇所です。
char x[100];

次にgetsの引数に先ほど作成した配列を入れます。
それが以下の箇所です。1 この構文でユーザーからの入力を配列で受け取ります
エンターキーを押すまで入力することが可能になります。
gets(配列名);は入力時に文字列と文字列の間に空白を入れることができます。
例えば,「dog cats」のようにdog とcatsの間に空白を入れて複数入力することが出来ます。
結果は以下のように出力されます。1
次はscanfを使った文字入力方法について説明します。1 結果は以下の通りです。1111