@@ -36,8 +36,8 @@ class SensorDataConverter {
3636 int numThreads;
3737 bool usePrototype;
3838 std::set<std::string> notEmptyColumns; // Columns that must not be empty
39- std::map<std::string, std::string> onlyValueFilters; // Column:value pairs for filtering (include)
40- std::map<std::string, std::string> excludeValueFilters; // Column:value pairs for filtering (exclude)
39+ std::map<std::string, std::set<std:: string> > onlyValueFilters; // Column:value pairs for filtering (include)
40+ std::map<std::string, std::set<std:: string> > excludeValueFilters; // Column:value pairs for filtering (exclude)
4141 int verbosity; // 0 = normal, 1 = verbose (-v), 2 = very verbose (-V)
4242 bool removeErrors; // Remove error readings (e.g., DS18B20 temperature = 85)
4343 bool removeWhitespace; // Remove extra whitespace from output (compact format)
@@ -430,13 +430,13 @@ class SensorDataConverter {
430430 // Check value filters (include)
431431 for (const auto & filter : onlyValueFilters) {
432432 auto it = reading.find (filter.first );
433- if (it == reading.end () || it->second != filter. second ) {
433+ if (it == reading.end () || filter. second . count ( it->second ) == 0 ) {
434434 if (verbosity >= 2 ) {
435435 if (it == reading.end ()) {
436436 std::cerr << " Skipping row: missing column '" << filter.first << " '" << std::endl;
437437 } else {
438438 std::cerr << " Skipping row: column '" << filter.first << " ' has value '"
439- << it->second << " ' (expected ' " << filter. second << " ' )" << std::endl;
439+ << it->second << " ' (not in allowed values )" << std::endl;
440440 }
441441 }
442442 return false ;
@@ -446,10 +446,10 @@ class SensorDataConverter {
446446 // Check value filters (exclude)
447447 for (const auto & filter : excludeValueFilters) {
448448 auto it = reading.find (filter.first );
449- if (it != reading.end () && it->second == filter. second ) {
449+ if (it != reading.end () && filter. second . count ( it->second ) > 0 ) {
450450 if (verbosity >= 2 ) {
451451 std::cerr << " Skipping row: column '" << filter.first << " ' has excluded value '"
452- << filter. second << " '" << std::endl;
452+ << it-> second << " '" << std::endl;
453453 }
454454 return false ;
455455 }
@@ -637,7 +637,7 @@ class SensorDataConverter {
637637 }
638638 std::string column = filter.substr (0 , colonPos);
639639 std::string value = filter.substr (colonPos + 1 );
640- onlyValueFilters[column] = value;
640+ onlyValueFilters[column]. insert ( value) ;
641641 } else {
642642 std::cerr << " Error: " << arg << " requires an argument" << std::endl;
643643 exit (1 );
@@ -653,7 +653,7 @@ class SensorDataConverter {
653653 }
654654 std::string column = filter.substr (0 , colonPos);
655655 std::string value = filter.substr (colonPos + 1 );
656- excludeValueFilters[column] = value;
656+ excludeValueFilters[column]. insert ( value) ;
657657 } else {
658658 std::cerr << " Error: " << arg << " requires an argument" << std::endl;
659659 exit (1 );
@@ -882,12 +882,26 @@ class SensorDataConverter {
882882 std::cerr << std::endl;
883883 }
884884 if (!onlyValueFilters.empty ()) {
885- std::cerr << " Value filters: " ;
885+ std::cerr << " Value filters (include) : " ;
886886 bool first = true ;
887887 for (const auto & filter : onlyValueFilters) {
888- if (!first) std::cerr << " , " ;
889- std::cerr << filter.first << " =" << filter.second ;
890- first = false ;
888+ for (const auto & val : filter.second ) {
889+ if (!first) std::cerr << " , " ;
890+ std::cerr << filter.first << " =" << val;
891+ first = false ;
892+ }
893+ }
894+ std::cerr << std::endl;
895+ }
896+ if (!excludeValueFilters.empty ()) {
897+ std::cerr << " Value filters (exclude): " ;
898+ bool first = true ;
899+ for (const auto & filter : excludeValueFilters) {
900+ for (const auto & val : filter.second ) {
901+ if (!first) std::cerr << " , " ;
902+ std::cerr << filter.first << " =" << val;
903+ first = false ;
904+ }
891905 }
892906 std::cerr << std::endl;
893907 }
0 commit comments