วันเสาร์ที่ 24 มกราคม พ.ศ. 2558

Test 03 - csv data sort in cgi


Test 03 csv data sort in cgi

ในคราวนี้ผมจะทดสอบโดยการ ให้ cgi เปิดไฟล์ csv ออกมาแล้วสามารถที่จะจัดเรียง
ข้อมูลในนั้นและแสดงออกมาได้
ขั้นแรกเลย จัดเตรียม server ให้พร้อมที่จะ run cgi
 ต่อมาเข้าไปที่ 0.0.0.0:8000/#dir/#file โดยในคราวนี้ผมได้ตั้งชื่อไฟล์ว่า datasort.cgi
 หน้าตาของโปรแกรมเป็นแบบนี้ ในขั้นแรกจะให้เลือกไฟล์ csv ที่อยู่ใน directory ที่จัดเตรียมไว้
เพื่อที่จะนำมาใช้แสดงผล ในที่นี้เป็น /home/#user/bss/csv-data/ โดย user คือชื่อ username
ให้เรากดเลือกไฟล์ใดไฟล์หนึ่งเพื่อนที่จะนำมาแสดงผล
 โปรแกรมก็จะแสดงผลข้อมูลในไฟล์ออกมา โดยในขั้นแรกจะยังไม่มีการจัดเรียงอะไร สามารถที่จะเปลี่ยนไฟล์ได้โดยไปที่ change file แล้วเลือกไฟล์ที่ต้องการ
 เมื่อเลือกไฟล์ที่ต้องการได้แล้วสามารถที่จะสั่งให้มันจัดเรียง ตาม id มาก - น้อย หรือตรงกันข้ามได้โดย
ไปที่ Sort by
ผลของการจัดเรียงเป็นดังนี้


code ::


#!/usr/bin/python
#--coding: utf-8 -*-
print "Content-type: text/html\n ; charset=utf-8"
import os, cgi
query = cgi.FieldStorage()
selectedfile, command = "", ""
for i in query.keys():
    exec(i + " = " + query[i].value)

def sortby(obj, type):
    data = {}
    for table in range(len(obj)-1):
        if(obj[table][1] != ""):
            data[len(data)] = int(obj[table][1].replace("-", "").replace(" ", ""))
        else: data[len(data)] = 0   
    i = j = 0
    while i < len(data):
        j = i
        while j < len(data):
            if type == "up":
                if data[j] < data[i]:   
                    dd = data[i]
                    data[i] = data[j]
                    data[j] = dd
                    dummy = obj[i]
                    obj[i] = obj[j]
                    obj[j] = dummy
            elif type == "down":
                if data[j] > data[i]:   
                    dd = data[i]
                    data[i] = data[j]
                    data[j] = dd
                    dummy = obj[i]
                    obj[i] = obj[j]
                    obj[j] = dummy
            j += 1
        i += 1
    return obj
       

print """
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script>
function jumptofile(file){
    window.location.href = location.protocol + '//' + location.host + location.pathname+"?selectedfile=\\\""+file+"\\\"&command=\\\"\\\"";
}

function jumptoparam(command){
   
    window.location.href = location.protocol + '//' + location.host + location.pathname+"?selectedfile=\\\""""+selectedfile+"""\\\"&command=\\\""+command+"\\\"";
}

function check(part){
    $(part).toggle();
}
</script>
"""

library = "/home/galible/bss/csv-data"
trav = os.walk(library);
datarows, datatables, title = {}, {}, {}
if selectedfile == "":
    print "&nbsp;&nbsp;&nbsp;<h1><font color=\"red\">choose the file</font></h1>"
    for fol in trav:
        for file in fol[2]:
            print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=\"5\">>>> </font><a onclick=\"javascript:jumptofile(name)\" name=\""+str(fol[0])+"/"+str(file)+"\"><font size=\"5\" color=\"#FFAA55\">"+str(fol[0])+"/"+str(file)+"</font><font size=\"5\"> <<<</font></a><br>";
else:
    print "<h1><font color=\"#0055FF\">detail for csv file : </font><font color=\"#FF5500\">"+selectedfile+"</font></h1>"   
    file = open(selectedfile, 'r')
    datatables = file.readlines()
    for row in datatables:
        if title == {}:
            title = row.split(",")
        else:
            datarows[len(datarows)] = row.split(",")
       
    print "change file : <select onchange=\"jumptofile(value)\">"
    for fol in trav:
        for file in fol[2]:
            print "<option value=\""+str(fol[0])+"/"+str(file)+"\" "+((str(file) == str(selectedfile.split("/")[-1])) and "selected" or "")+">"+str(file)+"</option>"
    print "</select><br>"
    if command == "":
        print "Sort by : <select onchange=\"jumptoparam(value)\"><option value=\"\" selected>no sort</option><option value=\"sortidup\">sort id up to down</option><option value=\"sortiddown\">sort id down to up</option></select><br>"
    if command == "sortidup":
        print "Sort by : <select onchange=\"jumptoparam(value)\"><option value=\"\">no sort</option><option value=\"sortidup\" selected>sort id up to down</option><option value=\"sortiddown\">sort id down to up</option></select><br>"
        datarows = sortby(datarows, "up")
    if command == "sortiddown":
        print "Sort by : <select onchange=\"jumptoparam(value)\"><option value=\"\">no sort</option><option value=\"sortidup\">sort id up to down</option><option value=\"sortiddown\" selected>sort id down to up</option></select><br>"
        datarows = sortby(datarows, "down")
   
    print "<table border=\"4\">"
    print "<tr>"
    for header in title:
        print "<td>" + header + "</td>"
    print "</tr>"
    for table in range(len(datarows)):
        print "<tr>"
        for row in datarows[table]:
            print "<td>" + row + "</td>"
        print "</tr>"
    print "</table>"

ไม่มีความคิดเห็น:

แสดงความคิดเห็น