平成12年度 春期 第二種情報処理技術者 午後

問1 問2 問3 問4 問5 問6 問15 問16 模範解答例(若林研二氏) 

問16 プログラム設計に関する次の記述を読んで,設問 1 〜 3 に答えよ。

 ある企業では,社内で作成される報告書などのさまざまな文書ファイルを検索するシステムを,開発することになった。
 社内の文書と文書ファイルの概要及びプログラムの概要は,次のとおりである。

[社内の文書と文書ファイルの概要]
 
(1) 文書の様式は,部署やプロジェクトによって異なり,統一されていない。例えば,作業報告書の場合,印刷結果は図1に示すようになる。
(2) すべての文書は,“<”と“>”で囲まれたタグによって文書の構造を,タグの間の文字列で文書の内容を示す形式の文書ファイルとして保存されている。
(3) 文書の作成年月日,作成者氏名及び表題は,文書の最初に順不同で記述されている。ただし,作成年月日と作成者氏名の一方又は両方が記述されていない場合がある。
(4) 文書に作成者氏名が記述されている場合には,社員名簿に記載された氏名が使われていて,一つだけが1行に記述されている。
(5) 文書に作成年月日が記述されている場合には,次の例のようなさまざまな様式となっている。
例:平成12年3月31日
  2000-03-31
  2000年3月31日
文書に記述される作成年月日は,一つだけが1行に記述されている。
(6) 文書には,表題が一つだけ必ず記述されている。
(7) すべての文書ファイルには“<body>”と“<p>”というタグが含まれており,この二つのタグの間に文書の作成年月日,作成者氏名及び表題が含まれている。
 なお,文書ファイル中には,タグを示す以外には“<”と“>”の文字は使われていないものとする。

[プログラムの概要]

 サーバに格納されたすべての文書ファイルに,次の検索処理を行う。
 
(1) 文書の作成年月日,作成者氏名及び表題の文字列のいずれか又はそれらの組合せを検索キーとして,該当する文書ファイルをすべて抽出する。検索キーとして指定した文字列と一致するか,それを一部に含む文書ファイルを抽出する。
(2) 文書ファイルからデータを抽出する方法は,次のとおりである。
  1. 文書ファイルの先頭から文字列を走査し,“<body>”までを読み飛ばす。
  2. “<”と“>”で囲まれた部分をタグとして認識し,“>”と“<”の間の文字列を抽出する。
  3.  2.の処理で抽出した文字列の種類を判別する。
    • 文字列がない場合又は空白だけの場合には,何もしない。
    • 抽出した文字列を基に社員名簿マスタファイルを検索し,マスタファイルの氏名と一致した場合には,その文字列を文書の作成者氏名と見なす。
    • 抽出した文字列が年月日を表すものであるかどうかを調べ,年月日であれば,その文字列を文書の作成年月日と見なして,“YYYY-MM-DD”の形式に変換する。
    • 文字列が,氏名,年月日のどちらとも見なせなかった場合には,その文字列をその他のデータと見なす。
  4.  2. 3. の処理を次のいずれかの条件を満たすまで繰り返す。
    • 文書の作成者氏名と見なされた文字列,文書の作成年月日と見なされた文字列及びその他のデータと見なされた文字列の3種類が抽出できた。
    • 文書ファイルを走査中に“<p>”が出現した。
  5.  2.〜 4.の処理で抽出した各文字列を対象として,検索キーと照合する。
    • 検索キーに作成者氏名が指定された場合には,文書の作成者氏名と見なした文字列に,検索キーの文字列が含まれるとき,一致したとする。
    • 検索キーに作成年月日が指定された場合には,文書の作成年月日と見なした文字列と,検索キーの年月日が同日であるとき,一致したとする。
    • 検索キーに文書の表題が指定された場合には,その他のデータと見なした文字列に,検索キーの文字列が含まれるとき,一致したとする。
(3) 指定した検索キーと一致する文書ファイルが存在した場合には,該当するファイル名をすべて出力する。存在しなかった場合には,その旨のメッセージを出力する。
(4) プログラムのモジュール構成の一部を図3に示す。







設問1

図3のモジュール構成の“2. 文書ファイルごとの処理”にちは,繰返し処理を示す記号が記されている。図3には,このほかに繰返し処理を示す記号が必要なモジュールがもう一つある。このモジュールとして正しいものを,解答群の中から選べ。
解答群
 
ア  1. 検索キーの指定
イ  2.1 文書ファイルの読込み
ウ  2.2 該当データの抽出とデータ種別判定
エ  2.2.1 該当データの抽出
オ  2.2.2 抽出データの種別判定
カ  2.2.2.1 氏名の判定
キ  2.2.2.2 年月日の判定と変換
ク  2.3 検索キーとの照合
ケ  3. 検索結果の出力

設問2 

図3のモジュール構成の“2.2.1 該当データの抽出”の中で,文字列を走査する処理が終了する条件として正しい答えを,解答群の中から選べ。
解答群
 
ア  処理中の文書ファイルの文字列を走査して,“<”を読み込んだとき
イ  処理中の文書ファイルの文字列を走査して,“<body>”を読み込んだとき
ウ  処理中の文書ファイルの文字列を走査して,“<p>”を読み込んだとき
エ  処理中の文書ファイルの文字列を走査して,“>”を読み込んだとき
オ  処理中の文書ファイルの文字列を走査して,検索キーに該当する文字列が見つかったとき
カ  処理中の文書ファイルの文字列を走査して,検索キーに該当する文字列が見つからなかったとき
キ  処理中の文書ファイルの文字列を走査して,最後の位置まで読み込んだとき

設問3 

 社内の文書量が増大すると,1件の検索に要する時間が非常に長くなることが分かった。そこであらかじめ各文書ファイルから文書の作成年月日,作成者氏名及び表題を抽出して別個に格納したファイル(検索項目ファイル)を作成することにした。検索の際には,この検索項目ファイルを参照して検索キーと照合し,該当する文書ファイルが見つかればそのファイル名を表示するという方式に作りかえることにした。
 検索項目ファイルの構成は図4のとおりである。
 
作成年月日
作成者氏名
表題
文書ファイル名
図4 検索項目ファイルの構成

 新しい方式では,検索項目ファイルを作成するプログラムと,検索項目ファイルを検索するプログラムに分ける。検索項目ファイルを作成するプログラムは,図3の各モジュールのうち,幾つかをそのまま利用できる。利用できるすべてのモジュールの組合せとして正しい答えを,解答群の中から選べ。ここで,解答群中の“○”は利用できるモジュールを表す。

解答群
 
1. 検索キーの指定            
2. 文書ファイルごとの処理        
2.1 文書ファイルの読込み        
2.2 該当データの抽出とデータ種別判定  
2.2.1 該当データの抽出  
2.2.2 抽出データの種別判定  
2.2.2.1 氏名の判定    
2.2.2.2 年月日の判定と変換    
2.3 検索キーとの照合