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]); } }
///////////////////////////////////////////////// // 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; }
///////////////////////////////////////////////// // 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; }
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); }