このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/804
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/www.dotup.org/uploda/www.dotup.org1380209.txt.html 
#  
#  データ例のように名前,性別,5教科の試験の得点を格納した.txtファイルを用意し、
#  
#  そのデータを用いて実行例のような操作を行うことができるプログラムを作成せよ.
#  
#  このプログラムに細かい指定は無く、データ構造や関数は各自適切と考えるものを作成すればよい.
#  
#  【データ例】
#  ファイル名:classA.txt
#  Andrew M 92 63 85 71 81
#  
#  Helen  F 81 89 83 79 51
#  
#  Jane   F 65 75 59 81 69
#  
#  John   M 85 98 95 81 91
#  
#  Susan  F 60 50 53 69 43
#  
#  Thomas M 72 62 79 66 72
#  
#  ファイル名:classB.txt
#  Ichiro M 82 65 75 81 41
#  
#  Jiro   M 61 72 51 41 69
#  
#  Sabu   M 55 68 85 81 81
#  
#  Hanako F 90 80 93 89 93
#  
#  【実行例】
#  $はコマンドプロンプトを指す
#  
#  $ ./report (プログラムの実行)
#  
#  -------------Menu-----------------
#  1.データ読み込み
#  2.一覧表示
#  0.終了
#  ----------------------------------
#  コマンド>> 1 (ここでコマンドを入力できるようにする。以下同じ)
#  [データ読み込み]
#  ファイル名を入力してください>> classA.txt (読み込みたいファイル名の入力。以下同じ)
#  ファイルclassA.txtからデータを読み込みました。
#  
#  -------------Menu-----------------
#  1.データ読み込み
#  2.一覧表示
#  0.終了
#  ----------------------------------
#  コマンド>> 2
#  名前	性別	国語	数学	理科	社会	英語	平均点
#  Andrew  M    92    63   85    71   81    78.4
#  Helen  F    81    89   83    79   51    76.6
#  Jane   F    65    75   59    81   69    69.8
#  John   M    85    98   95    81   91    90.0
#  Susan  F    60    50   53    69   43    55.0
#  Thomas  M       72       62     79       66     72       70.2
#  -------------Menu-----------------
#  1.データ読み込み
#  2.一覧表示
#  0.終了
#  ----------------------------------
#  コマンド>> 1
#  [データ読み込み]
#  ファイル名を入力してください>> classB.txt
#  ファイルclassB.txtからデータを読み込みました.
#  -------------Menu-----------------
#  1. データ読込
#  2. 一覧表示
#  0. 終了
#  ----------------------------------
#  コマンド >> 2
#  [一覧表示]
#  名前 性別 国語 数学 理科 社会 英語 平均点
#  Ichiro M   82   65   75   81   41    68.8
#  Jiro   M   61   72   51   41   69    58.8
#  Sabu   M   55   68   85   81   81    74.0
#  Hanako F   90   80   93   89   93    89.0
#  -------------Menu-----------------
#  1. データ読込
#  2. 一覧表示
#  0. 終了
#  ----------------------------------
#  コマンド >> 0
#  [終了]
#  
#  $
#  
#  ※ファイル名を入力するところで存在しないファイル名を入力(classC.txtなど)した場合、
#   入力されたファイルは存在しない、という旨をきちんと表示させること
#  

選択された機能を実行する :-
        メニュー表示,
        コマンド番号を得る(_コマンド番号),
        実行(_コマンド番号),
        選択された機能を実行する.
選択された機能を実行する.

実行(1) :-
        テータ読み込み.
実行(2) :-
        一覧表示.
実行(0) :-
        終了,
        fail.

メニュー表示 :-
        write('-------------Menu-----------------\n'),
        write('1.データ読み込み\n'),
        write('2.一覧表示\n'),
        write('0.終了\n'),
        write('----------------------------------\n'),!.

コマンド番号を得る(_コマンド番号) :-
        write('コマンド>> '),
        get_integer(_コマンド番号),
        _コマンド番号 >= 0,
        _コマンド番号 =< 2,!.

データ読み込み :-
        ファイル名を得る(_ファイル名),
        get_split_lines(_ファイル名,[' '],LL),
        length(L,8),
        データ述語削除(データ,_ファイル名,L),
        述語定義(データ,_ファイル名,LL),
        write_formatted('ファイル%tからデータを読み込みました.\n',[_ファイル名]),!.
データ読み込み(Lines) :-
        データ読み込み(Lines).

ファイル名を得る(_ファイル名) :-
        write('[データ読み込み]\n'),
        write('ファイル名を入力してください>> '),
        get_line(_ファイル名),
        ファイル名診断(_ファイル名).

ファイル名診断(_ファイル名) :-
        get_file_info(_ファイル名,L),
        append(_,[mode(L2)|_],L),
        ファイル名はファイルとして存在する(_ファイル名,L2),
        ファイル名は読み込み可能である(_ファイル,L2),!.

ファイル名はファイルとして存在する(_ファイル名,L) :-
        append(_,[ifreg|_],L),!.
ファイル名はファイルとして存在する(_ファイル名,L) :-
        write_formatted('ファイル %t は存在しません\n',[_ファイル名]),
        fail.

ファイル名は読み込み可能である(_ファイル名,L) :-
        append(_,[irusr|_],L),!.
ファイル名は読み込み可能である(_ファイル名,L) :-
        write_formatted('ファイル %t は存在しますが、現在読み込みができません\n',[_ファイル名]),
        fail.

述語定義(_述語名,_ファイル名,LL) :-
        append(_,[L|R],LL),
        P =.. [_述語名,_ファイル名|L],
        assertz(P),
        R = [],!.

一覧表示 :-
        write('名前 性別 国語 数学 理科 社会 英語 平均点\n'),
        データ(_ファイル名,名前,_性別,_国語,_数学,_理科,_社会,_英語,_平均点),
        write_formatted('%t %t %t %t %t %t %t %t %t\n',[名前,_性別,_国語,_数学,_理科,_社会,_英語,_平均点]),
        fail.
一覧表示.

データ述語削除(_述語名,_ファイル名,L) :-
        P =.. [_述語名,_ファイル名|L]),
        retract(P),
        fail.
データ述語削除(データ,_ファイル名).