Advertisement
Guest User

HEX Encoder ver. 0.0.1

a guest
Feb 22nd, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 3.16 KB | None | 0 0
  1. import std.stdio;
  2. import std.file;
  3. import std.string;
  4.  
  5. extern(Windows) int SetConsoleOutputCP(uint);
  6.  
  7. void main()
  8. {
  9.     // Устанавливаем кодировку вывода в виндовую консоль
  10.     if(SetConsoleOutputCP(65001) == 0) throw new Exception("Error occurred while trying to set the encoding console");
  11.  
  12.     string m0 = "Textfile HEX Encoder by Bagomot\r\n";
  13.     string m1 = "ВНИМАНИЕ: Не указывайте файлы с названиями, содержащими кириллические символы!\r\n";
  14.     string m2 = "1. Для удобства положите исходные файлы в папку с программой.\r\n";
  15.     string m3 = "2. Укажите их через пробел и нажмите Enter:";
  16.     // Выводим подсказки
  17.     writeln(m0, m1, m2, m3);
  18.  
  19.     // Считываем строку с консоли, заодно удаляем пробелы на её концах
  20.     string input = strip(chomp(readln()));
  21.  
  22.     // Разбиваем строку по пробелам и записываем элементы в массив
  23.     string[] inputFiles = splitBySign(input, " ");
  24.     string[] chekedFiles;
  25.     // Проверка на существование файлов и пересборка массива только с существующими
  26.     foreach(s; inputFiles)
  27.     {
  28.         if(exists(s)) chekedFiles ~= s;
  29.     }
  30.  
  31.     // Проверяем строку на пустоту
  32.     if(chekedFiles.length == 0) writeln("Вы не указали ни одного существующего файла\r\nили использовали недопустимые символы.");
  33.     else
  34.     {
  35.         writeln("Конвертирую файлы...");
  36.         // Выбираем по одному элементу из массива
  37.         foreach(oneFile; chekedFiles)
  38.         {
  39.             string buffer;
  40.             // Считываем данный элемент (файл)
  41.             string inputData = readFile(oneFile);
  42.             // Конвертируем данный файл в нужный формат посимвольно
  43.             for(uint i = 0; i < inputData.length; i++)
  44.             {
  45.                 buffer ~= format("%1$X", inputData[i]);
  46.             }
  47.  
  48.             if(buffer == "") write("0");
  49.             else
  50.             {
  51.                 // Записываем готовую строку в файл
  52.                 writeInFile(oneFile, buffer);
  53.                 write("+");
  54.                 // Сброс буфера
  55.                 buffer = "";
  56.             }
  57.         }
  58.         writeln("\r\nРабота зевершена.");
  59.     }
  60. }
  61.  
  62. string readFile(string fileName)
  63. { // Читает файл в строку
  64.     string outData;
  65.     try
  66.     {
  67.         File file = File(fileName, "r");
  68.         file.readf(" %s", &outData);
  69.         file.close();
  70.     }
  71.     catch
  72.     {
  73.         outData = "";
  74.     }
  75.     return outData;
  76. }
  77.  
  78. auto splitBySign(string data, string sepSign)
  79. { // Разбиение строки по разделителю
  80.     string[] buffer;
  81.     buffer ~= split(data, sepSign);
  82.     return buffer;
  83. }
  84.  
  85. auto writeInFile(string fileName, string data)
  86. { // Записывает строку в файл
  87.     try
  88.     {
  89.         File file;
  90.         file.open(fileName,"w");
  91.         file.write(data);
  92.         file.close();
  93.         return true;
  94.     }
  95.     catch
  96.     {
  97.         return false;
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement