基幹教育の PC の吐く CSV ファイルから、成績表の tex source を作る C source を書いた。
(1) 基幹教育の PC から CSV のフォーマットで取り出す:
(文字コード:Shift-JIS,改行コード:CR+LF,氏名のセパレータ:全角空白)
前後期曜日時限+講義ID,曜日,時限,科目名,担当者氏名,年月日,年月日,年月日,年月日…,年月日(年月日は出欠や小テストの日付)
年組ID,学部,学生番号, ,学生氏名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
年組ID,学部,学生番号, ,学生氏名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
…
年組ID,学部,学生番号, ,学生氏名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
(2) エクセルなどで次の形の CSV に整形する。
年組ID,学生番号上部(学部と入学年情報),学部学科,
month,day,X備考,(以下で「X備考 = S初期調査, H平常調査, C中間考査, K期末考査」で、「M」,「D」は半角数字である)
M,D,X備考,(出欠や小テストなどのイベント)
M,D,X備考,(出欠や小テストなどのイベント)
…
M,D,X備考,(出欠や小テストなどのイベント)
room,AxB,部屋番号,(A:列数,B:段数)
n/a,A,B,(A列B段の座席は使用不可)
…
n/a,C,D,(C列D段の座席は使用不可)
年,期,科目名
講義ID,曜日,時限,科目名,担当者氏 担当者名,年月日,年月日,年月日,年月日…,年月日
年組ID,学部,学生番号,,学生氏 学生名,点数,点数,点数,点数,…,点数
年組ID,学部,学生番号,,学生氏 学生名,点数,点数,点数,点数,…,点数
…
年組ID,学部,学生番号,,学生氏 学生名,点数,点数,点数,点数,…,点数
(3) nkf(network kanji filter)を nkf -w -Z1 -Lu として通して、 (文字コード:UTF-8,改行コード:LF,氏名のセパレータ:半角空白) の様に整形し、さらに /usr/local/bin/seiseki で tex-source に変換する。
実際には (3) はシェルスクリプトを書いた。また、tex-source に変換しても実際にはマクロを使って処理することになる。 以下に基幹教育の PC の吐く CSV ファイルの例を挙げてみる。
1661,月,2,数学I ,九大 某某 ,2017/10/16,2017/10/23,2017/10/30,2017/11/ 6,2017/11/20,2017/11/27,2017/12/11,2017/12/18,2017/12/25,2018/ 1/12,2018/ 1/22,2018/ 1/29,2018/ 2/ 5 S1-10,工,1MA17123A , ,九大 某某 , 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 S1-10,工,1MA17124B , ,九大 某々 , 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90 S1-10,工,1MA17125C , ,九大 某某 , 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 S1-10,工,1MA17126D , ,九大 某々 , 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70 S1-10,工,1MA17127E , ,九大 某某 , 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60
これをエクセルで必要な情報を追加して次の形の CSV ファイルを作る。
S1-10,1MA17,数学部,,,,,,,,,,,,,,, month,day,X備考,,,,,,,,,,,,,,, 10,3,S第一回,,,,,,,,,,,,,,, 10,16,H第二回,,,,,,,,,,,,,,, 10,23,H第三回,,,,,,,,,,,,,,, 10,30,H第四回,,,,,,,,,,,,,,, 11,6,H第五回,,,,,,,,,,,,,,, 11,20,H第六回,,,,,,,,,,,,,,, 11,27,H第七回,,,,,,,,,,,,,,, 12,4,C中間試験,,,,,,,,,,,,,,, 12,11,H第八回,,,,,,,,,,,,,,, 12,18,H第九回,,,,,,,,,,,,,,, 12,25,H第十回,,,,,,,,,,,,,,, 1,12,H第十一回,,,,,,,,,,,,,,, 1,22,H第十二回,,,,,,,,,,,,,,, 1,29,H第十三回,,,,,,,,,,,,,,, 2,5,K期末試験,,,,,,,,,,,,,,, room,8x8,3303,,,,,,,,,,,,,,, n/a,7,8,,,,,,,,,,,,,,, 16,後,数学I ,,,,,,,,,,,,,,, 1661,月,2,数学I ,九大 某某 ,16/10/2017,23/10/2017,30/10/2017,6/11/2017,20/11/2017,27/11/2017,11/12/2017,18/12/2017,25/12/2017,12/1/2018,22/1/2018,29/1/2018,5/2/2018 S1-10,工,1MA17123A , ,九大 某某 ,80,80,80,80,80,80,80,80,80,80,80,80,80 S1-10,工,1MA17124B , ,九大 某々 ,90,90,90,90,90,90,90,90,90,90,90,90,90 S1-10,工,1MA17125C , ,九大 某某 ,100,100,100,100,100,100,100,100,100,100,100,100,100 S1-10,工,1MA17126D , ,九大 某々 ,70,70,70,70,70,70,70,70,70,70,70,70,70 S1-10,工,1MA17127E , ,九大 某某 ,60,60,60,60,60,60,60,60,60,60,60,60,60
さらに文字コードフィルタ(nkf -w -Z1 -Lu)と CSV->TEX フィルタ(seiseki14-6)を通せば、次の tex source が吐き出される。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This is a file for xelatex. % % 成 績 表 % % by Norio Iwase (Feb. 1994) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %!TEX encoding = UTF-8 Unicode %!TEX TS-program = XeLaTeX % \ifx\undefined\XeTeXversion \input seiseki25-p.inc \else \input seiseki25-x.inc \fi % %%%%%%%%%%%%%%%%%%%%%%%%% % クラス % %%%%%%%%%%%%%%%%%%%%%%%%% % \クラス名 {理}系{1}年{10}組 \学部記号 {1MA}入学{17}年 \学部学科名 {数学部} % %\日付 {10}月{3}日 \備考 {初期:第一回} %\日付 {10}月{16}日 \備考 {平常:第二回} %\日付 {10}月{23}日 \備考 {平常:第三回} %\日付 {10}月{30}日 \備考 {平常:第四回} %\日付 {11}月{6}日 \備考 {平常:第五回} %\日付 {11}月{20}日 \備考 {平常:第六回} %\日付 {11}月{27}日 \備考 {平常:第七回} %\日付 {12}月{4}日 \備考 {中間:中間試験} %\日付 {12}月{11}日 \備考 {平常:第八回} %\日付 {12}月{18}日 \備考 {平常:第九回} %\日付 {12}月{25}日 \備考 {平常:第十回} %\日付 {1}月{12}日 \備考 {平常:第十一回} %\日付 {1}月{22}日 \備考 {平常:第十二回} %\日付 {1}月{29}日 \備考 {平常:第十三回} %\日付 {2}月{5}日 \備考 {期末:期末試験} % %%%%%%%%%%%%%%%%%%%%%%%%% % 出席オプション % %%%%%%%%%%%%%%%%%%%%%%%%% % %教室内の席の配置 % \教室{8}列{8}段({3303}) % 教室の大きさ % \使用不可{7}列{8}段 % 座れない席 % %%%%%%%%%%%%%%%%%%%%%%%%% % 講義 % %%%%%%%%%%%%%%%%%%%%%%%%% % \時期 {16}年度{後}期 % 学期 \科目 {数学I }({1661}) % 科目名 \講義 {月}曜日{2}時限 % 講義 曜日&時限 \担当 {九大 某某} % 講義 担当者名 % %%%%%%%%%%%%%%%%%%%%%%%%% % 出席/成績 % %%%%%%%%%%%%%%%%%%%%%%%%% % % 出席または成績の一方のみコメントマークを外す % \出席表組{1}学籍{1}年度{1}番号{1}記号{1}名前{1}{1}出席{1}@{0} % 0=隠す, 1=表示 @ 0=全部,k=平常k回目,-1=席表示 % %\成績表組{1}学籍{1}年度{1}番号{1}記号{1}名前{1}{1}成績{1}@{0} % 0=隠す, 1=表示 @ 0=手動,1=初期,2=平常,3=全中間, % 4=中間1,5=中間2,…,9=期末. % %%%%%%%%%%%%%%%%%%%%%%%%% % 成績オプション % %%%%%%%%%%%%%%%%%%%%%%%%% % % 成績の手動計算時の配分値と拡大・縮小率 % \配分値:初期{0}:平常{10}:中間{30}:期末{60}/{100} \拡大率:初期{0}:平常{10}:中間{30}:期末{60} % % 成績の評価・評点欄等の表示 % \評価欄表示 {1} % 0=評価表示無し,1=有り \評点欄表示 {1} % 0=評点表示無し,1=有り \分布欄表示 {1} % 0=分布表示無し,1=有り \グラフスケール {4} % グラフの縦倍率(0,1,2,3,4) % %%%%%%%%%%%%%%%%%%%%%%%%% % 評価 % %%%%%%%%%%%%%%%%%%%%%%%%% % \甲評価{甲}下限 {90} % 『甲』評価のための最小得点 \乙評価{乙}下限 {80} % 『乙』評価のための最小得点 \丙評価{丙}下限 {70} % 『丙』評価のための最小得点 \丁評価{丁}下限 {60} % 『丁』評価のための最小得点 \戊評価{戊}下限 {50} % 『戊』評価のための最小得点 \己評価{己}下限 {40} % 『己』評価のための最小得点 \庚評価{庚}下限 {30} % 『庚』評価のための最小得点 \辛評価{辛}下限 {20} % 『辛』評価のための最小得点 \壬評価{壬}下限 {10} % 『壬』評価のための最小得点 \癸評価{癸}下限 {02} % 『癸』評価のための最小得点 % \未評価{未}下限 {45} % 再評価を実行すべき最小得点 \不評価{不}下限 {02} % 不合格評価を与える最小得点 \判定合格{判}点 {60} % 判定合格評価で与える得点 \無評価{無}平常 {2}未満 % 評価を行わない % %%%%%%%%%%%%%%%%%%%%%%%%% % 再評価 % %%%%%%%%%%%%%%%%%%%%%%%%% % \再評価最小得点 {60} % 評点『60』となるべき得点 \再評価最大評点 {80} % 得点『100』に対する評点 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {初期}{平常}…{中間}…{平常}{期末}{再試}{評定}% % 学生の{系}{学年}{組}(学生番号){氏}{名} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 判定は 1=合格,-1=不合格,0=保留(E) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 再履修 % %\座席{}列{}段\ID{} %\学生{}系{}年{}組({}学部{}年{}番{}){}{}% %\初期{}\平常{}\平常{}\平常{}\平常{} %\平常{}\平常{}\中間{}\平常{}\平常{} %\平常{}\平常{}\平常{}\平常{}\期末{}\再試{0}\評定{0} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 対象外 % %\座席{}列{}段\ID{} %\学生{}系{}年{}組({}学部{}年{}番{}){}{}% %\初期{}\平常{}\平常{}\平常{}\平常{} %\平常{}\平常{}\中間{}\平常{}\平常{} %\平常{}\平常{}\平常{}\平常{}\期末{}\再試{0}\評定{0} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 対象クラス % %\学生番号{000}初期値 % %\学生なし{0} % \座席{}列{}段\ID{} \学生{理}系{1}年{10}組({1MA}学部{17}年{123}番{A}){九大}{某某}% \初期{80}\平常{80}\平常{80}\平常{80}\平常{80} \平常{80}\平常{80}\中間{80}\平常{80}\平常{80} \平常{80}\平常{80}\平常{80}\再試{0}\評定{0} % \座席{}列{}段\ID{} \学生{理}系{1}年{10}組({1MA}学部{17}年{124}番{B}){九大}{某々}% \初期{90}\平常{90}\平常{90}\平常{90}\平常{90} \平常{90}\平常{90}\中間{90}\平常{90}\平常{90} \平常{90}\平常{90}\平常{90}\再試{0}\評定{0} % \座席{}列{}段\ID{} \学生{理}系{1}年{10}組({1MA}学部{17}年{125}番{C}){九大}{某某}% \初期{100}\平常{100}\平常{100}\平常{100}\平常{100} \平常{100}\平常{100}\中間{100}\平常{100}\平常{100} \平常{100}\平常{100}\平常{100}\再試{0}\評定{0} % \座席{}列{}段\ID{} \学生{理}系{1}年{10}組({1MA}学部{17}年{126}番{D}){九大}{某々}% \初期{70}\平常{70}\平常{70}\平常{70}\平常{70} \平常{70}\平常{70}\中間{70}\平常{70}\平常{70} \平常{70}\平常{70}\平常{70}\再試{0}\評定{0} % \座席{}列{}段\ID{} \学生{理}系{1}年{10}組({1MA}学部{17}年{127}番{E}){九大}{某某}% \初期{60}\平常{60}\平常{60}\平常{60}\平常{60} \平常{60}\平常{60}\中間{60}\平常{60}\平常{60} \平常{60}\平常{60}\平常{60}\再試{0}\評定{0} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 再履修等追加分 % %\座席{}列{}段\ID{} %\学生{}系{}年{}組({}学部{}年{}番{}){}{}% %\初期{}\平常{}\平常{}\平常{}\平常{} %\平常{}\平常{}\中間{}\平常{}\平常{} %\平常{}\平常{}\平常{}\平常{}\期末{}\再試{0}\評定{0} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 成績の計算・書き出し % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \書き出し %
実はこのところ、ptex を使っていないので、ptex でうまく動くか分からない。