import csv
import sys
__all__ = ["csvstream2data", "data2lispArray", "csv2lispArray"]


def csvstream2data (stream, skipcolumns=1, skiprows =1):
    '''
    Read a csvstream in and convert information into a data list-list
    '''
    parser = csv.reader(stream)
    data = []
    for (i,row) in enumerate(parser):
        if i >= skiprows:
            data.append(row[skiprows:])
    return data

def data2lispArray (data,fileStream):
    '''
    Print data list-list into lisp array
    '''
    rowcount = len(data)
    colcount = max(map(lambda x:
                          len(x)
                      ,data))
    print >> fileStream, "(make-array '(%d %d)" % (rowcount+1, colcount+1)
    print >> fileStream, "\t:initial-contents '("
    formatLine = lambda rlist: "\t(%s)" % (" ".join(rlist))
    print >> fileStream, formatLine(("nil",) * (colcount+1))
    for drow in data:
        #initial nil added so that lisp array data will start with 1,1 instead of 0,0
        padded_drow = ["nil"] + map(str, drow) + (["nil"]*(colcount-len(drow)))
        print >> fileStream, formatLine(padded_drow)
    print >> fileStream, "))"

def csv2lispArray(inputFileName,outputFileName):
    data = []
    try:        
        inputFileStream = open(inputFileName,"rb")
        data = csvstream2data(inputFileStream,1,1) 
        inputFileStream.close()
    except IOError:
        print >> sys.stderr, 'unable to open', inputFileName

    try:        
        outputFileStream = open(outputFileName,"wb")
        data2lispArray(data,outputFileStream)
        outputFileStream.close()
    except IOError:
        print >> sys.stderr, 'unable to open', outputFileName


csv2lispArray("/home/pgreen/download/Fvalue90percent.csv","/home/pgreen/download/Fvalue90percent.lisp")
csv2lispArray("/home/pgreen/download/Fvalue95percent.csv","/home/pgreen/download/Fvalue95percent.lisp")
csv2lispArray("/home/pgreen/download/Fvalue99percent.csv","/home/pgreen/download/Fvalue99percent.lisp")
