このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/892
#  【質問テンプレ】 
#  [1] 授業単元:C言語初級講座 
#  [2] 問題文(含コード&リンク): 
#  http://ime.nu/www.dotup.org/uploda/www.dotup.org1384986.txt 
#  
#  テキストファイル名"a.txt"から以下の表を作成せよ。
#  xやxxxの所は計算結果を表示させ、
#  テキストファイル名"b.txt"に計算結果を追加して
#  保存せよ。
#  
#  
#  【テキストファイル内容】
#  商品名,アイスクリーム
#  2010,2011
#  4,5,6,7,8,9,10,11,12,1,2,3
#  仕入数,3,3,13,22,30,15,11,5,5,3,5,5,仕入総数
#  販売個数,1,2,12,20,30,15,8,4,2,3,3,2,販売総数
#  在庫数,在庫総数
#  
#  
#  【表示結果】
#  商品名   アイスクリーム
#   年度             2010年            2011年
#    月     4  5  6  7  8  9 10 11 12  1  2  3
#  ---------------------------------------------------------
#  仕入数   3  3 13 22 30 15 11  5  5  3  5  5 仕入総数 xxx
#  販売個数 1  2 12 20 30 15  8  4  2  3  3  2 販売総数 xxx
#  ---------------------------------------------------------
#  在庫数   x  x  x  x  x  x  x  x  x  x  x  x 在庫総数 xxx

計算後の表イメージ(1,商品名,L,L,[]).
計算後の表イメージ(2,年度,_年度ならび,_年度ならび,[]).
計算後の表イメージ(3,月ならび,_月ならび,_月ならび,[]).
計算後の表イメージ(4,仕入数ならび,L,_仕入数ならび,R) :-
        append([仕入数],_仕入数ならび,[仕入総数|R],L).
計算後の表イメージ(5,販売個数ならび,L,_販売個数ならび,R) :-
        append([販売個数],_販売個数ならび,[販売総数|R],L).
計算後の表イメージ(6,在庫個数ならび,L,_在庫個数ならび,R) :-
        append([在庫個数],_在庫個数ならび,[在庫総数|R],L).

'テキストファイル名"a.txt"から以下の表を作成せよ。xやxxxの所は計算結果を表示させ、テキストファイル名"b.txt"に計算結果を追加して保存せよ。' :-
        get_split_lines('a.txt',[','],LL),
        計算結果(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数),
        計算結果を表示する(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数),
        'テキストファイル名"b.txt"に計算結果を追加して保存する'(LL).

計算結果を表示する(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        計算結果(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数),
        表示する(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数),!.


計算結果(LL1,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        計算対象部分の抽出(LL1,LL2),
        仕入総数・販売総数の計算(LL2,_仕入総数,_販売総数),
        在庫個数の計算(LL2,_在庫個数ならび),
        在庫総数(_在庫個数ならび,_在庫総数).

仕入総数・販売総数の計算([_仕入数ならび,_販売個数ならび],_仕入総数,_販売総数) :-
        加算(_仕入数ならび,S1),
        _仕入総数 is trancate(S1),
        加算(_販売個数ならび,S2),
        _販売総数 is trancate(S2),!.

在庫個数の計算(LL,_在庫個数ならび) :-
        転置(LL,LL2),
        findall(_在庫個数,(
                    append(_,[[_仕入個数,_販売個数]|_],LL2),
                    _在庫個数 is _仕入個数 - _販売個数,
                    _在庫個数 is truncate(S1)),
                _在庫個数ならび).

在庫総数(_在庫個数ならび,_在庫総数) :-
        加算(_在庫個数ならび,S1),
        _在庫総数 is truncate(S1).

計算対象部分の抽出(LL1,[_仕入数ならび,_販売個数ならび]) :-
        append(_,[L1|_],LL1),
        計算後の表イメージ(_,仕入数ならび,L1,_仕入数ならび),        
        計算後の表イメージ(_,販売個数ならび,L1,_販売個数ならび),!.        

表示する(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        append(L0,[L|R],LL),
        length([_|L0],_行),
        行ごとに表示(_行,L,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数),
        R = [],!.

行ごとに表示(1,L,_,_,_,_) :-
        write_formatted('%12s%12s\n',L),!.
行ごとに表示(2,L,_,_,_,_) :-
        write_formatted('%12s%30s%30s\n',L),!.
行ごとに表示(3,L,_,_,_,_) :-
        write_formatted('%10s%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%10s%3d\n',L),
        write('---------------------------------------------------------\n'),!.
行ごとに表示(4,L,_仕入総数,_,_,_) :-
        計算後の表イメージ(4,_,LX,L,_仕入総数),
        write_formatted('%10s%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%10s%3d\n',LX),!.
行ごとに表示(5,L,_,_販売総数,_,_) :-
        計算後の表イメージ(5,_,LX,L,_販売総数),
        write_formatted('%10s%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%10s%3d\n',LX),
        write('---------------------------------------------------------\n'),!.
行ごとに表示(6,L,_,_,_在庫個数ならび,_在庫総数) :-
        計算後の表イメージ(5,_,LX,_在庫個数ならび,_在庫総数),
        write_formatted('%10s%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%3d%10s%3d\n',LX),!.

'テキストファイル名"b.txt"に計算結果を追加して保存する'(LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        open('b.txt',write,Outstream),
        保存する(Outstream,LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数),
        close(Outstream),!.

保存する(Outstream,LL,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        append(L0,[L|R],LL),
        length([_|L0],_行),
        行ごとに保存する(Outstream,_行,L,_仕入個数,_販売総数,_在庫個数ならび,_在庫総数),
        R = [],!.

行ごとに保存(Outstream,4,L,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        計算後の表イメージ(4,_,LX,L,_仕入総数),
        concat_atom(LX,',',S),
        write_formatted(Outstream,'%t\n',[S]),!.        
行ごとに保存(Outstream,5,L,_仕入総数,_販売総数,_在庫個数ならび,_在庫総数) :-
        計算後の表イメージ(5,_,LX,L,_販売総数),
        concat_atom(LX,',',S),
        write_formatted(Outstream,'%t\n',[S]),!.
行ごとに保存(Outstream,6,L,_仕入個数,_販売総数,_在庫個数ならび,_在庫総数) :-
        計算後の表イメージ(5,_,LX,_在庫個数ならび,_在庫総数),
        concat_atom(LX,',',S),
        write_formatted(Outstream,'%t\n',[S]),!.
行ごとに保存(Outstream,6,L,_仕入個数,_販売総数,_在庫個数ならび,_在庫総数) :-
        concat_atom(L,',',S),
        write_formatted(Outstream,'%t\n',[S]),!.

以下の表('商品名   アイスクリーム').
以下の表('年度             2010年            2011年').
以下の表('  月     4  5  6  7  8  9 10 11 12  1  2  3').
以下の表('---------------------------------------------------------').
以下の表('仕入数   3  3 13 22 30 15 11  5  5  3  5  5 仕入総数 xxx').
以下の表('販売個数 1  2 12 20 30 15  8  4  2  3  3  2 販売総数 xxx').
以下の表('---------------------------------------------------------').
以下の表('在庫数   x  x  x  x  x  x  x  x  x  x  x  x 在庫総数 xxx').