INRC2プロジェクトのcsv解をValidator用のフォーマットに変更するプロジェクトcsv.nurse3にバグがありました。
下記が修正後のソースです。
import win32gui, win32con, os
import csv
def get_day_str(day):
if day==0:
return "Mon"
elif day==1:
return "Tue"
elif day==2:
return "Wed"
elif day==3:
return "Thu"
elif day==4:
return "Fri"
elif day==5:
return "Sat"
elif day==6:
return "Sun"
else:
raise ValueError("Unsupported Day!")
def get_shift_name(label):
if label=='D':
return "Day"
elif label=='N':
return "Night"
elif label=='L':
return "Late"
elif label=='E':
return "Early"
else :
raise ValueError("Unsupported Shift!")
def get_task_name(label):
if label=='He':
return "HeadNurse"
elif label=='Nu':
return "Nurse"
elif label=='Ca':
return "Caretaker"
elif label=='Tr':
return "Trainee"
else :
raise ValueError("Unsupported Shift!")
def make_weeks_data(lst,fname):
persons=int((len(lst)-3)/2)
items=len(lst[0])
print('items=',items)
name=""
phases=3
weeks=4
start_row=2
print('persons=',persons)
if items==107:
phases=3
weeks=4
elif items==254:
phases=4
weeks=8
elif items==142:
phases=4
weeks=4
else:
raise ValueError("Unsupported Items!")
start_day=2+phases*7
for week in range(weeks):
w_str=""
file_name = "sol-week" + str(week) + ".txt";
assigned=0
for person in range(persons):
#print(person)
#print(lst[person*2+2][0])
name=lst[person*2+start_row][0]
print(name)
for day in range(7):
shift=lst[person*2+start_row][week*7*phases+day*phases+start_day]
if shift=='O' or shift=='':
continue
for ph in range(phases):
task=lst[person*2+1+start_row][week*7*phases+day*phases+start_day+ph]
if task !='':
w_str+=name +' '+get_day_str(day)+' '+get_shift_name(shift) +' '+get_task_name(task)+'\n'
assigned +=1#DEC252024 Bug Fix
break
#assigned +=1
Wstr="SOLUTION\n";
Wstr+=str(week)+' '+ fname[0:6]+ "\n\n";
Wstr+="ASSIGNMENTS = "+ str(assigned) +"\n";
Wstr+=w_str
f1 = open(file_name, 'w')
f1.write(Wstr)
f1.close()
print(file_name,Wstr)
def post_main_sub():
# try:
filter='csv\0*.csv\0'
customfilter='Other file types\0*.*\0'
fname, customfilter, flags=win32gui.GetOpenFileNameW(
InitialDir=project_file_path, #os.environ['temp'],
Flags=win32con.OFN_ALLOWMULTISELECT|win32con.OFN_EXPLORER,
File='somefilename', DefExt='csv',
Title='GetOpenFileNameW',
Filter=filter,
CustomFilter=customfilter,
FilterIndex=0)
print ('open file names:', repr(fname))
print(fname)
with open(fname, encoding="utf-8") as f:
lst = list(csv.reader(f))
print("row length=",len(lst))
#basename = os.path.basename(fname)
basename_without_ext = os.path.splitext(os.path.basename(fname))[0]
make_weeks_data(lst,basename_without_ext)
def post_main():
post_main_sub()
0 件のコメント:
コメントを投稿