Advertisement
jaVer404

level18.lesson10.bonus02(RC2)_notTested

Jan 29th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.49 KB | None | 0 0
  1. package com.javarush.test.level18.lesson10.bonus02;
  2. import java.io.*;
  3. import java.util.ArrayList;
  4.  
  5. /* Прайсы CrUD для таблицы внутри файла
  6. Считать с консоли имя файла для операций CrUD
  7. Программа запускается со следующим набором параметров: -c productName price quantity
  8. Значения параметров: где id - 8 символов productName - название товара,
  9. 30 chars (60 bytes) price - цена, 8 символов quantity - количество,
  10. 4 символа -c  - добавляет товар с заданными параметрами в конец файла,
  11. генерирует id самостоятельно, инкрементируя максимальный id,
  12. найденный в файле
  13. В файле данные хранятся в следующей последовательности (без разделяющих пробелов): id productName
  14. price quantity
  15. Данные дополнены пробелами до их длины Пример: 19846
  16. Шорты пляжные синие           159.00  12 198478
  17. Шорты пляжные черные с рисунко173.00  17 19847983
  18. Куртка для сноубордистов, разм10173.991234 */
  19. public class Solution { public static void main(String[] args) throws Exception {
  20.     if (matchRules(args)){
  21.         /*If true MAGIC HAPPENS HERE*/
  22.         args=parsArgs(args);
  23.         BufferedReader reader = null;
  24.         BufferedReader fileRader = null;
  25.         FileWriter fileWriter = null;
  26.         try {
  27.  
  28.             reader = new BufferedReader(new InputStreamReader(System.in));
  29.             String fileName=reader.readLine();
  30.             fileRader = new BufferedReader(new FileReader(fileName));
  31.             fileWriter = new FileWriter(fileName,true);
  32.  
  33.             String toWrite =
  34.                     formNewId(returnNextID(fileRader))
  35.                     +formNewProdName(args[1])
  36.                     +formNewPrice(args[2])
  37.                     +formNewQuan(args[3]);
  38.             fileWriter.write(toWrite);
  39.         }
  40.         catch (Exception e) {
  41.         }
  42.         finally {
  43.             reader.close();
  44.             fileRader.close();
  45.             fileWriter.close();
  46.         }
  47.     }
  48. }
  49.     /**
  50.      * Проверяем значение (число/не число)
  51.      * */
  52. public static boolean isNumber(String some) {
  53.     try { Double.parseDouble(some); return true;
  54.     } catch (Exception e)
  55.     { return false; } }
  56.     /**    Программа запускается со следующим набором параметров: !!!!
  57.      * Тогда с другими запускатся не должна -c productName price quantity !!!
  58.      * должно быть не меньше 4 параметров !!! первый параметр должен быть "-c" !!!
  59.      * последние два должны быть номерами */
  60. public static boolean matchRules (String[]param) {
  61.     if (
  62.     /*List of Rules*/
  63.                 param[0].equals("-c")
  64.              && param.length>=4
  65.              && isNumber(param[(param.length)-1])
  66.              && isNumber(param[(param.length)-2])) {
  67.             return true;
  68.         }
  69.         else
  70.             return false;
  71.     }
  72.     /**
  73.      * Возращает строку в 30 знаков в длину
  74.      * даже если там изначально было 3
  75.      * ----------------------------------*/
  76.     public static String formNewProdName (String input){
  77.         if (input.length()>30) {
  78.             return input.substring(0,30);
  79.         }
  80.  
  81.         return String.format("%-30s",input);
  82.     }
  83.     /**
  84.      * Возвращает цену в 8 знаков
  85.      * даже если там было 3 зн.
  86.      * */
  87.     public static String formNewPrice (String input){
  88.         if (input.length()>8) {
  89.             return input.substring(0,8);
  90.         }
  91.  
  92.         return String.format("%-8s",input);
  93.     }
  94.  
  95.  
  96.     public static String formNewId (int ID){
  97.         String input = String.format("%-8d",ID);
  98.         if (input.length()>8) {
  99.             return input.substring(0,8);
  100.         }
  101.  
  102.         return String.format("%-8s",input);
  103.     }
  104.     /**
  105.      * Возращает строку в 4 знака в длину
  106.      * даже если там изначально было 380880
  107.      * ----------------------------------*/
  108.     public static String formNewQuan (String input){
  109.         if (input.length()>4) {
  110.             return input.substring(0,4);
  111.         }
  112.  
  113.         return String.format("%-4s",input);
  114.     }
  115.     /**
  116.      * Берет как аргумент FileReader
  117.      * Читает строчка за строчкой
  118.      *  0. Проверяет длину строчки (не меньше 8+30+8+4=50 знаков)
  119.      *  1. В строчке substring(0,8) и проверяет номер или не номер
  120.      *  2. Если номер не найден вообще возвращает 1
  121.      *  3. Если номер найден сравнивает его с max
  122.      *  4. Возвращает max
  123.      * */
  124.     public static int returnNextID (BufferedReader someFileName) {
  125.         String parseLine = "";
  126.         int max = 0;
  127.         int temp = 0;
  128.         try
  129.         {
  130.             while ((parseLine = someFileName.readLine())!=null) {
  131.                 if (parseLine.length()<50) {
  132.                 }
  133.                 else if (isNumber(parseLine = parseLine.substring(0,8))) {
  134.                     temp = Integer.parseInt(parseLine);
  135.                     if (temp>max) {
  136.                         max=temp;
  137.                     }
  138.                 }
  139.             }
  140.         }
  141.         catch (Exception e) {
  142.         }
  143.         return max+1;
  144.     }
  145.  
  146.     public static String[] parsArgs (String[] someStrings){
  147.         ArrayList<String>stringArgs = new ArrayList<String>();
  148.         for (String s : someStrings) {
  149.             stringArgs.add(s);
  150.         }
  151.         int i = stringArgs.size();
  152.         String prodName="";
  153.         for (int c = 1;c<i-3;c++) {
  154.             prodName=prodName+stringArgs.get(c);
  155.             if ((c<i-4)==true) {
  156.                 prodName=prodName+" ";
  157.             }
  158.         }
  159.         String[]returnArgs = new String[4];
  160.         returnArgs[0]=stringArgs.get(0);
  161.         returnArgs[1]=prodName;
  162.         returnArgs[2] = stringArgs.get(i-2);
  163.         returnArgs[3] = stringArgs.get(i-1);
  164.         return returnArgs;
  165.     }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement