Skip to content

Commit 9651aa0

Browse files
committed
Allow ultiple --exclude-value s
1 parent 336da00 commit 9651aa0

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

include/sensor_data_converter.h

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)