TTbVal TTbVarType::GetDscVal(const TStr& Str){
  Assert(AlwVTSet.In(tvtDsc)&&!DscIntP);
  int KeyId=NmToDscH.GetKeyId(Str);
  if (KeyId==-1){
    Assert(!DefP && !FixVTSet.In(tvtDsc));
    return TTbVal(NmToDscH.AddDat(Str, TInt(DscToNmV.Add(Str))));}
  else {
    return TTbVal(NmToDscH[KeyId]);
  }
}
Example #2
0
/////////////////////////////////////////////////
// Table-Value-Split
void TTbValSplit::AddBinSplitDscValsPerBits(const int& Dscs, const TB32Set& BSet) {
    uint DscBSet=BSet.GetUInt();
    for (int Dsc=0; Dsc<Dscs; Dsc++) {
        if (DscBSet%2) {
            AddSplitVal(0, TTbVal(Dsc));
        }
        else {
            AddSplitVal(1, TTbVal(Dsc));
        }
        DscBSet/=2;
    }
}
PTb TTb::LoadTxtTab(const TStr& FNm, const PTb& Tb){
  // open file
  PSIn SIn=TFIn::New(FNm);
  TILx Lx(SIn, TFSet()|iloTabSep);

  // read variable names
  Lx.GetStr();
  bool IsTupNm=(Lx.UcStr=="NAME")||(Lx.UcStr=="ID");
  if (IsTupNm){Lx.GetSym(syTab); Lx.GetStr();}
  do {
    PTbVarType VarType=PTbVarType(new TTbVarType());
    PTbVar Var=PTbVar(new TGTbVar(Lx.Str, VarType));
    Tb->AddVar(Var);
    if (Lx.GetSym(syTab, syEoln, syEof)==syTab){
      Lx.GetSym(syStr);}
  } while (Lx.Sym==syStr);

  // read tuples
  if (Lx.Sym!=syEof){
    Lx.GetSym(syStr, syEof);}
  while (Lx.Sym!=syEof){
    int TupN;
    if (IsTupNm){
      TupN=Tb->AddTup(Lx.GetSymStr());
      Lx.GetSym(syTab); Lx.GetStr();}
    else {TupN=Tb->AddTup();}
    for (int VarN=0; VarN<Tb->GetVars(); VarN++){
      if (VarN>0){Lx.GetSym(syTab); Lx.GetStr();}
      if (Lx.Str=='?'){Tb->PutVal(TupN, VarN, TTbVal(tvtUnknw));}
      else if (Lx.Str=='*'){Tb->PutVal(TupN, VarN, TTbVal(tvtUnimp));}
      else if (Lx.Str=='/'){Tb->PutVal(TupN, VarN, TTbVal(tvtUnapp));}
      else {
        double Flt;
        if (TStr(Lx.Str).IsFlt(Flt)){
          Tb->PutFlt(TupN, VarN, Flt);
        } else {
          Tb->PutDsc(TupN, VarN, Lx.Str);
        }
      }
    }
    //printf("Tups: %d\r", Tb->GetTups());
    Lx.GetSym(syEoln, syEof);
    while (Lx.Sym==syEoln){Lx.GetSym(syStr, syEoln, syEof);}
  }
  Tb->DefVarTypes();
  return Tb;
}
Example #4
0
/////////////////////////////////////////////////
// Yahoo-Value-Retriever
bool TYValRet::FNextAttrN(int& AttrP, int& AttrN, TTbVal& AttrVal) const {
  bool IsFNext; double WordFq; double WordPrb;
  do {
    IsFNext=WordDs->FNextWordId(AttrP, AttrN, WordFq, WordPrb);
    if ((IsFNext)&&(WordPrb>MnWordPrb)){AttrVal=TTbVal(WordFq); return true;}
  } while (IsFNext);
  return false;
}
TTbVal TTbVarType::GetVal(const TTbVal& Val){
  Assert(AlwVTSet.In(Val.GetValTag()));
  switch (Val.GetValTag()){
    case tvtUnknw: case tvtUnimp: case tvtUnapp: return Val;
    case tvtDsc: return GetDscVal(Val.GetDsc());
    case tvtFlt: return GetFltVal(Val.GetFlt());
    default: Fail; return TTbVal();
  }
}
TTbVal TTbVarType::GetFltVal(const double& Flt){
  Assert(AlwVTSet.In(tvtFlt));
  if (DefP || FixVTSet.In(tvtFlt)){
    Assert((double(MnFlt)<=Flt)&&(Flt<=double(MxFlt)));
  } else {
    MnFlt=TFlt::GetMn(MnFlt, Flt); MxFlt=TFlt::GetMx(MxFlt, Flt);
  }
  return TTbVal(Flt);
}
PTb TTb::LoadTxtCsv(const TStr& FNm, const PTb& Tb){
  // open file
  PSIn SIn=TFIn::New(FNm);
  TILx Lx(SIn, TFSet()|iloRetEoln|iloSigNum|iloUniStr);

  // read variable names
  Lx.GetStr();
  bool IsTupNm=(Lx.UcStr=="NAME")||(Lx.UcStr=="ID");
  if (IsTupNm){Lx.GetSym(syComma); Lx.GetStr();}
  do {
    PTbVarType VarType=PTbVarType(new TTbVarType());
    PTbVar Var=PTbVar(new TGTbVar(Lx.Str, VarType));
    Tb->AddVar(Var);
    if (Lx.GetSym(syComma, syEoln, syEof)==syComma){
      Lx.GetSym(syStr);}
  } while (Lx.Sym==syStr);

  // read tuples
  TFSet ValSymSet=TFSet()|syQuestion|syAsterisk|sySlash|syFlt|syStr;
  if (Lx.Sym!=syEof){
    Lx.GetSym(TFSet(ValSymSet)|syEof);}
  while (Lx.Sym!=syEof){
    int TupN;
    if (IsTupNm){
      TupN=Tb->AddTup(Lx.GetSymStr());
      Lx.GetSym(syComma); Lx.GetSym(ValSymSet);}
    else {TupN=Tb->AddTup();}
    for (int VarN=0; VarN<Tb->GetVars(); VarN++){
      if (VarN>0){Lx.GetSym(syComma); Lx.GetSym(ValSymSet);}
      switch (Lx.Sym){
        case syQuestion: Tb->PutVal(TupN, VarN, TTbVal(tvtUnknw)); break;
        case syAsterisk: Tb->PutVal(TupN, VarN, TTbVal(tvtUnimp)); break;
        case sySlash: Tb->PutVal(TupN, VarN, TTbVal(tvtUnapp)); break;
        case syStr: Tb->PutDsc(TupN, VarN, Lx.Str); break;
        case syFlt: Tb->PutFlt(TupN, VarN, Lx.Flt); break;
        default: Fail;
      }
    }
    Lx.GetSym(syEoln, syEof);
    while (Lx.Sym==syEoln){Lx.GetSym(TFSet(ValSymSet)|syEoln|syEof);}
  }
  Tb->DefVarTypes();
  return Tb;
}
Example #8
0
TMgId3::TSplit TMgId3::GetBestSplit(const PExSet&){
  TSplit BestSplit, Split;
  for (int AttrN=0; AttrN<GetDm()->GetAttrs(); AttrN++){
    TTbValSetExp& TbValSetExp=*new TTbValSetExp(loOr);
    PTbValSet TbValSet(&TbValSetExp);
    for (int Dsc=0; Dsc<GetDm()->GetAttr(AttrN)->GetVarType()->GetDscs(); Dsc++){
      TbValSetExp.Add(PTbValSet(new TTbValSetSel(TTbValSetSel(TTbVal(Dsc)))));}
    TSplit Split(AttrN, TbValSet, 0);
    if ((AttrN==0)||(Split.GetErr()<BestSplit.GetErr())){BestSplit=Split;}
  }
  return BestSplit;
}
TTbVal TTbVarType::GetIntDscVal(const int& Int){
  Assert(AlwVTSet.In(tvtDsc)&&DscIntP&&(MnIntDsc<=Int)&&(Int<=MxIntDsc));
  return TTbVal(Int-MnIntDsc);
}
TTbVal TTbVarType::GetDscVal(const int& Dsc){
  Assert(AlwVTSet.In(tvtDsc)&&(0<=Dsc)&&(Dsc<GetDscs()));
  return TTbVal(Dsc);
}