Changeset 2831 in Sophya for trunk/SophyaLib/HiStats/basedtable.cc
- Timestamp:
- Nov 8, 2005, 5:16:44 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/HiStats/basedtable.cc
r2827 r2831 11 11 */ 12 12 13 /*! 14 if fgl == true , return LongForm string 15 \verbatim 16 ---------------------------------------------- 17 FieldType ShortForm LongForm 18 ---------------------------------------------- 19 IntegerField I Integer 20 LongField L Long Integer 21 FloatField F Float 22 DoubleField D Double 23 ComplexField Zx4 Complex 24 DoubleComplexField Zx8 DoubleComplex 25 StringField S String 26 DateTimeField T DateTime 27 ---------------------------------------------- 28 \endverbatim 29 */ 13 30 string BaseDataTable::ColTypeToString(FieldType ft, bool fgl) 14 31 { … … 43 60 else rs = "S"; 44 61 break; 45 case Date Field :62 case DateTimeField : 46 63 if (fgl) rs = "DateTime"; 47 64 else rs = "T"; … … 52 69 } 53 70 return rs; 71 } 72 73 BaseDataTable::FieldType BaseDataTable::StringToColType(string const & sctyp) 74 { 75 if ( (sctyp == "Integer") || (sctyp == "I") ) return IntegerField; 76 else if ( (sctyp == "Long Integer") || (sctyp == "L") ) return LongField; 77 else if ( (sctyp == "Float") || (sctyp == "F") ) return FloatField; 78 else if ( (sctyp == "Double") || (sctyp == "D") ) return DoubleField; 79 else if ( (sctyp == "Complex") || (sctyp == "Zx4") ) return ComplexField; 80 else if ( (sctyp == "DoubleComplex") || (sctyp == "Zx8") || (sctyp == "Z") ) 81 return DoubleComplexField; 82 else if ( (sctyp == "String") || (sctyp == "S") ) return StringField; 83 else if ( (sctyp == "DateTime") || (sctyp == "T") ) return DateTimeField; 84 else return DoubleField; 54 85 } 55 86 … … 252 283 } 253 284 285 #define BADVAL -1.e39 286 287 TVector<r_8> BaseDataTable::GetColumnD(sa_size_t k) const 288 { 289 if ((k < 0) || (k >= NVar())) 290 throw RangeCheckError("BaseDataTable::GetColumnD() out of range column index k"); 291 sa_size_t sk = mNames[k].ser; 292 sa_size_t i = 0; 293 TVector<r_8> rv(NEntry()); 294 295 for (sa_size_t is=0; is<NbSegments(); is++) { 296 switch (mNames[k].type) { 297 case IntegerField : 298 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 299 rv(i) = mIColsP[sk]->GetCstSegment(is)[j]; 300 break; 301 case LongField : 302 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 303 rv(i) = mLColsP[sk]->GetCstSegment(is)[j]; 304 break; 305 case FloatField : 306 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 307 rv(i) = mFColsP[sk]->GetCstSegment(is)[j]; 308 break; 309 case DoubleField : 310 case DateTimeField : 311 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 312 rv(i) = mDColsP[sk]->GetCstSegment(is)[j]; 313 break; 314 case ComplexField : 315 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 316 rv(i) = mYColsP[sk]->GetCstSegment(is)[j].real(); 317 break; 318 case DoubleComplexField : 319 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 320 rv(i) = mZColsP[sk]->GetCstSegment(is)[j].real(); 321 break; 322 case StringField : 323 for(sa_size_t j=0; j<SegmentSize(); j++,i++) 324 rv = atof(mSColsP[sk]->GetCstSegment(is)[j].c_str()); 325 break; 326 default: 327 for(sa_size_t j=0; j<SegmentSize(); j++,i++) rv(i) = BADVAL; 328 break; 329 } 330 } 331 return rv ; 332 } 333 254 334 void BaseDataTable::CopyMerge(BaseDataTable const& a, bool cp) 255 335 { … … 276 356 } 277 357 278 void BaseDataTable::Print(int num, int nmax) const 279 { 280 // A faire 281 return; 358 /*! 359 Formatted (text) output of the table, for lines lstart <= l_index < lend , with step lstep 360 \param os : output stream (formatted output) 361 \param lstart : start row (line) index 362 \param lend : end row (line) index 363 \param lstep : row index increment 364 */ 365 ostream& BaseDataTable::Print(ostream& os, sa_size_t lstart, sa_size_t lend, sa_size_t lstep) const 366 { 367 os << "##### BaseDataTable::Print() - Table(NRow=" << NEntry() << " , NCol=" 368 << NVar() << ") ##### " << endl; 369 os << "#! " ; 370 for (size_t i=0; i<NVar(); i++) { 371 string nom = mNames[i].nom; 372 nom += ':'; nom += ColTypeToString(mNames[i].type); 373 os << setw(12) << nom << " "; 374 } 375 os << endl; 376 os << "##########################################################################" << endl; 377 for (sa_size_t l=lstart; l<lend; l+=lstep) 378 os << TableRowToString(l, true) << endl; 379 return os; 282 380 } 283 381 … … 312 410 } 313 411 314 //! NOT YET IMPLEMENTED ! - Fills table from an ascii file 315 int BaseDataTable::FillFromASCIIFile(string const& fn) 316 // Remplit le ntuple a partir d'un fichier ASCII. 317 // Renvoie le nombre de lignes ajoutees. 318 { 319 // a faire 320 return(0); 412 //! Fills table from an ascii (text) file 413 /* 414 Return number of non empt lines (added to table) 415 \param is : input ascii (text) stream 416 \param clm : Lines starting with clm are ignored (comments) 417 \param sep : separator between different fields (columns) 418 */ 419 sa_size_t BaseDataTable::FillFromASCIIFile(istream& is, char clm, const char* sep) 420 { 421 string str; 422 if (mVarMTV == NULL) mVarMTV = new MuTyV[NVar()]; 423 sa_size_t iv, nl; 424 nl = 0; 425 while (!is.eof()) { 426 str = ""; 427 getline(is, str); 428 if (is.good() || is.eof()) { 429 size_t l = str.length(); 430 if ((l == 0) || (str[0]==clm)) continue; 431 for(iv=0; iv<NVar(); iv++) mVarMTV[iv] = 0.; 432 iv = 0; 433 size_t q = 0; 434 size_t p = 0; 435 while ( (q < l) && (iv < NVar()) ) { 436 p = str.find_first_not_of(sep,q); 437 if (p >= l) break; 438 if (str[p] == '\'') { // Decodage d'un string 439 q = str.find('\'',p+1); 440 if (q < l) { 441 mVarMTV[iv] = str.substr(p+1,q-p-1); 442 q++; 443 } 444 else mVarMTV[iv] = str.substr(p+1,l-p-1); 445 iv++; 446 } 447 else { 448 q = str.find_first_of(sep,p); 449 if (q > l) q = l; 450 mVarMTV[iv] = str.substr(p,q-p); 451 iv++; 452 } 453 if (mNames[iv-1].type == DateTimeField) { 454 string tts = (string)mVarMTV[iv-1]; 455 mVarMTV[iv-1] = TimeStamp(tts); 456 } 457 } 458 AddLine(mVarMTV); 459 nl++; 460 } 461 } // Fin boucle lignes fichier 462 cout << "BaseDataTable::FillFromASCIIFile()/Info: " << nl << " lines decoded from stream " << endl; 463 return(nl); 321 464 } 322 465 … … 364 507 } 365 508 366 #define BADVAL -1.e39367 509 368 510 r_8 BaseDataTable::GetCell(sa_size_t n, sa_size_t k) const … … 388 530 break; 389 531 case DoubleField : 390 case Date Field :391 rv = mDColsP[sk]->GetCstSegment(bid)[off];532 case DateTimeField : 533 rv = mDColsP[sk]->GetCstSegment(bid)[off]; 392 534 break; 393 535 case ComplexField : … … 445 587 rv = mSColsP[sk]->GetCstSegment(bid)[off]; 446 588 break; 589 case DateTimeField : 590 rv = TimeStamp(mDColsP[sk]->GetCstSegment(bid)[off]); 591 break; 447 592 default: 448 593 rv = " "; … … 511 656 break; 512 657 case DoubleField : 658 case DateTimeField : 513 659 for(size_t is=0; is<mDColsP[sk]->NbSegments(); is++) { 514 660 const r_8* sp = mDColsP[sk]->GetCstSegment(is); … … 608 754 for(int i=0; i<NVar(); i++) { 609 755 s = mNames[i].nom; 610 s += ' ';611 756 size_t l = s.length(); 612 for(size_t ii=l; ii<10; ii++) s += ' '; 757 for(size_t ii=l; ii<12; ii++) s += ' '; 758 if (i > 0) rets += ' '; 613 759 rets += s; 614 760 } … … 616 762 } 617 763 618 619 string BaseDataTable::LineToString(sa_size_t n) const 764 /*! 765 Return a table row (line) as a string 766 \sa TableRowToString() 767 */ 768 string BaseDataTable::LineToString(sa_size_t n) const 769 { 770 return TableRowToString(n, false); 771 } 772 773 /*! 774 \param n : table row index ( 0 ... NEntry()-1) 775 \param qstr : if true , enclose strings in quotes '' 776 \param sep : separates fields using \b sep 777 \param fw : minimum field width 778 */ 779 string BaseDataTable::TableRowToString(sa_size_t n, bool qstr, 780 const char* sep, int fw) const 620 781 { 621 782 if ((n < 0) || (n >= NEntry())) … … 648 809 case StringField : 649 810 rv = mSColsP[sk]->GetCstSegment(bid)[off]; 650 break; 811 break; 812 case DateTimeField : 813 rv = TimeStamp(mDColsP[sk]->GetCstSegment(bid)[off]); 814 break; 651 815 default: 652 816 rv = " "; 653 817 break; 654 818 } 655 string s = (string)rv; 656 s += ' '; 819 string s; 820 if ( (mNames[k].type == StringField) && (qstr) ) { 821 s = '\''; s += (string)rv; s += '\''; 822 } 823 else s= (string)rv; 657 824 size_t l = s.length(); 658 for(size_t ii=l; ii<10; ii++) s += ' '; 825 for(size_t ii=l; ii<fw; ii++) s += ' '; 826 if (k > 0) rs += sep; 659 827 rs += s; 660 828 }
Note:
See TracChangeset
for help on using the changeset viewer.