UHU-StartseiteInformatikTechnikenscalaMemosvirtuelle Datenbank
Ein erster Ansatz



object symbols extends Enumeration{
  val Unbekannt = Value("Unbekannt")
  val Datum     = Value("Datum")
  val Uhrzeit   = Value("Uhrzeit")
  val Ereignis  = Value("Ereignis")
  val Tag       = Value("Tag")
  val Gruppe    = Value("Gruppe")
  val ID        = Value("ID")
}
object Utils{
  def transform( symStr: Seq[String]): Seq[symbols.Value] = {
    var result = Seq[symbols.Value]()
    for (it <- symStr){
      val opt = symbols.valueOf(it)
      opt match{
        case Some(_) => result = result ++ Seq(opt.get)
        case None    => result = result ++ Seq(symbols.Unbekannt)
      }
    }  
    return result
  }
  def csv_split( line: String ): Array[String] = {
    var l = line.substring(1,line.length-2)
    l.split("","")
  }
}
class Record(s: Seq[symbols.Value] ) extends HashMap[Int,Any]{
  for (e <- s) put(e.id, null)                 // anlegen der Schlüssel ohne Daten
  def apply (s: symbols.Value) = get(s.id).get // get erzeugt ein Some und Some.get ergibt das Objekt
  def update(s: symbols.Value, v: Any) = super.update(s.id,v)
  def pi(seq: Seq[symbols.Value]): Record = {
    var result = new Record(seq)
    for (e <- seq) result(e) = apply(e)
    return result
  }
}
class Table(name: String, sym: Seq[symbols.Value]){
  var rows = Seq[Record]()
  def getName() = name // brauchts, weil name privat deklariert ist
  def this( name: String, symStr: Array[String] ) = this( name, Utils.transform(symStr) )  // wird bei Laden aus der Datei benötigt
  def append (lines: Seq[Record]) = rows = rows ++ lines
  def insert(s: Seq[Any]) = {
    val r = new Record(sym);     var i = 0
    for (elem<-sym){ r(elem) = s(i); i += 1 }
    rows = rows ++ Seq(r)
  }
  def count = rows.length
  def filter(f: Record=>Boolean): Table = {
    var result = new Table(name+'*', sym)
    result.append( rows.filter(f) )
    return result
  }
  def pi(seq: Seq[symbols.Value]): Table = {
    var result = new Table(name+'*', seq)
    for (it <- rows) result.rows = result.rows ++ Seq(it.pi(seq))
    return result
  }
  def pi(sa: Array[String]): Table = {
    var nsym = Utils.transform(sa)
    return pi(nsym)
  }
  override def toString(): String = {
    var result = ""
    for (r<-rows) result += r.toString + "\\n"
    return result
  }
}


optimal sichtbar mit Firefox Formeln mit asciimath Druckversion