Initial commit

This commit is contained in:
xp986
2025-10-08 23:56:01 -05:00
commit c6654fbcc8
3 changed files with 194 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <cctype>
#include <iterator>
int main(int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " <inputfile> <outputfile>\n";
return 1;
}
// Read file into buffer
std::ifstream infile(argv[1], std::ios::binary);
if (!infile) {
std::cerr << "Error opening input file.\n";
return 1;
}
std::vector<char> buffer((std::istreambuf_iterator<char>(infile)),
std::istreambuf_iterator<char>());
infile.close();
if (buffer.empty()) {
std::cerr << "Input file is empty.\n";
return 1;
}
// 1) Remove all ASCII 155 (0x9B)
buffer.erase(std::remove_if(buffer.begin(), buffer.end(),
[](char c){ return static_cast<unsigned char>(c) == 155 || (c) == 62; }),
buffer.end());
// 2) Remove form feed (0x0C) from the last 16 bytes only
if (!buffer.empty()) {
size_t start = (buffer.size() > 16) ? buffer.size() - 16 : 0;
buffer.erase(std::remove(buffer.begin() + start, buffer.end(), (char)12), buffer.end());
}
// 3) Remove one space preceding every occurrence of: digit '/' space digit
// i.e. remove the single space immediately before the pattern "x/ x" (x = digit)
std::vector<char> out;
out.reserve(buffer.size());
const size_t n = buffer.size();
for (size_t i = 0; i < n; ++i) {
// If current char is a space and the next 4 characters exist and match:
// [digit] '/' ' ' [digit] starting at i+1 -> remove this current space (skip it)
if (buffer[i] == ' ' && i + 4 < n &&
std::isdigit(static_cast<unsigned char>(buffer[i + 1])) &&
buffer[i + 2] == '/' &&
buffer[i + 3] == ' ' &&
std::isdigit(static_cast<unsigned char>(buffer[i + 4]))) {
// skip this single space (do not push it to out)
continue;
}
// Otherwise, keep the character
out.push_back(buffer[i]);
}
// 4) Write output
std::ofstream outfile(argv[2], std::ios::binary);
if (!outfile) {
std::cerr << "Error opening output file.\n";
return 1;
}
if (!out.empty()) {
outfile.write(out.data(), out.size());
}
outfile.close();
return 0;
}