Initial commit

Already wrote the code but now checking in using source control
This commit is contained in:
kdeng00
2023-01-22 20:07:02 -05:00
commit 1333d543c7
5 changed files with 446 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
cmake_minimum_required(VERSION 3.10.2)
if(NOT DEFINED VCPKG_ROOT_PATH)
set(VCPKG_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/vcpkg)
endif()
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(TOOLCHAIN_PATH ${VCPKG_ROOT_PATH}/scripts/buildsystems/vcpkg.cmake)
set(CMAKE_TOOLCHAIN_FILE
"${TOOLCHAIN_PATH}"
CACHE STRING "Vcpkg toolchain file")
message("Using default toolchain file")
endif()
project(clean_files CXX)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
find_package(nlohmann_json CONFIG REQUIRED)
add_executable(clean_files src/main.cpp)
target_link_libraries(clean_files PRIVATE nlohmann_json nlohmann_json::nlohmann_json)
+31
View File
@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32630.192
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "clean_file", "clean_file.vcxproj", "{27781E3A-B63A-4158-A915-7A4A9DA6D187}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Debug|x64.ActiveCfg = Debug|x64
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Debug|x64.Build.0 = Debug|x64
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Debug|x86.ActiveCfg = Debug|Win32
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Debug|x86.Build.0 = Debug|Win32
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Release|x64.ActiveCfg = Release|x64
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Release|x64.Build.0 = Release|x64
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Release|x86.ActiveCfg = Release|Win32
{27781E3A-B63A-4158-A915-7A4A9DA6D187}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FD15EEA8-C66D-4B6F-A98D-227633B840D6}
EndGlobalSection
EndGlobal
+115
View File
@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>17.0</VCProjectVersion>
<ProjectGuid>{27781E3A-B63A-4158-A915-7A4A9DA6D187}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>$(ProjectDir)inculde;$(ProjectDir);$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(ProjectDir)inculde;$(ProjectDir);$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="src\main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\number_parser.hpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+232
View File
@@ -0,0 +1,232 @@
#ifndef NUMBER_PARSER_H_
#define NUMBER_PARSER_H_
#include <string>
#include <vector>
#include <set>
#include <iostream>
#include <algorithm>
#include <fstream>
#include "nlohmann/json.hpp"
namespace parser
{
class some_object
{
public:
some_object() = default;
some_object(std::string value) :
value(value)
{
}
~some_object() = default;
std::string value;
private:
};
template<typename Obj>
class number_parser
{
public:
number_parser(const std::string &filepath) :
filepath(filepath)
{ }
template<typename Con = std::vector<Obj>>
Con file_dump()
{
Con container;
std::fstream file(this->filepath.c_str(), std::ios::in);
if (!file.is_open())
{
std::cout << "File is not openned...\n";
std::cout << "Openning file: " << this->filepath << "\n";
file.open(filepath.c_str());
}
std::string line;
int i = 0;
while (std::getline(file, line))
{
if (line.size() > 1)
{
container.push_back(line);
}
}
file.close();
return container;
}
template<typename Con = std::vector<Obj>>
Con update_values(const Con &values)
{
Con container;
std::vector<char> remove_chars;
remove_chars.reserve(4);
remove_chars.push_back(')');
remove_chars.push_back('(');
remove_chars.push_back(32);
remove_chars.push_back('-');
auto prefix = "+1";
std::string parsed;
for (const auto &item : values)
{
parsed.assign(item.value);
if (parsed.size() < 2)
{
std::cout << parsed << " is an invalid number. Continuing with the next number\n";
continue;
}
auto pars = remove_some_data(parsed, remove_chars);
parsed.clear();
parsed.assign(pars);
add_prefix(parsed);
container.push_back(parsed);
parsed.clear();
}
return container;
}
template<typename Con = std::vector<Obj>>
void remove_duplicates(Con &container)
{
std::set<std::string> tmpContainer;
auto act = [&](Obj& ob)
{
tmpContainer.emplace(ob.value);
};
std::for_each(container.begin(), container.end(), act);
container.clear();
auto actReplace = [&](std::string value)
{
Obj o(value);
container.emplace_back(o);
};
std::for_each(tmpContainer.begin(), tmpContainer.end(), actReplace);
}
template<typename Con = std::vector<Obj>>
void save_file(const Con container)
{
std::set<std::string> my_set;
const std::string filepath("my_file.json");;
for (const auto &s : container)
{
my_set.insert(s.value);
}
nlohmann::json j(my_set);
std::cout << "Saving data to file: " << filepath << "\n";
std::fstream output(filepath.c_str(), std::ios::out);
output << j.dump(4);
output.close();
std::cout << "The file has been saved\n";
}
template<typename Con = std::vector<Obj>>
void print_values(const Con container)
{
if (!(container.size() > 0))
{
std::cout << "Empty container\n";
return;
}
std::cout << "Printing values\n";
for (const auto &item : container)
{
std::cout << "Value: " << item.value << "\n";
}
}
private:
std::string remove_some_data(const std::string &unparsed, const std::vector<char> &remove_chars)
{
std::string parsed;
std::cout << "Unparsed: " << unparsed << "\n";
for (auto i = 0; i < unparsed.size(); ++i)
{
char c = unparsed.at(i);
if (std::isdigit(c))
{
parsed.append(std::to_string(c-48));
}
}
std::cout << "Parsed: " << parsed << "\n";
return parsed;
}
void add_prefix(std::string &parsed)
{
auto last_char = parsed.at(parsed.size() - 1);
auto first_char = parsed.at(0);
auto second_char = parsed.at(1);
if (first_char == '1')
{
parsed.insert(0, "+");
}
else if (first_char != '+')
{
if (second_char != '1')
{
parsed.insert(0, "+1");
}
else
{
parsed.insert(0, "+1");
}
}
}
int add_prefix_if_not_found(std::string &parsed, const std::string &prefixes)
{
auto prefix_size = prefixes.size();
auto parsed_beginning = parsed.substr(0, prefix_size);
return 0;
}
std::string filepath;
};
}
#endif
+41
View File
@@ -0,0 +1,41 @@
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <cctype>
#include "number_parser.hpp"
using std::cout;
using std::string;
using std::vector;
using std::fstream;
using std::stringstream;
int main(int argc, char **argv)
{
cout << "clean_files\n";
if (argc < 2)
{
cout << "Provide path to file\n";
return -1;
}
const string filepath(argv[1]);
parser::number_parser<parser::some_object> file_parser(filepath);
auto raw_values = file_parser.file_dump();
auto parsed_values = file_parser.update_values(raw_values);
file_parser.remove_duplicates(parsed_values);
file_parser.print_values(parsed_values);
file_parser.save_file(parsed_values);
return 0;
}