Compare commits

...

8 Commits

Author SHA1 Message Date
xp986
c8ea15f311 Removed unneccessary files 2025-10-09 10:22:22 -05:00
xp986
b93cf0bc1b Merge remote-tracking branch 'ReportTruncate-Robinson' into robinson 2025-10-09 10:08:58 -05:00
xp986
70c9e35ae4 Missed a reference to BBGYRO 2025-10-09 01:31:27 -05:00
xp986
55ac790b43 Switch to alameda code, with search for BBGYRS instead of BBGYRO 2025-10-09 01:21:30 -05:00
xp986
2647432b04 Fixed line endings. 2025-10-09 00:30:45 -05:00
xp986
28f6c6d46c Removed adding newlines to non-daily reports. 2025-10-09 00:18:55 -05:00
ee5368cf19 Initial commit 2025-10-08 23:53:59 -05:00
xp986
bed1c7f20d Initail commit with working version. 2025-10-08 23:37:25 -05:00
7 changed files with 2 additions and 772 deletions

View File

@@ -1,3 +1,3 @@
# ReportTruncate-Alameda # ReportTruncate-Robinson
Truncates the daily report from the BonAppetit system. Modifications for Alameda store. Truncates the daily report from the BonAppetit system. Modifications for the Robinson store.

0
ReportTruncate_0.6.cpp → ReportTruncate-Alameda.cpp Normal file → Executable file
View File

View File

@@ -1,148 +0,0 @@
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <regex>
#include <algorithm>
static const std::regex number_regex_full(R"(\d+)");
static const std::regex number_regex_1to3(R"(\b\d{1,3}\b)");
// Helper: find first number in 's', put into out, return true if found
bool find_first_number_in_line(const std::string &s, int &out, const std::regex &rx) {
std::smatch m;
if (std::regex_search(s, m, rx)) {
out = std::stoi(m.str());
return true;
}
return false;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " <inputfile> <outputfile>\n";
return 1;
}
std::ifstream infile(argv[1]);
if (!infile) {
std::cerr << "Error opening input file.\n";
return 1;
}
std::ofstream outfile(argv[2]);
if (!outfile) {
std::cerr << "Error opening output file.\n";
return 1;
}
// Read entire file into memory
std::vector<std::string> lines;
std::string line;
while (std::getline(infile, line)) {
lines.push_back(line);
}
const std::string marker = "F.L.C.M. %";
// === 1) Find marker index (for truncation) ===
bool marker_found = false;
size_t marker_index = 0;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find(marker) != std::string::npos) {
marker_found = true;
marker_index = i;
break;
}
}
if (!marker_found) {
for (const auto &l : lines) outfile << l << '\n';
return 0;
}
// === 2) Extract gyros (first number on SAME line as "BBGYRO") ===
int gyros = 0;
bool gyros_found = false;
size_t bbgyro_index = std::string::npos;
const std::string bbgyro_token = "BBGYRO";
for (size_t i = 0; i < lines.size(); ++i) {
size_t pos = lines[i].find(bbgyro_token);
if (pos != std::string::npos) {
bbgyro_index = i;
std::string tail = lines[i].substr(pos + bbgyro_token.size());
if (find_first_number_in_line(tail, gyros, number_regex_full)) {
gyros_found = true;
}
break; // only first occurrence matters
}
}
// === 3) Extract total_subs (13 digit number after 'Ä' line) ===
int total_subs = 0;
bool total_found = false;
auto find_total_after_start_index = [&](size_t start_index)->bool {
for (size_t j = start_index; j < lines.size(); ++j) {
size_t countA = 0;
for (u_char c : lines[j]) if (c == u'Ä') ++countA;
if (countA >= 10) {
// look in the next line and up to 3 lines after if needed
for (size_t k = j + 1; k < lines.size(); ++k) {
if (find_first_number_in_line(lines[k], total_subs, number_regex_1to3)) {
return true;
}
}
return false;
}
}
return false;
};
if (gyros_found) {
total_found = find_total_after_start_index(bbgyro_index + 1);
} else {
// BBGYRO not found -> find 2nd occurrence of "SUBS" then start from there
int subs_count = 0;
size_t subs_index = std::string::npos;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find("SUBS") != std::string::npos) {
subs_count++;
if (subs_count == 2) {
subs_index = i;
break;
}
}
}
if (subs_index != std::string::npos) {
total_found = find_total_after_start_index(subs_index + 1);
}
}
// === 4) Truncate to include up to and including the marker line ===
std::vector<std::string> truncated(lines.begin(), lines.begin() + marker_index + 1);
// === 5) Insert "TOTAL SUBS --- <diff>" immediately before first form feed ===
int diff = total_subs - gyros;
const std::string insert_line = "\n\n TOTAL SUBS --- " + std::to_string(diff);
bool inserted = false;
for (const auto &l : truncated) {
size_t ff_pos = l.find('\f');
if (!inserted && ff_pos != std::string::npos) {
// insert directly before first form feed
std::string modified = l.substr(0, ff_pos) + insert_line + l.substr(ff_pos);
outfile << modified << '\n';
inserted = true;
} else {
outfile << l << '\n';
}
}
if (!inserted) {
outfile << insert_line << '\n';
}
return 0;
}

View File

@@ -1,143 +0,0 @@
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <regex>
#include <algorithm>
static const std::regex number_regex_full(R"(\d+)");
static const std::regex number_regex_1to3(R"(\b\d{1,3}\b)");
static const std::regex exact_24_A(R"((?<!Ä)Ä{24}(?!Ä))");
bool find_first_number_in_line(const std::string &s, int &out, const std::regex &rx) {
std::smatch m;
if (std::regex_search(s, m, rx)) {
out = std::stoi(m.str());
return true;
}
return false;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " <inputfile> <outputfile>\n";
return 1;
}
std::ifstream infile(argv[1]);
if (!infile) {
std::cerr << "Error opening input file.\n";
return 1;
}
std::ofstream outfile(argv[2]);
if (!outfile) {
std::cerr << "Error opening output file.\n";
return 1;
}
std::vector<std::string> lines;
std::string line;
while (std::getline(infile, line)) {
lines.push_back(line);
}
const std::string marker = "F.L.C.M. %";
// === 1) Find marker index ===
bool marker_found = false;
size_t marker_index = 0;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find(marker) != std::string::npos) {
marker_found = true;
marker_index = i;
break;
}
}
if (!marker_found) {
for (const auto &l : lines) outfile << l << '\n';
return 0;
}
// === 2) Extract gyros from "BBGYRO" line ===
int gyros = 0;
bool gyros_found = false;
size_t bbgyro_index = std::string::npos;
const std::string bbgyro_token = "BBGYRO";
for (size_t i = 0; i < lines.size(); ++i) {
size_t pos = lines[i].find(bbgyro_token);
if (pos != std::string::npos) {
bbgyro_index = i;
std::string tail = lines[i].substr(pos + bbgyro_token.size());
if (find_first_number_in_line(tail, gyros, number_regex_full)) {
gyros_found = true;
}
break;
}
}
// === 3) Extract total_subs ===
int total_subs = 0;
bool total_found = false;
auto find_total_after_start_index = [&](size_t start_index)->bool {
for (size_t j = start_index; j < lines.size(); ++j) {
if (std::regex_search(lines[j], exact_24_A)) {
if (j + 1 < lines.size()) {
if (find_first_number_in_line(lines[j + 1], total_subs, number_regex_1to3)) {
return true;
}
}
}
}
return false;
};
if (gyros_found) {
total_found = find_total_after_start_index(bbgyro_index + 1);
} else {
// Fallback: second "SUBS"
int subs_count = 0;
size_t subs_index = std::string::npos;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find("SUBS") != std::string::npos) {
subs_count++;
if (subs_count == 2) {
subs_index = i;
break;
}
}
}
if (subs_index != std::string::npos) {
total_found = find_total_after_start_index(subs_index + 1);
}
}
// === 4) Truncate document after the marker ===
std::vector<std::string> truncated(lines.begin(), lines.begin() + marker_index + 1);
// === 5) Insert TOTAL SUBS --- diff before first form feed ===
int diff = total_subs - gyros;
const std::string insert_line = "\n\n TOTAL SUBS --- " + std::to_string(diff);
bool inserted = false;
for (const auto &l : truncated) {
size_t ff_pos = l.find('\f');
if (!inserted && ff_pos != std::string::npos) {
std::string modified = l.substr(0, ff_pos) + insert_line + l.substr(ff_pos);
outfile << modified << '\n';
inserted = true;
} else {
outfile << l << '\n';
}
}
if (!inserted) {
outfile << insert_line << '\n';
}
return 0;
}

View File

@@ -1,157 +0,0 @@
#include <iostream>
#include <fstream>
#include <string>
#include <sys/types.h>
#include <vector>
#include <regex>
#include <algorithm>
static const std::regex number_regex_full(R"(\d+)");
static const std::regex number_regex_1to3(R"(\b\d{1,3}\b)");
// Find the first number in a line using the given regex
bool find_first_number_in_line(const std::string &s, int &out, const std::regex &rx) {
std::smatch m;
if (std::regex_search(s, m, rx)) {
out = std::stoi(m.str());
return true;
}
return false;
}
// Check if a line contains exactly 24 consecutive 'Ä'
bool has_exactly_24_A(const std::string &s) {
int count = 0;
for (size_t i = 0; i <= s.size(); ++i) {
if (i < s.size() && s[i] == (char)196) {
count++;
} else {
if (count == 24) return true; // exact match found
count = 0; // reset counter
}
}
return false;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " <inputfile> <outputfile>\n";
return 1;
}
std::ifstream infile(argv[1]);
if (!infile) {
std::cerr << "Error opening input file.\n";
return 1;
}
std::ofstream outfile(argv[2]);
if (!outfile) {
std::cerr << "Error opening output file.\n";
return 1;
}
std::vector<std::string> lines;
std::string line;
while (std::getline(infile, line)) {
lines.push_back(line);
}
const std::string marker = "F.L.C.M. %";
// === 1) Find marker index ===
bool marker_found = false;
size_t marker_index = 0;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find(marker) != std::string::npos) {
marker_found = true;
marker_index = i;
break;
}
}
if (!marker_found) {
for (const auto &l : lines) outfile << l << '\n';
return 0;
}
// === 2) Extract gyros from "BBGYRO" line ===
int gyros = 0;
bool gyros_found = false;
size_t bbgyro_index = std::string::npos;
const std::string bbgyro_token = "BBGYRO";
for (size_t i = 0; i < lines.size(); ++i) {
size_t pos = lines[i].find(bbgyro_token);
if (pos != std::string::npos) {
bbgyro_index = i;
std::string tail = lines[i].substr(pos + bbgyro_token.size());
if (find_first_number_in_line(tail, gyros, number_regex_full)) {
gyros_found = true;
}
break;
}
}
// === 3) Extract total_subs ===
int total_subs = 0;
bool total_found = false;
auto find_total_after_start_index = [&](size_t start_index) -> bool {
for (size_t j = start_index; j < lines.size(); ++j) {
if (has_exactly_24_A(lines[j])) {
if (j + 1 < lines.size()) {
if (find_first_number_in_line(lines[j + 1], total_subs, number_regex_1to3)) {
return true;
}
}
}
}
return false;
};
if (gyros_found) {
total_found = find_total_after_start_index(bbgyro_index + 1);
} else {
// Fallback: second "SUBS"
int subs_count = 0;
size_t subs_index = std::string::npos;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find("SUBS") != std::string::npos) {
subs_count++;
if (subs_count == 2) {
subs_index = i;
break;
}
}
}
if (subs_index != std::string::npos) {
total_found = find_total_after_start_index(subs_index + 1);
}
}
// === 4) Truncate document after the marker ===
std::vector<std::string> truncated(lines.begin(), lines.begin() + marker_index + 1);
// === 5) Insert TOTAL SUBS --- diff before first form feed ===
int diff = total_subs - gyros;
const std::string insert_line = "\n\n TOTAL ROLLS (Total - Gyros) --- " + std::to_string(diff);
bool inserted = false;
for (const auto &l : truncated) {
size_t ff_pos = l.find('\f');
if (!inserted && ff_pos != std::string::npos) {
std::string modified = l.substr(0, ff_pos) + insert_line + l.substr(ff_pos);
outfile << modified << '\n';
inserted = true;
} else {
outfile << l << '\n';
}
}
if (!inserted) {
outfile << insert_line << '\n';
}
return 0;
}

View File

@@ -1,159 +0,0 @@
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <regex>
#include <algorithm>
static const std::regex number_regex_full(R"(\d+)");
static const std::regex number_regex_1to3(R"(\b\d{1,3}\b)");
// Find the first number in a line using the given regex
bool find_first_number_in_line(const std::string &s, int &out, const std::regex &rx) {
std::smatch m;
if (std::regex_search(s, m, rx)) {
out = std::stoi(m.str());
return true;
}
return false;
}
// Check if a line contains exactly 24 consecutive 'Ä'
bool has_exactly_24_A(const std::string &s) {
int count = 0;
for (size_t i = 0; i <= s.size(); ++i) {
if (i < s.size() && s[i] == (char)196) {
count++;
} else {
if (count == 24) return true; // exact match found
count = 0; // reset counter
}
}
return false;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " <inputfile> <outputfile>\n";
return 1;
}
std::ifstream infile(argv[1]);
if (!infile) {
std::cerr << "Error opening input file.\n";
return 1;
}
std::ofstream outfile(argv[2]);
if (!outfile) {
std::cerr << "Error opening output file.\n";
return 1;
}
std::vector<std::string> lines;
std::string line;
while (std::getline(infile, line)) {
lines.push_back(line);
}
const std::string marker = "F.L.C.M. %";
// === 1) Find marker index ===
bool marker_found = false;
size_t marker_index = 0;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find(marker) != std::string::npos) {
marker_found = true;
marker_index = i;
break;
}
}
if (!marker_found) {
for (const auto &l : lines) outfile << l << '\n';
return 0;
}
// === 2) Extract gyros from "BBGYRO" line ===
int gyros = 0;
bool gyros_found = false;
size_t bbgyro_index = std::string::npos;
const std::string bbgyro_token = "BBGYRO";
for (size_t i = 0; i < lines.size(); ++i) {
size_t pos = lines[i].find(bbgyro_token);
if (pos != std::string::npos) {
bbgyro_index = i;
std::string tail = lines[i].substr(pos + bbgyro_token.size());
if (find_first_number_in_line(tail, gyros, number_regex_full)) {
gyros_found = true;
}
break;
}
}
// === 3) Extract total_subs ===
int total_subs = 0;
auto find_total_after_start_index = [&](size_t start_index) -> bool {
for (size_t j = start_index; j < lines.size(); ++j) {
if (has_exactly_24_A(lines[j])) {
if (j + 1 < lines.size()) {
if (find_first_number_in_line(lines[j + 1], total_subs, number_regex_1to3)) {
return true;
}
}
}
}
return false;
};
if (gyros_found) {
find_total_after_start_index(bbgyro_index + 1);
} else {
// Fallback: second "SUBS"
int subs_count = 0;
size_t subs_index = std::string::npos;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find("SUBS") != std::string::npos) {
subs_count++;
if (subs_count == 2) {
subs_index = i;
break;
}
}
}
if (subs_index != std::string::npos) {
find_total_after_start_index(subs_index + 1);
}
}
// === 4) Truncate document after the marker ===
std::vector<std::string> truncated(lines.begin(), lines.begin() + marker_index + 1);
// === 5) Insert TOTAL SUBS --- diff before first form feed ===
int diff = total_subs - gyros;
const std::string insert_line = "\n\n ROLLS USED --- " + std::to_string(diff);
bool inserted = false;
for (const auto &l : truncated) {
size_t ff_pos = l.find('\f');
if (!inserted && ff_pos != std::string::npos) {
std::string modified = l.substr(0, ff_pos) + insert_line + l.substr(ff_pos);
outfile << modified << '\n';
inserted = true;
} else {
outfile << l << '\n';
}
}
if (!inserted) {
outfile << insert_line << '\n';
}
// === 6) Append a form feed to the very end of the truncated document ===
outfile << '\f';
return 0;
}

View File

@@ -1,163 +0,0 @@
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <regex>
#include <algorithm>
static const std::regex number_regex_full(R"(\d+)");
static const std::regex number_regex_1to3(R"(\b\d{1,3}\b)");
// Find the first number in a line using the given regex
bool find_first_number_in_line(const std::string &s, int &out, const std::regex &rx) {
std::smatch m;
if (std::regex_search(s, m, rx)) {
out = std::stoi(m.str());
return true;
}
return false;
}
// Check if a line contains exactly 24 consecutive '<27>'
bool has_exactly_24_A(const std::string &s) {
int count = 0;
for (size_t i = 0; i <= s.size(); ++i) {
if (i < s.size() && s[i] == (char)196) {
count++;
} else {
if (count == 24) return true; // exact match found
count = 0; // reset counter
}
}
return false;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " <inputfile> <outputfile>\n";
return 1;
}
std::ifstream infile(argv[1]);
if (!infile) {
std::cerr << "Error opening input file.\n";
return 1;
}
std::ofstream outfile(argv[2]);
if (!outfile) {
std::cerr << "Error opening output file.\n";
return 1;
}
std::vector<std::string> lines;
std::string line;
while (std::getline(infile, line)) {
lines.push_back(line);
}
const std::string marker = "F.L.C.M. %";
// === 1) Find marker index ===
bool marker_found = false;
size_t marker_index = 0;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find(marker) != std::string::npos) {
marker_found = true;
marker_index = i;
break;
}
}
if (!marker_found) {
for (const auto &l : lines) outfile << l << '\n';
return 0;
}
// === 2) Extract gyros from "BBGYRO" line ===
int gyros = 0;
bool gyros_found = false;
size_t bbgyro_index = std::string::npos;
const std::string bbgyro_token = "BBGYRO";
for (size_t i = 0; i < lines.size(); ++i) {
size_t pos = lines[i].find(bbgyro_token);
if (pos != std::string::npos) {
bbgyro_index = i;
std::string tail = lines[i].substr(pos + bbgyro_token.size());
if (find_first_number_in_line(tail, gyros, number_regex_full)) {
gyros_found = true;
}
break;
}
}
// === 3) Extract total_subs ===
int total_subs = 0;
auto find_total_after_start_index = [&](size_t start_index) -> bool {
for (size_t j = start_index; j < lines.size(); ++j) {
if (has_exactly_24_A(lines[j])) {
if (j + 1 < lines.size()) {
if (find_first_number_in_line(lines[j + 1], total_subs, number_regex_1to3)) {
return true;
}
}
}
}
return false;
};
if (gyros_found) {
find_total_after_start_index(bbgyro_index + 1);
} else {
// Fallback: second "SUBS"
int subs_count = 0;
size_t subs_index = std::string::npos;
for (size_t i = 0; i < lines.size(); ++i) {
if (lines[i].find("SUBS") != std::string::npos) {
subs_count++;
if (subs_count == 2) {
subs_index = i;
break;
}
}
}
if (subs_index != std::string::npos) {
find_total_after_start_index(subs_index + 1);
}
}
// === 4) Truncate document after the marker ===
std::vector<std::string> truncated(lines.begin(), lines.begin() + marker_index + 1);
// === 5) Insert TOTAL SUBS --- diff before first form feed ===
int diff = total_subs - gyros;
const std::string insert_line = "\n\n ROLLS USED --- " + std::to_string(diff);
bool inserted = false;
for (const auto &l : truncated) {
size_t ff_pos = l.find('\f');
if (!inserted && ff_pos != std::string::npos) {
std::string modified = l.substr(0, ff_pos) + insert_line + l.substr(ff_pos);
outfile << modified << '\n';
inserted = true;
} else {
outfile << l << '\n';
}
}
/*
if (!inserted) {
outfile << insert_line << '\n';
}
*/
if (inserted) {
// === 6) Append a form feed to the very end of the truncated document ===
outfile << '\f';
}
return 0;
}