Simple database: Difference between revisions

(→‎{{header|Java}}: reverse sort order)
Line 3,058:
<TR><TD align=right>2</TD><TD>Best Foods</TD><TD>2011-02-02 12:33</TD><TD>food</TD></TR>
<TR><TD align=right>1</TD><TD>Home Sales</TD><TD>2012-01-01 10:20</TD><TD>broker</TD></TR></TABLE>
=={{header|Scala}}==
<lang Scala>object SimpleDatabase extends App {
type Entry = Array[String]
def asTSV(e: Entry) = e mkString "\t"
def fromTSV(s: String) = s split "\t"
val header = asTSV(Array("TIMESTAMP", "DESCRIPTION", "CATEGORY", "OTHER"))
 
def read(filename: String) = try {
scala.io.Source.fromFile(filename).getLines.drop(1).map(fromTSV)
} catch {
case e: java.io.FileNotFoundException => Nil
}
 
def write(filename: String, all: Seq[Entry]) = {
import java.nio.file.{Files,Paths}
import scala.collection.JavaConversions.asJavaIterable
Files.write(Paths.get(filename), asJavaIterable(header +: all.map(asTSV)))
all.size
}
 
def add(filename: String, description: String, category: String = "none", optional: Seq[String] = Nil) {
val format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val e = Array(format.format(new java.util.Date), description, category) ++ optional
println(write(filename, read(filename).toBuffer :+ e) + " entries")
}
 
def print(filename: String, filter: Seq[Entry] => TraversableOnce[Entry]) =
filter(read(filename).toList.sortBy(_.headOption)) map(_ mkString ",") foreach println
 
args match {
case Array(f, "latest") => print(f, _ takeRight 1)
case Array(f, "latest", cat) => print(f, _ filter(_.lift(2) == Some(cat)) takeRight 1)
case Array(f, "all") => print(f, _.toSeq)
case Array(f, "all", "latest") => print(f, _ groupBy (_ lift 2 getOrElse "") map{case (_, cat) => cat.last})
case Array(f, "add", desc) => add(f, desc, category = "")
case Array(f, "add", desc, cat) => add(f, desc, cat)
case Array(f, "add", desc, cat, opt @ _*) => add(f, desc, cat, opt)
case _ => println("Usage: SimpleDatabase filename.tsv [all [latest]| latest [CATEGORY] | add [DESCRIPTION [CATEGORY [OPTIONAL]...]]]")
}
}</lang>
{{out}}
<pre>> SimpleDatabase
Usage: SimpleDatabase filename.tsv [all [latest]| latest [CATEGORY] | add [DESCRIPTION [CATEGORY [OPTIONAL]...]]]
 
> SimpleDatabase database.tsv all
 
> SimpleDatabase database.tsv add one
1 entries
 
> SimpleDatabase database.tsv add two test
2 entries
 
> SimpleDatabase database.tsv add three test optional
3 entries
 
> SimpleDatabase database.tsv add four final
4 entries
 
> SimpleDatabase database.tsv all
2014-10-03 12:00:01,one
2014-10-03 12:00:02,two,test
2014-10-03 12:00:03,three,test,optional
2014-10-03 12:00:04,four,final
 
> SimpleDatabase database.tsv all latest
2014-10-03 12:00:04,four,final
2014-10-03 12:00:03,three,test,optional
2014-10-03 12:00:01,one
 
> SimpleDatabase database.tsv latest
2014-10-03 12:00:04,four,final
 
> SimpleDatabase database.tsv latest test
2014-10-03 12:00:03,three,test,optional</pre>
 
=={{header|Tcl}}==
Anonymous user