Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
45
Task/CSV-data-manipulation/FunL/csv-data-manipulation.funl
Normal file
45
Task/CSV-data-manipulation/FunL/csv-data-manipulation.funl
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import io.{lines, PrintWriter}
|
||||
|
||||
data Table( header, rows )
|
||||
|
||||
def read( file ) =
|
||||
l = lines( file )
|
||||
|
||||
def next = vector( l.next().split(',') )
|
||||
|
||||
if l.isEmpty() then
|
||||
return Table( vector(), [] )
|
||||
|
||||
header = next()
|
||||
rows = seq()
|
||||
|
||||
while l.hasNext()
|
||||
rows += next()
|
||||
|
||||
Table( header, rows.toList() )
|
||||
|
||||
def write( table, out ) =
|
||||
w = if out is String then PrintWriter( out ) else out
|
||||
|
||||
w.println( table.header.mkString(',') )
|
||||
|
||||
for r <- table.rows
|
||||
w.println( r.mkString(',') )
|
||||
|
||||
if out is String
|
||||
w.close()
|
||||
|
||||
def updateRow( header, row, updates ) =
|
||||
r = dict( (header(i), row(i)) | i <- 0:header.length() )
|
||||
updates( r )
|
||||
vector( r(f) | f <- header )
|
||||
|
||||
def update( table, updates ) =
|
||||
Table( table.header, (updateRow(table.header, r, updates) | r <- table.rows).toList() )
|
||||
|
||||
def addColumn( table, column, updates ) =
|
||||
Table( table.header + [column], (updateRow(table.header + [column], r + [null], updates) | r <- table.rows).toList() )
|
||||
|
||||
t = addColumn( read('test.csv'), 'SUM', r -> r('SUM') = sum(int(v) | (_, v) <- r if v != null) )
|
||||
write( t, 'test_out.csv' )
|
||||
write( t, System.out )
|
||||
Loading…
Add table
Add a link
Reference in a new issue