From 617dd34a23064598a51e965c6145370774088c13 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Tue, 12 Sep 2023 21:55:48 +0300 Subject: [PATCH] Add an option to read a message from a file. --- src/cipher_analytical_machine/cli.clj | 20 ++++++++++++++++++-- src/cipher_analytical_machine/file.clj | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/cipher_analytical_machine/file.clj diff --git a/src/cipher_analytical_machine/cli.clj b/src/cipher_analytical_machine/cli.clj index f0c3b9d..03bb77e 100644 --- a/src/cipher_analytical_machine/cli.clj +++ b/src/cipher_analytical_machine/cli.clj @@ -1,5 +1,6 @@ (ns cipher-analytical-machine.cli (:require + [cipher-analytical-machine.file :as file] [cipher-analytical-machine.caesar :as caesar] [clojure.string :as cs] [clojure.tools.cli :refer [parse-opts]]) @@ -10,6 +11,7 @@ (def cli-options [["-m" "--message MESSAGE" "The message will be encrypted or decrypted."] + ["-M" "--message-file MESSAGE-FILE" "The file contains the message that will be encrypted or decrypted."] ["-k" "--key KEY" "The key will be used to encrypt or decrypt."] ["-c" "--cipher CIPHER" "The cipher will be used to encrypt or decrypt a message." :default "Caesar"] @@ -52,8 +54,12 @@ (map-has-keys? options [:encrypt, :decrypt]) {:exit-message (error-msg ["You can't use enctypt and decrypt mode at the same time!!!"])} + (map-has-keys? options [:message, :message-file]) + {:exit-message (error-msg ["You can't use message and message-file options at the same time!!!"])} + (and (map-has-keys? options [:cipher, :key]) - (contains? options :message) + (or (contains? options :message) + (contains? options :message-file)) (or (contains? options :encrypt) (contains? options :decrypt))) {:options options :arguments arguments} @@ -66,10 +72,20 @@ (println exit-message) (System/exit (if status 0 1))) +(defn get-message + "Return the message" + [options arguments] + (cond + (contains? options :message) + (:message options) + + (contains? options :message-file) + (file/read-file (:message-file options)))) + (defn actions [options arguments] (println (str options arguments)) - (let [message (:message options) + (let [message (get-message options arguments) key (Integer/parseInt (:key options)) symbols "abc"] (println diff --git a/src/cipher_analytical_machine/file.clj b/src/cipher_analytical_machine/file.clj new file mode 100644 index 0000000..b53ab52 --- /dev/null +++ b/src/cipher_analytical_machine/file.clj @@ -0,0 +1,18 @@ +(ns cipher-analytical-machine.file + (:require [clojure.java.io :as io]) + (:gen-class)) + +(defn is-file-exists? + "Checks that a file is exists" + [file-path] + (-> (io/file file-path) + (.exists))) + +(defn is-file-not-exists? + "Checks that a file is not exists" + [file-path] + (not (is-file-exists? file-path))) + +(defn read-file [file-path] + (slurp file-path)) +