§14 予定表2 プログラミング実習
 back next 

【3】 スケジュールのデータ形式

 データは、日付の下のテキストボックスtxtMemoに表示する。この予定データと日付をどのような形式で記憶するかを決める。

案1 1日分のデータを1行に記憶する。「yyyy/mm/dd予定データ」という形式である。ただし、予定データは複数行で入力できるので、この形式では不都合が出る。
案2 日付と予定データの各データに区切りの記号を付けて記憶する。「☆yyyy/mm/dd☆予定データ☆yyyy/mm/dd☆予定データ☆」という形式である。複数行の予定データにも対応できる。

 ここでは、「案2」のデータ形式でプログラムを作成していく。

 

操作 11 スケジュールのデータを記憶する変数SDataをグローバルで宣言する。

Public Class Form1
    Dim SData As String    'スケジュール用データ

 スケジュールのデータは区切り文字で区切るので変数は一つだけでよい。また、この変数のデータはいろいろなメソッドで利用できるようにグローバルとして宣言している。

操作 12 テスト用のデータを変数SDataに記憶する。フォームのLoadイベントに対応するメソッドにプログラムを追加する(下線部)。

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        SData = "?12008/12/01?2今日の予定123?3?12008/12/02?2今日の予定abc?3?12008/12/03?2今日の予定xyz?3?12008/12/04?2今日の予定***?3"
        HizukeDisplay()
    End Sub

 1日分のデータは、「?1yyyy/mm/dd?2予定データ?3」である。プログラムでは、4日分のデータを記憶させている。日付は、適宜変更すると良い。
 区切り文字は"?1","?2","?3"である。区切り文字には使われそうにない文字を選ぶ。また、区切り文字は1文字である必要はない。
 区切り文字は、3つとも同じものでも良いが、わかりやすいように別のものにしている。

 

【4】 予定データの表示

 スケジュールデータSDataから日付をキーに検索して、見つかったら予定データをテキストボックスtxtMemoに表示する。スケジュールデータは一つの文字列となっているので、必要なデータだけを取り出す処理が必要である。

操作 13 日付をキーに検索して、予定データを表示するメソッドScheduleDataDisplayを次のように作成する。

    Private Sub ScheduleDataDisplay()
        Dim hizuke As String, pt(3) As Integer
        hizuke = "?1" & txtHizuke.Text.Substring(0, 10)    '検索する日付データ
        pt(1) = SData.IndexOf(hizuke)    '日付検索
        If pt(1) = -1 Then
            txtMemo.Text = "なし"
            Exit Sub
        End If
        pt(2) = SData.IndexOf("?2", pt(1))    'データ検索
        pt(3) = SData.IndexOf("?3", pt(2))    '終端(終わり)検索
        txtMemo.Text = SData.Substring(pt(2) + 2, pt(3) - pt(2) - 2)    '表示
    End Sub

 テキストボックスtxtHizukeに表示されている日付データから日付だけを取り出し、先頭に"?1"を付けて変数hizukeに格納する。予定データの中に日付があっても区別できるように、検索する日付は「?1yyyy/mm/dd」としている。
 検索には、IndexOfメソッドを使う。見つかった位置(先頭は0番目)が得られる。見つからなければ-1が得られる。
 "?2"と"?3"も検索して、予定データだけを取り出している。
 例えば、2008/12/02(hizuke="?12008/12/02")を検索する。
 
01234567890123 4 5 6 7 8 9012345678901234567 8 9 0 1 2345 67890123456789012 3 4
?12008/12/01?2 今日の予定 123?3?12008/12/02?2 今日の予定abc ?3?12008/12/03?2今日の…

  pt(1)=SData.IndexOf(hizuke) → pt(1)=24
  pt(2)=SData.IndexOf("?2", pt(1)) → pt(2)=36、 pt(1)以降を検索する。
  pt(3)=SData.IndexOf("?3", pt(2)) → pt(3)=46、 pt(2)以降を検索する。
 取り出したい予定データは、38番目から8文字である。全角文字も半角文字も1文字と数える。取り出したい予定データの開始位置(38番目)は、pt(2)+2で計算でき、取り出したい文字数(8文字)は、pt(3)-pt(2)-2で計算できる。

操作 14 日付データを表示するメソッドHizukeDisplayに予定データを表示するメソッドScheduleDataDisplayの呼び出しを下線部のように追加する。

    Private Sub HizukeDisplay()
        Dim youbi As String = "日月火水木金土"
        '選択した日付(曜日)を表示
        txtHizuke.Text = MCalendar.SelectionStart & "("
        txtHizuke.Text = txtHizuke.Text & youbi.Substring(MCalendar.SelectionStart.DayOfWeek, 1)
        txtHizuke.Text = txtHizuke.Text & ")"
        ScheduleDataDisplay()
    End Sub

結果 実行して、変数SDataに記憶させた日付をクリックすると予定データが表示される。そのほかの日付をクリックすると「なし」と表示される。

 

 back next 
 §14 予定表2 Copyright©2008 Hiroshi Masuda 

 

 

inserted by FC2 system