ในการสร้างตารางได้มีการดึงข้อมูลจาก https://docs.google.com/spreadsheets/d/1vjDrnYcWW-ofhsmLVjEYA3yLFWT1ItQF4HmwRpj5JPI/edit#gid=0
มาเป็นไฟล์ csv
ตัวอย่างไฟล์ csv แทนที่จะใช้ตารางขั้นจะใช้ , ขั้นระหว่าแถวแทน
ในที่นี้จะนำไฟล์นี้มาเรียงเลขรหัสนักศึกษา และทำเป็นตารางโดยใช้ cgi
ตัวอย่างโค้ด
#!/usr/bin/python
#-*-coding: utf-8 -*-
print "content-type :text/html\n\n"
print "<meta http-equiv=Content-Type content=text/html;charset=utf-8 >"
file = "/home/ubuntu/cgi-bin/w1-Mon - Sheet1.csv"
inlist = open(file,'rU').readlines()
box_line = []
box_string = []
put_or_not = 0
for l in inlist[2:len(inlist)-1]:
for s in l.split(","):
box_string.append(s)
num = len(box_string)
for i in box_string[1].split("-"):
number = int(i)
box_string.append(number)
if len(box_line)==0:
box_line.append(box_string)
put_or_not =1
else :
for n_box in box_line:
if(n_box[num]>box_string[num]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
elif(n_box[num]==box_string[num]):
if(n_box[num+2]>box_string[num+2]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
if(n_box[num+2]==box_string[num+2]):
if(n_box[num+3]>box_string[num+3]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
if(put_or_not ==0):
box_line.append(box_string)
put_or_not = 0
box_string = []
print "<table border=1 width=60%>"
print "<tr align=center>"
print "<td width=20%>"+"Student ID"+"</td>"
print "<td width=20%>"+"Name"+"</td>"
print "<td width=20%>"+"Surname"+"</td>"
print "<td width=30%>"+"Blog url"+"</td>"
print "<td width=10%>"+"Counted number w1-Mon"+"</td>"
print "</tr>"
for a in box_line:
print "<tr>"
print "<td width=20%>"+a[1]+"</td>"
print "<td width=20%>"+a[2]+"</td>"
print "<td width=20%>"+a[3]+"</td>"
print "<td width=30%> <a href=http://"+a[4]+">"+a[4]+"</a href></td>"
print "<td width=10% align=center>"+a[0]+"</td>"
print "</tr>"
print "</table>"
ผล
#-*-coding: utf-8 -*-
print "content-type :text/html\n\n"
print "<meta http-equiv=Content-Type content=text/html;charset=utf-8 >"
file = "/home/ubuntu/cgi-bin/w1-Mon - Sheet1.csv"
inlist = open(file,'rU').readlines()
box_line = []
box_string = []
put_or_not = 0
for l in inlist[2:len(inlist)-1]:
for s in l.split(","):
box_string.append(s)
num = len(box_string)
for i in box_string[1].split("-"):
number = int(i)
box_string.append(number)
if len(box_line)==0:
box_line.append(box_string)
put_or_not =1
else :
for n_box in box_line:
if(n_box[num]>box_string[num]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
elif(n_box[num]==box_string[num]):
if(n_box[num+2]>box_string[num+2]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
if(n_box[num+2]==box_string[num+2]):
if(n_box[num+3]>box_string[num+3]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
if(put_or_not ==0):
box_line.append(box_string)
put_or_not = 0
box_string = []
print "<table border=1 width=60%>"
print "<tr align=center>"
print "<td width=20%>"+"Student ID"+"</td>"
print "<td width=20%>"+"Name"+"</td>"
print "<td width=20%>"+"Surname"+"</td>"
print "<td width=30%>"+"Blog url"+"</td>"
print "<td width=10%>"+"Counted number w1-Mon"+"</td>"
print "</tr>"
for a in box_line:
print "<tr>"
print "<td width=20%>"+a[1]+"</td>"
print "<td width=20%>"+a[2]+"</td>"
print "<td width=20%>"+a[3]+"</td>"
print "<td width=30%> <a href=http://"+a[4]+">"+a[4]+"</a href></td>"
print "<td width=10% align=center>"+a[0]+"</td>"
print "</tr>"
print "</table>"
ผล
อธิบายการทำงาน
การใช้งาน cgi จะต้องประกาศ #!/usr/bin/python และ print "content-type :text/html\n\n" และเนื่องจากข้อมูลที่ดึงเข้ามามีภาษาไทยทำให้ต้องประกาศ #-*-coding: utf-8 -*- เพื่อให้ python อ่านภาษาไทยได้ และ print "<meta http-equiv=Content-Type content=text/html;charset=utf-8 >" ให้ html รู้ภาษาไทย
ใช้การดึงข้อมูลด้วย
inlist = open(file,'rU').readlines()
โดยใช้การ open เพื่อเปิดไฟล์ที่ต้องการ และใช้ readline เพื่อแยกทีละบรรทัดมาเก็บไว้ใน inlist
for l in inlist[2:len(inlist)-1]:
และทำการวน เพื่ออ่านทีละบรรทัด โดยแต่ละบรรทัดเก็บที่ l ในที่นี้จะไม่อ่านสองบรรทัดแรก
for s in l.split(","):
box_string.append(s)
box_string.append(s)
เมื่ออ่านทีละบรรทัด แต่ละแถวจะมี , ขึ้นอยู่จึงใช้ split ตัดแบ่งทีละช่องเก็บไว่ใน list ที่เรียกว่า box_string
for i in box_string[1].split("-"):
number = int(i)
box_string.append(number)
แล้วใช้การตัดคำ - จากรหัสนักศึกษาเพื่อนนำไปใช้ไปใช้ในการจัดเรียงแถวรหัสนักศึกษาnumber = int(i)
box_string.append(number)
if len(box_line)==0:
box_line.append(box_string)
put_or_not =1
else :
for n_box in box_line:
if(n_box[num]>box_string[num]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
elif(n_box[num]==box_string[num]):
if(n_box[num+2]>box_string[num+2]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
if(n_box[num+2]==box_string[num+2]):
if(n_box[num+3]>box_string[num+3]):
box_line.insert(box_line.index(n_box),box_string)
put_or_not =1
break;
if(put_or_not ==0):
box_line.append(box_string)
put_or_not = 0
box_string = []
ในส่วนนี้จะใช้การจัดเรียง ทีละแถว โดยเปรียบเทียบรหัสปีแรก หากเหมือนกันก็เทียบจากรหัส 5 ตัวสุดท้าย มาเก็บไว้ใน list ชื่อbox_line.
print "<table border=1 width=60%>"
print "<tr align=center>"
print "<td width=20%>"+"Student ID"+"</td>"
print "<td width=20%>"+"Name"+"</td>"
print "<td width=20%>"+"Surname"+"</td>"
print "<td width=30%>"+"Blog url"+"</td>"
print "<td width=10%>"+"Counted number w1-Mon"+"</td>"
print "</tr>"
for a in box_line:
print "<tr>"
print "<td width=20%>"+a[1]+"</td>"
print "<td width=20%>"+a[2]+"</td>"
print "<td width=20%>"+a[3]+"</td>"
print "<td width=30%> <a href=http://"+a[4]+">"+a[4]+"</a href></td>"
print "<td width=10% align=center>"+a[0]+"</td>"
print "</tr>"
print "</table>"
ในส่วนนี้จะเป็นการสร้าง ตารางสำหรับแสดงข้อมูล
รูปแบบของ html ในการสร้างตารางคือประกาศ <table>
และแต่ละแถวจะอยู่ใน <tr> และจะเรียงไปแต่ละคอลัมม์ใน <td> โดยในส่วนนั้นจะสามารถกำหนด ความกว้างได้จาก width





