Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.stdio;
- import std.file;
- import std.string;
- extern(Windows) int SetConsoleOutputCP(uint);
- void main()
- {
- // Устанавливаем кодировку вывода в виндовую консоль
- if(SetConsoleOutputCP(65001) == 0) throw new Exception("Error occurred while trying to set the encoding console");
- string m0 = "Textfile HEX Encoder by Bagomot\r\n";
- string m1 = "ВНИМАНИЕ: Не указывайте файлы с названиями, содержащими кириллические символы!\r\n";
- string m2 = "1. Для удобства положите исходные файлы в папку с программой.\r\n";
- string m3 = "2. Укажите их через пробел и нажмите Enter:";
- // Выводим подсказки
- writeln(m0, m1, m2, m3);
- // Считываем строку с консоли, заодно удаляем пробелы на её концах
- string input = strip(chomp(readln()));
- // Разбиваем строку по пробелам и записываем элементы в массив
- string[] inputFiles = splitBySign(input, " ");
- string[] chekedFiles;
- // Проверка на существование файлов и пересборка массива только с существующими
- foreach(s; inputFiles)
- {
- if(exists(s)) chekedFiles ~= s;
- }
- // Проверяем строку на пустоту
- if(chekedFiles.length == 0) writeln("Вы не указали ни одного существующего файла\r\nили использовали недопустимые символы.");
- else
- {
- writeln("Конвертирую файлы...");
- // Выбираем по одному элементу из массива
- foreach(oneFile; chekedFiles)
- {
- string buffer;
- // Считываем данный элемент (файл)
- string inputData = readFile(oneFile);
- // Конвертируем данный файл в нужный формат посимвольно
- for(uint i = 0; i < inputData.length; i++)
- {
- buffer ~= format("%1$X", inputData[i]);
- }
- if(buffer == "") write("0");
- else
- {
- // Записываем готовую строку в файл
- writeInFile(oneFile, buffer);
- write("+");
- // Сброс буфера
- buffer = "";
- }
- }
- writeln("\r\nРабота зевершена.");
- }
- }
- string readFile(string fileName)
- { // Читает файл в строку
- string outData;
- try
- {
- File file = File(fileName, "r");
- file.readf(" %s", &outData);
- file.close();
- }
- catch
- {
- outData = "";
- }
- return outData;
- }
- auto splitBySign(string data, string sepSign)
- { // Разбиение строки по разделителю
- string[] buffer;
- buffer ~= split(data, sepSign);
- return buffer;
- }
- auto writeInFile(string fileName, string data)
- { // Записывает строку в файл
- try
- {
- File file;
- file.open(fileName,"w");
- file.write(data);
- file.close();
- return true;
- }
- catch
- {
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement