文字列クラスは,固定長で文字を格納する.C言語と同じく,文字の配列.
インスタンスの作り方
方法2は,11文字だけ格納できる文字列のインスタンスである.インス タンスの生成後,1文字ずつ代入する必要がある.文字列の操作は,基本的に は,操作対象の文字の位置(インデックス)を指定する必要がある.
メソッドの例
以下を Workspace 上で実行してみよう.
s := String new: 11. i := 1. #( $H $e $l $l $o $ $w $o $r $l $d ) do: [: c | s at: i put: c. i := i + 1 ]. Transcript show: s; cr. s at: 7 put: $W. Transcript show: s; cr. t := s, '!'. Transcript show: t; cr |
String クラスでは,文字の追加や削除などが不便である.Stream クラスに変換すれば,文字列の操作が簡単になる.
ストリームのサブクラス
Stream DataStream ReferenceStream SmartRefStream PositionableStream ReadStream WriteStream ReadWriteStream FileStream ※クラスの上下関係の意味を考えてみよう.
メソッドの例
文字列からストリームに変換(読み取り用) | s := ReadStream on: 'Hello World' |
書き込み用 | s := WriteStream on: '' (シングルコートが2つ) |
1文字を読み取る | s next |
1行を読み取る | s nextLine |
指定文字まで読み取る | s upTo: 文字 |
内容を全て得る | s contents |
1文字書き込む | s nextPut: 文字 |
1文字列を書き込む | s nextPutAll: 文字列 |
Tab文字を書き込む | s tab |
改行文字を書き込む | s cr |
参照位置を調べる | s position |
終端かどうか調べる | s atEnd |
以下を Workspace で動かそう.
s := WriteStream on: ''. (Alt-d を押す) s nextPutAll: 'Hello'. (Alt-d を押す) s contents. (Alt-p を押す) s nextPutAll: ' World'. (Alt-d を押す) s contents. (Alt-p を押す) s nextPut: $!. (Alt-d を押す) s contents. (Alt-p を押す) |
「名前」と「ポイント」が「=」で区切られて記載された文字列から,名前 のみとポイントのみを抽出して表示するプログラムを Workspace 上に作成しよ う.
s := ReadStream on: 'ALONSO=36'. n := s upTo: $=. p := s nextLine. Transcript show: 'name = ',n; cr. Transcript show: 'point = ',p; cr |
テキストファイルは文字列と改行文字の連続の構成である. この構造は Stream クラスで扱うことができる. ファイル用のストリームは,FileStream クラスである.
メソッドの例
読み込み用 | fin := FileStream fileNamed: 'testIn.dat' |
書き込み用 | fout := FileStream newFileNamed: 'testOut.dat' |
ファイルから1行を読み,その行の先頭に行番号を付与して,Transcript に表示するプログラムを Workspace 上に作成しよう.
fin := FileStream fileNamed: 'testIn.dat'. n := 1. [ fin atEnd ] whileFalse: [ line := fin nextLine. nline := (n asString), ':', line. Transcript show: nline; cr. n := n + 1. ]. fin close |
※ testIn.dat のサンプル ⇒ ここの ファイルを「マウスの右クリックにより『名前を付けて保存』」でダウンロー ドして下さい.Squeak の入力ファイルは,Linux で普通に作ったテキストファ イルと異なり,Windows 系の改行コードが必要です.なお,コンソール上で, 「nkf -Lw 元ファイル名 > 新ファイル名」とすると,Linux の通常のテキ ストファイルをSqueak用に変換可能です.
名簿ファイル「f1.dat」は,1行の形式が「人 名=ポイント」となっている.名簿ファイルを読み,以下の情報を 「Transcript」に表示するプログラムを Workspace 上に作成せよ.
以下に動作例を示す:
Best: F.Alonso(36) Average: 7.09090909090909
ヒント:'123' を整数に変換するには、'123' asInteger とする.(1/2) を小数に変換するには,(1/2) asFloat とする.小数を文字列に変換するには, 3.14 asString とする.
練習の終った人は,「Transcript」に出力するのではなく,ファイルに出 力することを試みよ.