Changeset 7666:4a2f78e55e8d in orange


Ignore:
Timestamp:
02/14/11 13:04:24 (3 years ago)
Author:
markotoplak
Branch:
default
Convert:
dd5f8a64ee9861fed50fc30041ca6dca506d6631
Message:

readTabAtom reuses the atom object. Do not scan throug values of string- or float- variables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orange/tabdelim.cpp

    r7665 r7666  
    435435   
    436436  /* Check whether this is a string attribute: 
    437      - has more at least 20 values 
     437     - has more than 20 values 
    438438     - less than half of the values appear more than once */ 
    439439  if ((status==0) && (desc.values.size() > 20)) { 
     
    503503      if (!*atb) 
    504504        continue; 
    505          
    506       const char *ceni = ai->c_str(); 
    507       if (   !*ceni 
    508           || !ceni[1] && ((*ceni=='?') || (*ceni=='.') || (*ceni=='~') || (*ceni=='*')) 
    509           || (*ai == "NA") || (DC && (*ai == DC)) || (DK && (*ai == DK))) 
    510          continue; 
    511  
    512       map<string, int>::iterator vf = di->values.lower_bound(*ai); 
    513       if ((vf != di->values.end()) && (vf->first == *ai)) { 
    514         vf->second++; 
    515       } 
    516       else { 
    517         di->values.insert(vf, make_pair(*ai, 1)); 
     505    
     506      //skip the attribute if it is a FLOATVAR or STRINGVAR 
     507      if ((di->varType != TValue::FLOATVAR) && (di->varType != STRINGVAR)) { 
     508 
     509        const char *ceni = ai->c_str(); 
     510        if (   !*ceni 
     511            || !ceni[1] && ((*ceni=='?') || (*ceni=='.') || (*ceni=='~') || (*ceni=='*')) 
     512            || (*ai == "NA") || (DC && (*ai == DC)) || (DK && (*ai == DK))) 
     513           continue; 
     514 
     515        map<string, int>::iterator vf = di->values.lower_bound(*ai); 
     516        if ((vf != di->values.end()) && (vf->first == *ai)) { 
     517          vf->second++; 
     518        } 
     519        else { 
     520          di->values.insert(vf, make_pair(*ai, 1)); 
     521        } 
    518522      } 
    519523    } 
     
    796800      case '\t': 
    797801        atoms.push_back(trim(atom)); 
    798         atom = string(); 
     802        atom.clear(); 
    799803        break; 
    800804 
     
    802806        if (csv) { 
    803807          atoms.push_back(trim(atom)); 
    804           atom = string(); 
     808          atom.clear(); 
    805809          break; 
    806810        } 
Note: See TracChangeset for help on using the changeset viewer.