42_CPP01/ex04/src/main.cpp
2023-07-31 14:45:04 +02:00

68 lines
1.3 KiB
C++

#include <cstddef>
#include <ostream>
#include <string>
#include <iostream>
#include <fstream>
#include <cstring>
static int get_text(const char *path, std::string &text)
{
std::ifstream file(path);
if (!file.is_open())
{
std::cerr << "sed: file error" << std::endl;
return (1);
}
std::getline(file, text, '\0');
file.close();
return (0);
}
static std::string replace_text(const char *text, const char *text_to_replace, const std::string &replacement_text)
{
size_t i;
size_t len;
std::string out;
len = std::strlen(text_to_replace);
i = 0;
while (text[i] != '\0')
{
if (len != 0 && std::strncmp(text + i, text_to_replace, len) == 0)
{
out += replacement_text;
i += len;
}
else
{
out += text[i];
i++;
}
}
return (out);
}
int main(int ac, char **av)
{
std::string text;
std::string replaced;
if (!(ac >= 4))
{
std::cerr << "Sed: missing argument" << std::endl
<< "syntax: ./sed file text_to_replace replacement_text" << std::endl;
return (1);
}
if (get_text(av[1], text))
return (2);
replaced = replace_text(text.c_str(), av[2], av[3]);
std::ofstream file((std::string(av[1]) + std::string(".replace")).c_str());
if (!file.is_open())
{
std::cerr << "sed: file error" << std::endl;
return (1);
}
file << replaced << std::endl;
}