powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / нужен реинжиниринг короткого кода на java
25 сообщений из 249, страница 4 из 10
нужен реинжиниринг короткого кода на java
    #40056443
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets,
Добро пожаловать в публичный форум.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056489
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets

Вот без обид - если конструктив кончился, то остальные слова явно лишние, чесслово.


Очередная порция конструктива, не поленился, наклацал пример из двух классов, из базовых возможностей джавы, на подножном корму так сказать .

Один класс парсит значения из текстового файла и передает их в инстанс/экземпляр второго класса . В момент передачи данных ,во втором классе ,в методе ,который начинается со слов set происходит преобразование текстового значения в нужный по смыслу тип данных.

1) Итак, представьте, что у вас текстовый файл, который вы хотите спарсить (он у вас должен был появится после выполнения первой части задания ) содержит в себе структуру обычной таблицы (похожую по смыслу на обычную таблицу на SQL сервере)

Я специально создал текстовый файл с идеей разных типов данных. Там по смыслу есть INTEGER,DATE, DOUBLE ,VARCHAR, BOOLEAN
Все это можно посмотреть во вложенных текстовых файликах.
Там вы увидите соответственно поля если откроете : КодПродажи ДатаПродажи СуммаПродажи Продукт Подтверждено.

Какая наша задача - спарсить построчно данные из каждого файлика и поместить их в ArrayList таким образом, чтобы они находясь там имели уже свой тип данных, чтобы в дальнейшем можно было работать с этим списком как с обычной таблицей (SUM,GROUP BY, etc..)


Что мы создаем в первую очередь? - мы создаем класс типа pojo, который полностью, на 100 процентов совпадает со структурой таблицы из текстового файлика. Пусть такой класс называется Продажи (назовем его Sales):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
public class Sales { // этот класс содержит поля, которые полностью совпадают с полями из текстового файла
    private int sale_id; // код продажи
    private Date sale_date; // дата продажи
    private double sale_summ; // сумма продажи
    private String product; // продукт
    private boolean sale_confirmation; // продажа подтверждена

    public int getSale_id() {
        return sale_id;
    } //метод для получения значения кода продажи
    public void setSale_id(String sale_id) {  //метод для вставки значения кода продажи, текст преобразуется в число
        this.sale_id = Integer.parseInt (sale_id);
    }
    public Date getSale_date() {
        return sale_date;
    } //метод для получения значения даты продажы
    public void setSale_date(String sale_date) throws ParseException { //метод для вставки значения даты продажи, текст преобразуется в дату
        SimpleDateFormat format = new SimpleDateFormat();
        format.applyPattern("dd.MM.yyyy");
        Date docDate= format.parse(sale_date);
        this.sale_date = docDate;
    }
    public double getSale_summ() {
        return sale_summ;
    } //метод для получения значения суммы продажи
    public void setSale_summ(String sale_summ) { //метод для вставки значения даты продажи, текст преобразуется в double
        this.sale_summ = Double.parseDouble(sale_summ);
    }
    public String getProduct() {
        return product;
    } //метод для получения названия товара
    public void setProduct(String product) { //метод для вставки названия товара, он и так текст, особо писать ничего не надо
        this.product = product;
    }
    public boolean isSale_confirmation() { //метод для получения значения подтверждения продажи
        return sale_confirmation;
    }
    public void setSale_confirmation(String sale_confirmation) { //метод для вставки значения подтверждения продажи, текст преобразуется в boolean
        this.sale_confirmation = Boolean.parseBoolean(sale_confirmation);
    }
}



Все, класс создан, и он в дальнейшем будет играть роль элемента ArrayList, мы в этот список будем пихать по одному экземпляру ,каждый из которого идеологически соответствует одной строке в таблице.

2) Дальше - хранилище строк у нас уже организовано. Осталось написать класс парсер , который будет обходить выбранный текстовый файл/ы и закручивать данные из строк текстового файла в коллекцию типа ArrayList. Элементом коллекции будут являться экземпляры класса Sales. Каждый из которого будет содержать информацию одной строки таблицы.
Пишем класс парсер:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class ParseTxt { // основной класс, в котором реализован парсинг данных с текстовых файлов ,с последующей закруткой их в ArrayList
    //Методы приведения типов из текста в нужный тип (дата,число,текст,булевы реализованы в сеттерах класса pojo - Sales
    //думаю так каноничней и по феншую, потому что приведение в принципе можно организовать и тут при помощи nextInt,nextDouble итд
  private  ArrayList<Sales> saleslist = new ArrayList<Sales>();
  public ParseTxt setListFromFile(String filePath) throws FileNotFoundException, ParseException {
    Scanner s = new Scanner(new File(filePath));// та фигня ,которая будет бегать от слова к слову по выбранной строке
    // PS делиметер для сканнера обычно пробел
    s.nextLine(); //!!!! переходим на вторую строку текстового файла , чтобы заголовки таблицы из файла не попали в парсинг
    while (s.hasNextLine()) { // для каждой строки в текстовом файле
           Sales sales = new Sales(); // создаем новый экземпляр класса Sales , в него мы будем запихивать текстовое значение
        //элемента строки текстового файла , где каждый элемент это значение отдельного столбца
        sales.setSale_id(s.next()); //снимаем первое значение в строке - это у нас КодПродаж и передаем в экземпляр класса Sales
        sales.setSale_date(s.next()); //переходим при помощи next ко второму значению в строке - ДатаПродажи и передаем в экземпляр класса Sales
        sales.setSale_summ(s.next()); //переходим при помощи next к третьему значению в строке - СуммаПродаж и передаем в экземпляр класса Sales
        sales.setProduct(s.next()); //переходим при помощи next к 4му значению в строке Продукт  и передаем в экземпляр класса Sales
        sales.setSale_confirmation(s.next()); //переходим при помощи next к 5му значению в строке ПродажаВыполнена  и передаем в экземпляр класса Sales
        saleslist.add(sales); //пихаем в коллекцию заполненный экземпляр класса Sales и переходим на новую строку текстового файла
        }
    s.close();// закрываем текстовый файл, он нам больше не нужен
    return this; //возвращаем текущий экземпляр текущего класса  ParseTxt, это нужно чтобы можно было в одном выражении при вызове указать любое количество
      //текстовых файлов, которые будут загружаться в один общий список типа ArrayList<Sales> saleslist
    }
public ArrayList<Sales> getListFromClass (){ //метод ,который возвращает заполненный список
    return saleslist;
    }
}



Все, вуаля, можно пользоваться, получить результирующий список из нескольких файлов очень просто .
Он очень лаконичен.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
.....
public static void main (String[] args) throws FileNotFoundException, ParseException {
        ArrayList<Sales> мойСуперСписок = new ParseTxt() //инициализируем класс парсер
                .setListFromFile("C:\\Users\\SL\\Desktop\\sales1.txt") //закручиваем в список данные из первого текстового файла
                .setListFromFile("C:\\Users\\SL\\Desktop\\sales2.txt")  //закручиваем в список данные из второго текстового файла
                .getListFromClass();// присваиваем переменной мойСуперСписок значение переменной типа список из класса ParseTxt 
    }
.....



После вызова, вы можете делать с ним что угодно, он полностью соответствует структуре таблицы, как по списку полей, так и по типам данных. И усё. Дальше можно складывать, вычитать, группировать.
Либо циклом по старинке. Либо использовать Stream API. Что ближе, и что больше знакомо.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056492
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сами файлы.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056527
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,
огромное спасибо, чужой опыт самое ценное. Курю ваш пример.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056528
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Сергей Лалов#22299164]
pesets

из базовых возможностей джавы, на подножном корму так сказать .


Сергей, а если выходить за пределы базовых возможностей java, что бы вы сами использовали из java-фреймворков / доп библиотек каких нибудь для решения аналогичных задач ? я имею в виду ту часть задачи, которая не связана с БД

Лично я само собой решал бы все через JDBC и БД.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056529
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets
Лично я само собой решал бы все через JDBC и БД.

Надо просто осилить рефлексию и писать всё линейно станет сразу лень. Захочется чтобы "я сказал и оно сделалось, а не перечислять 100500-й раз всё эти элементарные шаги".
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056537
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,
можно как то тебе написать в личку ?
Хочу сказать личное спасибо в виде подгона хорошей уже сейчас, а в перспективе очень хорошей темы )
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056538
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
pesets
Лично я само собой решал бы все через JDBC и БД.

Надо просто осилить рефлексию и писать всё линейно станет сразу лень. Захочется чтобы "я сказал и оно сделалось, а не перечислять 100500-й раз всё эти элементарные шаги".


спрошу не так завуалированно - не хотелось говорить возможно явные глупости. ))

какими бы сторонними библиотеками ты сам бы воспользовался для решения подобных БД задач без БД ?
или сам что используешь (фреймы , сторонние библиотеки) для решения своих задач ?

может эту задачу (или подобные) проще делать я не знаю ну там может спринг что то особо уютное в этом плане предлагает или еще что .
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056539
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets
кими бы сторонними библиотеками ты сам бы воспользовался для решения подобных БД задач без БД ?

Всё сильно зависит от конкретной задачи. Если там rest, тупой curd и работодатель платит за жабку - то как все - спринг бут, хибер. Для если надо чего-то много считать из кучи цифер делать еще кучу цифер, то я никогда бы не взял этот сраный хибер и страдал бы с mybatis/jdbi. Без бд, ну делал я обёртку для rabbitmq, там была библиотека для связи с рабитом, да спринг.

pesets
может эту задачу (или подобные) проще делать я не знаю ну там может спринг что то особо уютное в этом плане предлагает или еще что .

Конкретно для такой задачи спринг ничего не предлагает, она слишком маленькая, чтобы его туда тащить. Спринг он соединяет кучу сторонних библиотек, чтобы тебе не создавать и не тащить все эти сраные фабрики фабрик руками в свою иерархию классов, а тупо наставить везде @Autowired, фреймворк сделает где надо new и всё заведётся (пусть не с первого раза и будет долго гатить стектрейсами при запуске)
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056541
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,

я вам письмо послал на мыло в профиле. с моим ником в теме . не отмахивайтесь )))
в нем мой телефон, по которому я в мессенджерах
это мое личное так сказать спасибо.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056543
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

отправил вам письмо на мыло , которое в профиле с моим ником в теме.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056615
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets
Сергей Лалов,

я вам письмо послал на мыло в профиле. с моим ником в теме . не отмахивайтесь )))
в нем мой телефон, по которому я в мессенджерах
это мое личное так сказать спасибо.


За номер телефона конечно спасибо)). Но мы ждем от вас тут ваших выкладок, по вашему заданию. Что вы успели сделать на текущий момент)
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056617
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets
можно как то тебе написать в личку ?

jabber на jabber.ru или мыло на яндексе с таким же ником, как на форуме.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056628
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets

Сергей, а если выходить за пределы базовых возможностей java, что бы вы сами использовали из java-фреймворков / доп библиотек каких нибудь для решения аналогичных задач ? я имею в виду ту часть задачи, которая не связана с БД
Лично я само собой решал бы все через JDBC и БД.


JDBC и БД это само собой. Но это слишком низкоуровневое точечное решение. Наверное сейчас мало кто пишет отдельные решения с нуля для обслуживания определённой бд, пула бд с сети. Для общего образования разве что.

Как и сказал ранее crutchmaster, сейчас основные фреймворки, востребованные на рынке труда это hibernate - для взаимодействия с sql сервером. И spring для написания веб решений и опять же для взаимодействия с sql сервером. Только под другим углом.
Без практики прорваться и изучить сложно. Изучите базовые вещи на Java. Основные понятия. И только потом туда.

PS. И да, ждём ваш код, надеюсь коллективная помощь не прошла даром.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056709
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов
pesets
Сергей Лалов,

я вам письмо послал на мыло в профиле. с моим ником в теме . не отмахивайтесь )))
в нем мой телефон, по которому я в мессенджерах
это мое личное так сказать спасибо.


За номер телефона конечно спасибо)). Но мы ждем от вас тут ваших выкладок, по вашему заданию. Что вы успели сделать на текущий момент)


мой номер для того, что бы вкратце по быстрому ввести в тему, которую я прислал )). что бы вам не курить уже прокуренное
пока сделал вот что (архив)

еще курю тесты. по той ссылке что прислали - ну примерно 40 % расскажу, по JDBC 100 % , вспомнил все ))
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056710
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,
на яндекс написал
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056713
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,


подчистил немного
ребилдился проект без ругани

рабочий класс еще не оформил в отдельный
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056715
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pesets,

блин не тот архив привязался

вот последний
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056716
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pesets,

v3_home.zip
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056727
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets,

Ну кстати нормальный объем кода. Единственно как понимаю вы на тестовый период все запихнули в метод main . Чет не запускается у меня. На 41 строке вылетает. У вас генерация текстовых файлов ,согласно первой части задания выполняется?
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056729
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИМХО лучше вообще не стало.
1) Начать надо с того, что посоветовали Leonid Kudryavtsev и PetroNotC, разбить код на логические блоки по разным функциям:
PetroNotC Sharp
Leonid Kudryavtsev,
+1
Код: java
1.
2.
3.
4.
main(){
    читаемПараметры() ;
    создатьПапку() 
  ...... 


У кода вообще нет структуры. Это очень длинная лапша, которую не понять, пока не прочитаешь целиком.
2) Имена переменных/функций не соответствуют конвенциям
3) Есть такое правило для хорошего кода: если внутри функции хочется написать коммент, то или переменные названы непонятно, или надо разбить код на более мелкие функции с понятными названиями. От такого избытка комментов становится чуть-чуть больно.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056730
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,

ну да, рабочую функцию в отдельный класс не выделил
Вы из последнего архива смотрите код v3_home.zip ?
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056731
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов
pesets,

Ну кстати нормальный объем кода. Единственно как понимаю вы на тестовый период все запихнули в метод main . Чет не запускается у меня. На 41 строке вылетает. У вас генерация текстовых файлов ,согласно первой части задания выполняется?


да, рабочую функцию пока в отдельный класс не выделил - в процессе
вы смотрите код из последнего архива ? v3_home.zip ?

у меня 41 строка fullPathOfficesTxt = homePath + "\\" + args[0].toLowerCase(); - это планирую убрать и найти
что то кроссплатформенное, о чем говорил crutchmaster
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056733
pesets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
ИМХО лучше вообще не стало.
1) Начать надо с того, что посоветовали Leonid Kudryavtsev и PetroNotC, разбить код на логические блоки по разным функциям:
PetroNotC Sharp
Leonid Kudryavtsev,
+1
Код: java
1.
2.
3.
4.
main(){
    читаемПараметры() ;
    создатьПапку() 
  ...... 


У кода вообще нет структуры. Это очень длинная лапша, которую не понять, пока не прочитаешь целиком.
2) Имена переменных/функций не соответствуют конвенциям
3) Есть такое правило для хорошего кода: если внутри функции хочется написать коммент, то или переменные названы непонятно, или надо разбить код на более мелкие функции с понятными названиями. От такого избытка комментов становится чуть-чуть больно.


пытаюсь сделать структуру архив v3_home.zip последний

2. многое поправил по именам - теперь переменные начинаются с маленькой буквы
а вообще ИМХО блин ну должен же быть какой либо плагин для , который выровняет и предложит наименования в соответствии с конвенцией... найду
при слове конвенция Ильф и Петров в уме щас всплывает "Золотой теленок" ))

3. ну я комментирую с той позиции много комментов лучше чем без них - больше для себя, я не предполагал, что придется отчитываться )))))), но я не против совершенно.
...
Рейтинг: 0 / 0
нужен реинжиниринг короткого кода на java
    #40056780
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pesets,

Не распыляйтесь и не отвлекайтесь. Выделите функции потом приходите.
...
Рейтинг: 0 / 0
25 сообщений из 249, страница 4 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / нужен реинжиниринг короткого кода на java
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]