Batchプログラムで2次元配列を扱います
科目データを個人・総合・性別ごとの合計・平均を求めています
遅延環境変数が必須なのでsetlocal enabledelayedexpansionを使います
data.txt
性別 名前 科目1 科目2 科目3
1 akiyama 67 89 78 2 kimura 79 86 92 1 tanaka 62 85 79 1 inoue 96 86 91 2 satou 69 74 70 2 nomura 89 85 71 2 mutou 65 58 90 2 harada 78 85 82 1 ueda 93 84 69 1 enomoto 59 88 75 2 okada 62 85 97 1 yamada 98 75 84 2 watanabe 89 71 96 1 chida 87 90 91
Avarage.bat
@echo off setlocal enabledelayedexpansion rem ファイルから2次元配列にデータを格納 set n=0 cd %~dp0 for /f "tokens=1,2,3,4,5" %%a in (data.txt) do ( set name[!n!][0]=%%a set name[!n!][1]=%%b set name[!n!][2]=%%c set name[!n!][3]=%%d set name[!n!][4]=%%e set /a n=n+1 ) set /a n=n-1 set tmp=0 set avg=0 set total=0 set t1=0 set t2=0 set t3=0 set tm=0 set tm1=0 set tm2=0 set tm3=0 set tmc=0 set tw=0 set tw1=0 set tw2=0 set tw3=0 set twc=0 rem 各個人の成績と合計と平均 echo 名前 性別 科目1 科目2 科目3 合計 平均 echo ============================================== for /l %%x in (0,1,!n!) do ( set /a total=total+!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]! set /a t1=t1+!name[%%x][2]! set /a t2=t2+!name[%%x][3]! set /a t3=t3+!name[%%x][4]! if !name[%%x][0]!==1 ( set /a tm=tm+!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]! set /a tm1=tm1+!name[%%x][2]! set /a tm2=tm2+!name[%%x][3]! set /a tm3=tm3+!name[%%x][4]! set /a tmc=tmc+1 ) else ( set /a tw=tw+!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]! set /a tw1=tw1+!name[%%x][2]! set /a tw2=tw2+!name[%%x][3]! set /a tw3=tw3+!name[%%x][4]! set /a twc=twc+1 ) set /a tmp=!name[%%x][2]!+!name[%%x][3]!+!name[%%x][4]! set /a avg=tmp/3 echo !name[%%x][1]! !name[%%x][0]! !name[%%x][2]! !name[%%x][3]! !name[%%x][4]! total=!tmp! average=!avg! ) echo ============================================== rem 全体の科目ごとの合計と総合計と平均 set /a n=n+1 echo total=!total! 1total=!t1! 2total=!t2! 3total=!t3! set ave=0 set ave1=0 set ave2=0 set ave3=0 set /a ave=total/!n! set /a ave1=t1/!n! set /a ave2=t2/!n! set /a ave3=t3/!n! echo allaverage=!ave! all1average=!ave1! all2average=!ave2! all3average=!ave3! rem 男性の科目ごとの合計と総合計と平均 echo mantotal=!tm! man1total=!tm1! man2total=!tm2! man3total=!tm3! set manave=0 set man1ave=0 set man2ave=0 set man3ave=0 set /a manave=!tm!/!tmc! set /a man1ave=!tm1!/!tmc! set /a man2ave=!tm2!/!tmc! set /a man3ave=!tm3!/!tmc! echo manaverage=!manave! man1average=!man1ave! man2average=!man2ave! man3average=!man3ave! rem 女性の科目ごとの合計と総合計と平均 echo womantotal=!tw! woman1total=!tw1! woman2total=!tw2! woman3total=!tw3! set womanave=0 set woman1ave=0 set woman2ave=0 set woman3ave=0 set /a womanave=!tw!/!twc! set /a woman1ave=!tw1!/!twc! set /a woman2ave=!tw2!/!twc! set /a woman3ave=!tw3!/!twc! echo womanaverage=!womanave! woman1average=!woman1ave! woman2average=!woman2ave! woman3average=!woman3ave!
結果
名前 性別 科目1 科目2 科目3 合計 平均 ============================================== akiyama 1 67 89 78 total=234 average=78 kimura 2 79 86 92 total=257 average=85 tanaka 1 62 85 79 total=226 average=75 inoue 1 96 86 91 total=273 average=91 satou 2 69 74 70 total=213 average=71 nomura 2 89 85 71 total=245 average=81 mutou 2 65 58 90 total=213 average=71 harada 2 78 85 82 total=245 average=81 ueda 1 93 84 69 total=246 average=82 enomoto 1 59 88 75 total=222 average=74 okada 2 62 85 97 total=244 average=81 yamada 1 98 75 84 total=257 average=85 watanabe 2 89 71 96 total=256 average=85 chida 1 87 90 91 total=268 average=89 ============================================== total=3399 1total=1093 2total=1141 3total=1165 allaverage=242 all1average=78 all2average=81 all3average=83 mantotal=1726 man1total=562 man2total=597 man3total=567 manaverage=246 man1average=80 man2average=85 man3average=81 womantotal=1673 woman1total=531 woman2total=544 woman3total=598 womanaverage=239 woman1average=75 woman2average=77 woman3average=85