• 検索結果がありません。

何時何処で誰が

N/A
N/A
Protected

Academic year: 2021

シェア "何時何処で誰が"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラムの概要

表示タブでは、表示ボタンをクリッ クする度に、各文節がランダムに選 択されて表示される。 編集タブでは、新たに文章を入力し て追加したり、既存の文章を訂正し て更新したり、不要の文章を削除し たりする事が出来る。 亦、先頭や末尾、1つ前や1つ後の レコードに移動する為のボタンも 用意する。 今回は、ファイルアクセスの基礎と 成るシーケンシャルファイルの入 出力全般に付いて学習する。

何時何処で誰が

C# 2005 ② □ 構造体(ユーザー定義型)の宣言(Structure) □ 構造体型変数の宣言(構造体名 変数名;) □ 動的配列の宣言(データ型[ ] 変数名;) □ プロパティの値の取得と設定(StartupPath、Tag、Text、Enabled) □ イベントの利用(Load、Click) □ ステートメントの利用(Structure 、return、break) □ 演算子(代入演算子、算術演算子、比較演算子、論理演算子、結合演算子) □ イベントトリガーコントロールの取得(イベントプロシージャの sender 引数) □ コンテナコントロールの利用(タブコントロール) □ ファイル入出力(シーケンシャルファイルの読込 StreamReader、ReadLine、Close) □ ファイル入出力(シーケンシャルファイルの書込 StreamWriter、WriteLine、Close) 今回の課題項目 □ シーケンシャルファイルの入出力(StreamReader、StreamWriter) 今回の重点項目 □ パスワードも保存して登録者以外は訂正・削除出来ない様に改良する。 □ データの検索機能と一覧表示機能を付加してデータベース化する。 今回の応用項目

(2)

■ オブジェクト・プロパティ一覧 ① ■ コントロールの種類 プロパティ プロパティの設定値 フォーム Name Form1 Text 何時何処で誰がゲーム タブコントロール Name tabStage Text 表示(TabPage1) 編集(TabPage2) ラベル1 Name lblWhenD Text 何時 ラベル2 Name lblWhereD Text 何処で ラベル3 Name lblWhoD Text 誰が ラベル4 Name lblWhatD Text 何をした テキストボックス1 Name txtWhenD Text 空白 テキストボックス2 Name txtWhereD Text 空白 テキストボックス3 Name txtWhoD Text 空白 テキストボックス4 Name txtWhatD Text 空白 ボタン1 Name btnDisp Text 表示 ボタン2 Name btnLoad Text 読込 ボタン3 Name btnFinish Text 終了 ラベル1 ラベル2 ラベル3 ラベル4 テキスト1 テキスト2 テキスト3 テキスト4 タブコントロール ボタン1 ボタン3 ボタン2 TabPages 属性で設定

(3)

■ オブジェクト・プロパティ一覧 ② ■ コントロールの種類 プロパティ プロパティの設定値 ラベル5 Name lblWhenE Text 何時 ラベル6 Name lblWhereE Text 何処で ラベル7 Name lblWhoE Text 誰が ラベル8 Name lblWhatE Text 何をした ラベル9 Name lblNumber AutoSize False Text、TextAlign 空白、MiddleCenter テキストボックス5 Name txtWhenE Text 空白 テキストボックス6 Name txtWhereE Text 空白 テキストボックス7 Name txtWhoE Text 空白 テキストボックス8 Name txtWhatE Text 空白 ボタン4 Name btnInsert Text 追加 Tag 1 ボタン5 Name btnUpdate Text 訂正 Tag 2 ボタン6 Name btnDelete Text 削除 Tag 3 ボタン10 ボタン4 ラベル9 ラベル5 ラベル6 ラベル7 ラベル8 テキスト5 テキスト6 テキスト7 テキスト8 ボタン5 ボタン6 ボタン9 ボタン8 ボタン7

(4)

コントロールの種類 プロパティ プロパティの設定値 ボタン7 Name btnFirst Text 空白 tag 1 Image first.gif ボタン8 Name btnPrev Text 空白 tag 2 Image prev.gif ボタン9 Name btnNext Text 空白 tag 3 Image next.gif ボタン10 Name btnLast Text 空白 tag 4 Image last.gif (Font、ForeColor、BackColor 等のプロパティは任意に設定して下さい) ラベル テキストを表示するコントロール。此のテキストは、ユーザーが直接入力したり変更したりす る事は出来ない。 テキストボックス テキストの入力や表示を行うコントロール。此のテキストは、ユーザーが直接入力したり変更 したりする事が出来る。 ボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OKボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用されるコントロールです。 タブコントロール 複数のタブを表示するコントロール。各タブは、他のコントロールのコンテナと仕て機能し、 アクティブなタブに配置されたコントロールだけが表示される。

(5)

■ プログラムリスト ■ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace _5w1h {

public partial class Form1 : Form {

// フォームレベルでグローバルな構造体の宣言 private struct WordData

{

public string ItemWhen; public string ItemWhere; public string ItemWho; public string ItemWhat; }

// フォームレベルでグローバルな定数の宣言 private const int MAX = 100;

// フォームレベルでグローバルな変数の宣言 private string sd;

private int cnt, ptr;

private WordData[ ] wd = new WordData[ MAX ]; private System.IO.StreamWriter sw;

private Random rnd = new Random(( int )DateTime.Now.Ticks ); public Form1( ) { InitializeComponent( ); } // フォームが読み込まれた時の処理

private void Form1_Load( object sender, EventArgs e ) {

sd = Application.StartupPath; if ( !sd.EndsWith(@"¥") ) sd += @"¥"; DataLoad( );

this.btnPrev.Click += new EventHandler( this.btnFirst_Click ); this.btnNext.Click += new EventHandler( this.btnFirst_Click ); this.btnLast.Click += new EventHandler( this.btnFirst_Click );

this.btnUpdate.Click += new EventHandler( this.btnInsert_Click ); this.btnDelete.Click += new EventHandler( this.btnInsert_Click ); } Structure ステートメントは、1 個、又は、複数の要素を持つデー タ型(構造体)を宣言する。 レコード内のフィールドを定義す るのに用いられる。 定数を使用すると、プログラムの 可読性が高まり、修正が容易に成 る。定数は、変数とは異なり、プ ログラムの実行中に値を変更する 事は出来ない。 ネームスペース(名前空間)の使 用を宣言して居る。 此の部分は、エディタが、自動的 に記述して下れる。 此処で宣言した変数は同じフォー ム内の総てのサブプロシージャで 値の参照と設定を行う事が出来 る。 Application.StartupPath には起 動したアプリケーションのパスが 格納されて居る。 Random は、擬似乱数ジェネレー タを表すクラスで有る。

(6)

// ボタン(表示)がクリックされた時の処理

private void btnDisp_Click( object sender, EventArgs e ) {

txtWhenD.Text = wd[ rnd.Next( 1, cnt + 1 )].ItemWhen; txtWhereD.Text = wd[ rnd.Next( 1, cnt + 1 )].ItemWhere; txtWhoD.Text = wd[ rnd.Next( 1, cnt + 1 )].ItemWho; txtWhatD.Text = wd[ rnd.Next( 1, cnt + 1 )].ItemWhat; }

// ボタン(読込)がクリックされた時の処理

private void btnLoad_Click( object sender, EventArgs e ) {

DataLoad( ); }

// ボタン(追加、訂正、削除)がクリックされた時の処理

private void btnInsert_Click( object sender, EventArgs e ) {

Button b = ( Button )sender;

int i, n = System.Convert.ToInt32( b.Tag ); switch ( n ) { case 1: if ( cnt + 1 > MAX ) return; cnt++; wd[ cnt ].ItemWhen = txtWhenE.Text; wd[ cnt ].ItemWhere = txtWhereE.Text; wd[ cnt ].ItemWho = txtWhoE.Text; wd[ cnt ].ItemWhat = txtWhatE.Text;

sw = new System.IO.StreamWriter( sd + "5w1h.dat", true, Encoding.Default ); DataSave( cnt ); sw.Close( ); break; case 2: wd[ ptr ].ItemWhen = txtWhenE.Text; wd[ ptr ].ItemWhere = txtWhereE.Text; wd[ ptr ].ItemWho = txtWhoE.Text; wd[ ptr ].ItemWhat = txtWhatE.Text;

sw = new System.IO.StreamWriter( sd + "5w1h.dat", false, Encoding.Default ); for ( i = 1; i <= cnt; i++ ) DataSave( i );

sw.Close( ); break; case 3:

for ( i = ptr; i < cnt; i++ ) wd[ i ] = wd[ i + 1 ]; cnt--;

sw = new System.IO.StreamWriter( sd + "5w1h.dat", false, Encoding.Default ); for ( i = 1; i <= cnt; i++ ) DataSave( i );

Random オブジェクトの Next メ ソッドは、第1引数以上、第2引 数未満の整数を返す。 此処では、配列の範囲内の数値 1 からcnt を得て居る。 此処で宣言した変数は宣言したサ ブプロシージャ内でしか値の参照 と設定を行う事が出来ない。 Return ステートメントは、以降の コードを実行せずに、直ちにプロ シージャを抜け、呼出元に戻る命 令で有る。 C#では、プロシージャ等に制御を 渡すには、関数呼出の形式を採る。 必要が有れば、引数を指定する事 に依り、変数、配列、式の孰れか をプロシージャに引き渡す事が出 来る。 構造体(ユーザー定義型)の各要 素は、構造体型変数の後にドット で区切り要素名を記述する。 構造体を構成する各要素に値を代 入する。 此処では、削除したデータ以降の データを1個宛前に移動して居 る。

(7)

sw.Close( ); if ( ptr > cnt ) ptr = cnt; DataDisp( ); break; } } // ボタン(|<、<、>、>|)がクリックされた時の処理

private void btnFirst_Click( object sender, EventArgs e ) {

Button b = ( Button )sender;

int n=System.Convert.ToInt32( b.Tag );

switch ( n ) {

case 1: ptr = 1; break;

case 2: if ( ptr == 1 ) { ptr = cnt; } else { ptr--; }; break; case 3: if ( ptr == cnt ) { ptr = 1; } else { ptr++; }; break; case 4: ptr = cnt; break; } DataDisp( ); } // ボタン(終了)がクリックされた時の処理

private void btnFinish_Click( object sender, EventArgs e ) { this.Dispose( ); Application.Exit( ); } // データを書き込むジェネラルプロシージャ private void DataSave( int p )

{ string s = wd[ p ].ItemWhen; s += "," + wd[ p ].ItemWhere; s += "," + wd[ p ].ItemWho; s += "," + wd[ p ].ItemWhat; sw.WriteLine( s ); } // データを読み込むジェネラルプロシージャ private void DataLoad( )

{ string s, f = sd + "5w1h.dat"; string[ ] t; if 文や for 文で実行する文が1個 丈の場合は、ブロックを表す中括 弧 { } を省略する事が出来る。 文が短い場合には、セミコロンで 区切り、1行に複数の文を記述す る事が出来る。此れをマルチステ ートメントと謂う。 アプリケーションを終了する場 合、Dispose メソッドで、正しく プログラムをメモリから消去して 終了する事が望ましい。 頻繁に行う処理は、名前を付けて 一纏めに仕て置き、其の処理を必 要とする箇所より呼び出す事に依 り、対象のコードを実行する事が 出来る。 此の様なプロシージャを、ジェネ ラルプロシージャやメソッドと呼 ぶ。亦、此の様なプロシージャを 呼び出す事を、サブルーチンコー ルや関数呼出と謂う。 複数のコントロールで同一のイベ ントプロシージャを共有する場合 呼出元のオブジェクトを特定する には、sender 引数を利用する。

(8)

if ( System.IO.File.Exists( f )) {

System.IO.StreamReader sr = new System.IO.StreamReader( f, Encoding.Default ); cnt = 0;

while (( s = sr.ReadLine( )) != null ) { t = s.Split( ',' ); cnt++; wd[ cnt ].ItemWhen = t[ 0 ]; wd[ cnt ].ItemWhere = t[ 1 ]; wd[ cnt ].ItemWho = t[ 2 ]; wd[ cnt ].ItemWhat = t[ 3 ]; } sr.Close( ); ptr = 1; DataDisp( ); btnDisp.Enabled = true; } else { btnDisp.Enabled = false; } } // データを表示するジェネラルプロシージャ private void DataDisp( )

{

txtWhenE.Text = wd[ ptr ].ItemWhen; txtWhereE.Text = wd[ ptr ].ItemWhere; txtWhoE.Text = wd[ ptr ].ItemWho; txtWhatE.Text = wd[ ptr ].ItemWhat;

lblNumber.Text = ptr.ToString( ) + "/" + cnt.ToString( ); } } } 此処ではファイルの存在の有無を System.IO.File.Exists メ ソッ ド を用いて調べて居る。入力モード でファイルを開いた場合、指定し たファイルが存在し無いと、エラ ーが発生する為、先ずファイルの 存在を確認してから、ファイルを 開く事が望ましい。此のメソッド は、指定したファイルが存在する とtrue を、存在しないと false を 返す。 数値変数は、ToString メソッドで 文字列化してから、結合する。 Visual Basic では、暗黙的な型変 換が行われる事が多いが、C#では 明示的に型変換を行う必要が有る 事に注意を要する。 データ数の解らないファイルの読込 ファイルに記録されて居るデータの個数が、予め判明して居る場合は、for 文で、総てのデータを 読み込む事が出来るが、何個のデータが有るか解らない場合は、while 文で、ファイルの終端迄を 読み込む方法が一般的で有る。例えば、StreamReader クラスの ReadLine メソッドで1行分のデ ータを読み込んだ場合、ファイルの終端に達した時、此のメソッドはnull を返す。 其処で、ReadLine メソッドの戻り値が null で無い間、データを読み進めて行けば、総てのデータ を読み込む事が出来る。 猶、while 文では、for 文の様に、カウンタと成る変数を必要と仕無い為、順次配列変数に格納する 場合等では、独自にカウンタと成る変数を用意する必要が有る。

(9)

Structure ステートメントに依る独自のデータ型の作成 構造体(ユーザー定義型)を作成するステートメント Structure 構造体名 { Public|Private データ型 要素名1; Public|Private データ型 要素名2; … } C#がサポートする複数のデータ型を組み合わせて、独自のデータ型を作成する。 構造体は、ランダムファイルアクセスやAPI 関数呼出用構造体定義等、データ型の異なる多数の関連す る要素で構成されるデータレコードで良く使用される。亦、各要素には、配列を指定する事も出来、静 的配列と動的配列の孰れも使用する事が出来る。猶、データ型は、Option Strict が On に成って居る場 合、必ず指定し、省略する事は出来ない。 Structure ステートメントを記述する事が出来るのは、モジュール、名前空間、又は、ファイルレベル 丈で有る。詰まり、構造体は、ソースファイル内、又は、モジュール、インターフェイス、クラスの中 では宣言する事が出来るが、プロシージャの中では宣言する事は出来ない。亦、構造体の内部で別の構 造体を定義する事が出来るが、外側の構造体を通して内側の構造体のメンバにアクセスする事は出来な い。内側の構造体のメンバにアクセスするには、内側の構造体のデータ型の変数を宣言する必要が有る。 構造体には、構造体が宣言されたモジュールやクラスの何処からでもアクセスする事が出来る。構造体 のアクセシビリティ(有効範囲)は、既定で Friend に成る。構造体のアクセシビリティを詳細に指定 するには、Public、Protected、Friend、Protected Friend、Private の各キーワードを Structure ステ ートメントに指定する。 宣言した構造体は、C#の他のデータ型と粗同様に使用する事が出来る。即ち、構造体を作成すれば、其 の型でプロシージャレベルの変数、及び、モジュールレベルの変数を宣言する事が出来る。 [ Public|Private ] 構造体名 変数名; ※ クラスやモジュールでは、スコープ(範囲)を使用しないで宣言された構造体のアクセシビリティ は既定でPublic に成る。構造体をプライベートにする場合は、Private キーワードを使用して宣言する。 構造体で宣言された変数は、複数の要素(データメンバ=フィールド)を持つ事に成り、各要素の参照 は、変数名の後ろにピリオドに続き要素名を記述する。 代入変数|プロパティ = 構造体型変数名.要素名 両方の変数の構造体が同じ型の場合は、或る変数を別の変数に代入する事が出来る。此の場合は、一方 の構造体の総ての要素が他方の構造体の対応する要素にコピーされる。 ※ 構造体の宣言で構造体のメンバを初期化する事は出来ない。構造体型の変数を宣言する時は、変数 を通してメンバにアクセスする事に依り、メンバに値を代入する。 ※ 以前のバージョンの Visual Basic(VB6)でサポートされて居たユーザー定義型(User-Defined Type)は、Visual Basic.NET 以降や C#では構造体に統合された。 機 能 書 式 解 説

(10)

StreamReader コンストラクタに依るファイルのオープン(シーケンシャルアクセス) (再掲) 指定したファイル名用のStreamReader クラスの新しいインスタンスを初期化 変数 = new System.IO.StreamReader(ファイル名); 変数 = new System.IO.StreamReader(ファイル名, エンコーディング); ファイルを開いてファイルへのアクセス(入力)を行う為のオブジェクトを生成する。 入出力処理を行う為には、其の対象と成るファイルを開く必要が有る。StreamReader コンストラクタ は、指定したファイルを読み込む為のオブジェクトを生成し、当該ファイルをオープンする。 引数のファイル名には、ファイルの絶対パスを指定する。ファイル名丈を指定した場合は、既定の文字 エンコーディングと既定のバッファサイズが使用される。 引数のエンコーディングには、使用する文字エンコーディングを指定する。此の場合も、内部バッファ は既定のサイズに初期化される。 上記以外に、バイト順マーク検出オプションやバッファサイズも設定するコンストラクタも有る。 StreamReader の ReadLine メソッドに依るデータの読込(シーケンシャルファイル) (再掲) 現在のストリームから1 行分の文字を読み取り、其のデータを文字列と仕て返すメソッド 変数 = Object.ReadLine( ) シーケンシャルファイルより1 行分のデータを読み込んで変数に格納する。 1 行は、末尾にラインフィード("¥n")、又は、復帰とラインフィード("¥r¥n")が付いた一連の文字 と仕て定義されて居る。猶、返される文字列には、末尾の復帰やラインフィードは含まれない。亦、入 力ストリームの末尾に到達した場合、戻り値はnull 参照(Visual Basic では Nothing)と成る。

予めデータの行数が判明して居る場合は、for 文で、行数分のループで ReadLine メソッドを使用する と、総てのデータを読み込む事が出来る。

亦、予めデータの行数が判明して居ない場合は、while 文で、ReadLine メソッドか Peek メソッドの戻 り値で、下記の様に終了判定を行うループで、総てのデータを読み込む事が出来る。

System.IO.StreamReader sr = new System.IO.StreamReader( "ファイル名" ); string line;

while ( ( line = sr.ReadLine( ) ) != null ) { … } // 又は while ( sr.Peek( ) >= 0 ) { … } 猶、Peek メソッドは、読み取り可能な次の文字を返すが、StreamReader オブジェクトの現在位置は 変わらず、亦、其れ以上、読み取り可能な文字が無い場合は、戻り値と仕て-1 を返す。 ReadLine メソッドは、1 行分を読み込む為、カンマ区切りのデータは Split する必要が有る。 機 能 書 式 解 説 機 能 書 式 解 説

(11)

StreamReader の Close メソッドに依るファイルのクローズ (再掲) ファイルを閉じるメソッド

Object.Close( );

StreamReader オブジェクトと、其の基に成るストリームを閉じ、リーダーに関連付けられ た総てのシステムリソースを解放する。

此のClose メソッドの実装は、true 値を渡す Dispose メソッドを呼び出す。亦、ストリームをフラッシ ュしても、Close を明示的に呼び出さない限り、其の基に成るエンコーダはフラッシュされない。 AutoFlush を true に設定すると、データがバッファからストリームにフラッシュされるが、エンコー ダの状態はフラッシュされない。此れに依り、エンコーダの状態(一部の文字)を維持出来る為、次の ブロックの文字を正確にエンコード出来る様に成る。此の動作は、一部の文字をエンコードする為には エンコーダが予め其の文字に隣接する文字を受け取って置く必要が有るUTF8 と UTF7 に対して有効 で有る。

Close メソッドを実行した後、当該 StreamReader オブジェクトに対する操作(ReadLine メソッド等 の実行)は、総て例外(エラー)を発生させる。 StreamWriter コンストラクタに依るファイルのオープン(シーケンシャルアクセス) 指定したファイル名用のStreamWriter クラスの新しいインスタンスを初期化 変数 = new System.IO.StreamWriter(ファイル名); 変数 = new System.IO.StreamWriter (ファイル名, エンコーディング); 変数 = new System.IO.StreamWriter (ファイル名, 追加モード, エンコーディング); ファイルを開いてファイルへのアクセス(入力)を行う為のオブジェクトを生成する。 入出力処理を行う為には、其の対象と成るファイルを開く必要が有る。StreamWriter コンストラクタ は、指定したファイルに書き込む為のオブジェクトを生成し、当該ファイルをオープンする。 引数のファイル名には、ファイルの絶対パスを指定する。ファイル名丈を指定した場合は、既定の文字 エンコーディングと既定のバッファサイズが使用される。 引数の追加モードには、データをファイルの末尾に追加するか何うかを指定する。ファイルが存在し、 此の引数がfalse の場合は、ファイルが上書きされる。亦、ファイルが存在し、此の引数が true の場合 は、データがファイルの末尾に追加される。其れ以外の場合は、新しいファイルが作成される。此の場 合も、内部バッファは既定のサイズに初期化される。 引数のエンコーディングには、使用する文字エンコーディングを指定する。代表的な物を、下記に示す。 猶、此の場合も、内部バッファは既定のサイズに初期化される。 Encoding.Default:既定の文字コード(通常 shift-jis)、Encoding.GetEncoding("shift-jis"):Shift-JIS Encoding.GetEncoding("euc-jp"):EUC-JP、Encoding.GetEncoding("iso-2022-jp"):JIS 上記以外に、バイト順マーク検出オプションやバッファサイズも設定するコンストラクタも有る。 機 能 書 式 解 説 機 能 書 式 解 説

(12)

StreamWriter の WriteLine メソッドに依るデータの書込(シーケンシャルファイル) 文字列をテキストストリームに書き込み、続けて行終端記号を書き込むメソッド

Object.WriteLine( 出力値 )

シーケンシャルファイルに1 行分のデータと終端に改行を書き込む。

引数の出力値には、ファイルに書き込むデータを数式、文字列式、変数名で指定する。

出力値がnull 参照(Visual Basic では Nothing)の場合は、行終端文字丈を書き込む。

既定の行終端文字列は、復帰(キャリッジリターン、文字コード13)と改行(ラインフィード、文字コ

ード10)の組合せで有る("¥r¥n")。

猶、StreamWriter クラスの Write メソッドでは、行末に行終端文字は出力されない。即ち、Write メ ソッドでは、後続の出力は、最後の出力の直後から出力されるが、WriteLine メソッドでは、後続の出 力は、次の行の先頭から出力される。 上記以外に、書式設定された文字列を出力する等のオーバーロードも有る。 StreamWriter の Close メソッドに依るファイルのクローズ ファイルを閉じるメソッド Object.Close( ); StreamWriter オブジェクトと、其の基に成るストリームを閉じ、リーダーに関連付けられ た総てのシステムリソースを解放する。

此のClose メソッドの実装は、true 値を渡す Dispose メソッドを呼び出す。

猶、総てのデータを基に成るストリームに正しく書き込む為にはClose メソッドを呼び出す必要が有る。 Close メソッドを呼び出した後は、StreamWriter の操作(WriteLineLine メソッド等の実行)は、総 て例外(エラー)が発生する。亦、ディスクの領域が不足して居る場合、Close メソッドを呼び出すと 例外が発生する。 ストリームをフラッシュしても、Flush や Close を明示的に呼び出さない限り、其のストリームの基に 成るエンコーダはフラッシュされない。AutoFlush を true に設定すると、データがバッファからスト リームにフラッシュされるが、エンコーダの状態はフラッシュされない。此れに依り、エンコーダの状 態(一部の文字)を維持出来る為、次のブロックの文字を正確にエンコード出来る様に成る。此の動作 は、一部の文字をエンコードする為にはエンコーダが予め其の文字に隣接する文字を受け取って置く必 要が有るUTF8 と UTF7 に対して有効で有る。 機 能 書 式 解 説 機 能 書 式 解 説

(13)

ファイルの入出力 データをファイルから読み込んだり、ファイルに書き込む時は、対象に成るファイルをオープンし てから処理を行い、其の後、ファイルをクローズすると言う手順が必要と成る。 シーケンシャルファイル データがファイルに書き込まれた順に保存されて居るファイルで、原則として先頭から順番に読み 書きする必要が有り、データの一部を変更する事は出来ない。 シーケンシャルファイル読込の処理手順 sr = new Sysytem.IO.StreamReader(“squid.dat”); s = sr.ReadLine( ); d = s.Split( ',' ); … sr.Close( ); シーケンシャルファイル書込の処理手順

sw = new Sysytem.IO.StreamWriter(“squid.dat”, false );

sw.Write( 123 ) sw.Write ( “,” ) sw.WriteLine( “abc” ) sw.Close( ) squid.dat

123,abc↲

squid.dat Open 数値123 が書き込まれる 文字列 abc が書き込まれる 末尾に改行 ↲ も出力される 文字列 , が書き込まれる

aa,bb↲

squid.dat squid.dat Open "aa,bb"が s に読み込まれる "aa" が d[0] に格納される "bb" が d[1] に格納される インスタンスを生成しファイルを開く ファイルを閉じる インスタンスを生成し上書モードでファイルを開く ファイルを閉じる

参照

関連したドキュメント

私たちの行動には 5W1H

therapy後のような抵抗力が減弱したいわゆる lmuno‑compromisedhostに対しても胸部外科手術を

実行時の安全を保証するための例外機構は一方で速度低下の原因となるため,部分冗長性除去(Par- tial Redundancy

が作成したものである。ICDが病気や外傷を詳しく分類するものであるのに対し、ICFはそうした病 気等 の 状 態 に あ る人 の精 神機 能や 運動 機能 、歩 行や 家事 等の

は、これには該当せず、事前調査を行う必要があること。 ウ

Jabra Talk 15 SE の操作は簡単です。ボタンを押す時間の長さ により、ヘッドセットの [ 応答 / 終了 ] ボタンはさまざまな機

問題集については P28 をご参照ください。 (P28 以外は発行されておりませんので、ご了承く ださい。)

自分は超能力を持っていて他人の行動を左右で きると信じている。そして、例えば、たまたま