Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.javarush.test.level18.lesson10.bonus02;
- import java.io.*;
- import java.util.ArrayList;
- /* Прайсы CrUD для таблицы внутри файла
- Считать с консоли имя файла для операций CrUD
- Программа запускается со следующим набором параметров: -c productName price quantity
- Значения параметров: где id - 8 символов productName - название товара,
- 30 chars (60 bytes) price - цена, 8 символов quantity - количество,
- 4 символа -c - добавляет товар с заданными параметрами в конец файла,
- генерирует id самостоятельно, инкрементируя максимальный id,
- найденный в файле
- В файле данные хранятся в следующей последовательности (без разделяющих пробелов): id productName
- price quantity
- Данные дополнены пробелами до их длины Пример: 19846
- Шорты пляжные синие 159.00 12 198478
- Шорты пляжные черные с рисунко173.00 17 19847983
- Куртка для сноубордистов, разм10173.991234 */
- public class Solution { public static void main(String[] args) throws Exception {
- if (matchRules(args)){
- /*If true MAGIC HAPPENS HERE*/
- args=parsArgs(args);
- BufferedReader reader = null;
- BufferedReader fileRader = null;
- FileWriter fileWriter = null;
- try {
- reader = new BufferedReader(new InputStreamReader(System.in));
- String fileName=reader.readLine();
- fileRader = new BufferedReader(new FileReader(fileName));
- fileWriter = new FileWriter(fileName,true);
- String toWrite =
- formNewId(returnNextID(fileRader))
- +formNewProdName(args[1])
- +formNewPrice(args[2])
- +formNewQuan(args[3]);
- fileWriter.write(toWrite);
- }
- catch (Exception e) {
- }
- finally {
- reader.close();
- fileRader.close();
- fileWriter.close();
- }
- }
- }
- /**
- * Проверяем значение (число/не число)
- * */
- public static boolean isNumber(String some) {
- try { Double.parseDouble(some); return true;
- } catch (Exception e)
- { return false; } }
- /** Программа запускается со следующим набором параметров: !!!!
- * Тогда с другими запускатся не должна -c productName price quantity !!!
- * должно быть не меньше 4 параметров !!! первый параметр должен быть "-c" !!!
- * последние два должны быть номерами */
- public static boolean matchRules (String[]param) {
- if (
- /*List of Rules*/
- param[0].equals("-c")
- && param.length>=4
- && isNumber(param[(param.length)-1])
- && isNumber(param[(param.length)-2])) {
- return true;
- }
- else
- return false;
- }
- /**
- * Возращает строку в 30 знаков в длину
- * даже если там изначально было 3
- * ----------------------------------*/
- public static String formNewProdName (String input){
- if (input.length()>30) {
- return input.substring(0,30);
- }
- return String.format("%-30s",input);
- }
- /**
- * Возвращает цену в 8 знаков
- * даже если там было 3 зн.
- * */
- public static String formNewPrice (String input){
- if (input.length()>8) {
- return input.substring(0,8);
- }
- return String.format("%-8s",input);
- }
- public static String formNewId (int ID){
- String input = String.format("%-8d",ID);
- if (input.length()>8) {
- return input.substring(0,8);
- }
- return String.format("%-8s",input);
- }
- /**
- * Возращает строку в 4 знака в длину
- * даже если там изначально было 380880
- * ----------------------------------*/
- public static String formNewQuan (String input){
- if (input.length()>4) {
- return input.substring(0,4);
- }
- return String.format("%-4s",input);
- }
- /**
- * Берет как аргумент FileReader
- * Читает строчка за строчкой
- * 0. Проверяет длину строчки (не меньше 8+30+8+4=50 знаков)
- * 1. В строчке substring(0,8) и проверяет номер или не номер
- * 2. Если номер не найден вообще возвращает 1
- * 3. Если номер найден сравнивает его с max
- * 4. Возвращает max
- * */
- public static int returnNextID (BufferedReader someFileName) {
- String parseLine = "";
- int max = 0;
- int temp = 0;
- try
- {
- while ((parseLine = someFileName.readLine())!=null) {
- if (parseLine.length()<50) {
- }
- else if (isNumber(parseLine = parseLine.substring(0,8))) {
- temp = Integer.parseInt(parseLine);
- if (temp>max) {
- max=temp;
- }
- }
- }
- }
- catch (Exception e) {
- }
- return max+1;
- }
- public static String[] parsArgs (String[] someStrings){
- ArrayList<String>stringArgs = new ArrayList<String>();
- for (String s : someStrings) {
- stringArgs.add(s);
- }
- int i = stringArgs.size();
- String prodName="";
- for (int c = 1;c<i-3;c++) {
- prodName=prodName+stringArgs.get(c);
- if ((c<i-4)==true) {
- prodName=prodName+" ";
- }
- }
- String[]returnArgs = new String[4];
- returnArgs[0]=stringArgs.get(0);
- returnArgs[1]=prodName;
- returnArgs[2] = stringArgs.get(i-2);
- returnArgs[3] = stringArgs.get(i-1);
- return returnArgs;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement