iwase/seiseki の履歴の現在との差分(No.5) - PukiWiki

基幹教育の PC の吐く CSV ファイルから、成績表の tex source を作る C source を書いた。
成績表の提出がやっと終わった。今回うまくいった手順を基に次回実践すべき手順を書いて置く:

 (1) 基幹教育の PC から CSV のフォーマットで取り出す:
 0:レポート、試験を基幹教育の事務の Windows マシンで読み取り可能な解答用紙を使って行う。
 1:採点を行って、成績を記入した解答用紙を基幹教育の Windows マシンで読み取り、事務の方に CSV ファイルを USB に移してもらう。
 2:CSV ファイルを Numbers または text editor で読み込んで整形する。このとき、Numbers なら文字コードも自動で UTF に変換される。
 3:作成した変換用の C プログラム seiseki14(バージョン14!)を使って xetex の source code に変換する。
 4:採点用のパラメータ(評点欄表示を 1 にする)を設定して xetex でコンパイルし、出力を元の解答用紙と比較・検討して間違いがないことを確認する。
 5:成績アップロード用のパラメータ(評点欄表示を 0 にして、評価欄表示を 1 にする)を設定して再度コンパイルし、間違いがないことを確認する。
 6:成績アップロード用の xls ファイルを Campusmate-J からダウンロードする。
 7:得られた PDF ファイルを Acrobat で html ファイルに変換し、Excel で読み込んで成績アップロード用の xls ファイルにコピーする。
 8:成績アップロード用の xls ファイルを  Campusmate-J にアップロードする。

上の手順 2 は以下のような次第である:

- (1) 基幹教育の PC から取り出した CSV ファイルをエディタで読み込む。
(文字コード:Shift-JIS,改行コード:CR+LF,氏名のセパレータ:全角空白)

前後期曜日時限+講義ID,曜日,時限,科目名,担当者氏名,年月日,年月日,年月日,年月日…,年月日(年月日は出欠や小テストの日付)
 前後期曜日時限+講義ID,曜日,時限,科目名,担当者氏名,年月日,年月日,年月日,年月日…,年月日(年月日は出欠や小テストの日付)
 
 年組ID,学部,学生番号, ,学生氏 学生名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
 
 年組ID,学部,学生番号, ,学生氏 学生名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
 

 
 年組ID,学部,学生番号, ,学生氏 学生名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)

年組ID,学部,学生番号, ,学生氏名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
- (2) エクセルなどで次の形に整形して、新しい CSV ファイルを作る。

年組ID,学部,学生番号, ,学生氏名,点数,点数,点数,点数,…,点数(出欠や小テストの点数)
 年組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 -w -Z1 -Lu により(文字コード:UTF-8,改行コード:LF,氏名のセパレータ:半角空白)の様に整形し、さらに /usr/local/bin/seiseki で tex-source に変換する。
実際には (3) は[[シェルスクリプト>iwase/seiseki/seiseki]]を書いた。また、tex-source に[[変換>iwase/seiseki/C]]しても実際には[[マクロ>iwase/seiseki/macro]]を使って処理することになる。

年組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) は[[シェルスクリプト>iwase/seiseki/seiseki]]を書いた。また、tex-source に[[変換>iwase/seiseki/C]]しても実際には[[マクロ>iwase/seiseki/macro]]を使って処理することになる。
以下に基幹教育の 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 ファイルを作る。
これにエクセルで必要な情報を追加して、次の形の 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
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%
 \input seiseki25.inc
 %%%%%%%%%%%%%%%%%%%%%%%%%
 %	クラス		%
 %%%%%%%%%%%%%%%%%%%%%%%%%
 %
 \クラス名	{理}系{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=有り
 \分布欄表示	{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 でうまく動くか分からない。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS