Прайсы

  • 20
  • Недоступна
CrUD для таблицы внутри файла. Считать с консоли имя файла для операций CrUD. Программа запускается со следующим набором параметров: -c productName price quantity Значения параметров: где id - 8 символов. productName - название товара, 30 символов. price - цена, 8 символов. quantity - количе
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (679)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Алексей 22 уровень, Зима
около 9 часов назад
Коллеги! Данную задачу можно решить с помощью: RandomAccessFile? Отпишитесь, у кого получилось. Решил задачу читая файл с конца, но валидатор решение не принимает!
Василий 20 уровень, Подольск
16 января, 14:29
Задача понравилась. Напрягла, но позволила окончательно разобраться с чтением/записью в файл и String.format(). Потратил много попыток на следующее - в IDE пример условия открылся так как-будто он на одной строке, пытался считывать не построчно а просто текст группами по 8,30... байт. Сработало когда открыл условие в браузере и понял что продукты записаны и следовательно читать их надо построчно!!!! .readLine(). Пишу вдруг кто нарвется...
Антон 18 уровень, Москва
12 января, 21:31
Как условия - странные, так и валидатор...
Олег Д 20 уровень, Москва
11 января, 11:50
я до задач по Круд - вау бодьшинство профессии можно будет заменить алгоритмом я после задач по Круд - нууу нафиг
10 января, 15:22
Это pi а не валидатор, все работает как часы, протестировано на файле, но Это неодушевленное не хочет мою такую хорошую краткую реализацию через методы для записи в файл принимать крч пошел он, все условия выполняются а у него нет...
public static void setAllElements(FileOutputStream fileOutputStream, String id,
                                  String productName, String price, String quantity) throws IOException {
    setElement(fileOutputStream, id, 8);
    setElement(fileOutputStream, productName, 30);
    setElement(fileOutputStream, price, 8);
    setElement(fileOutputStream, quantity, 4);
    fileOutputStream.close();
}

public static void setElement(FileOutputStream fileOutputStream, String nameOfElement, int maxNumberOfBytes) throws IOException {
    if(nameOfElement.length()<maxNumberOfBytes) {
        fileOutputStream.write(nameOfElement.getBytes());
        for (int i = 0; i < (maxNumberOfBytes - nameOfElement.length()); ++i) {
            fileOutputStream.write(" ".getBytes());
        }
    }
    else if(nameOfElement.length()>=maxNumberOfBytes){
        nameOfElement.replaceAll(nameOfElement, nameOfElement.substring(0, maxNumberOfBytes-1));
        fileOutputStream.write(nameOfElement.getBytes());
    }
}
Максим Дудин 19 уровень, Калининград
5 января, 21:19
Работает, вроде, но не проходит проверку.... (как у всех), но есть момент работает в частном случае, но если что-то в исходном файле не так - проблема, Наверное можно порешать...это всё, но это контрпродуктивно. Подсмотрел эталонное решение (а чё делать, когда не знаешь что делать, что конкретно валидатору не нравится) там не дописывают, а считывают, потом на основе считанного формируют строку (с учётом условий), добавляют к считанному и перезаписывают файл. Сложно, но понятно. P.S. эталонный вариант тоже не работает с неидеальный файлом (( P.P.S оно вообще практически не работает, сразу кидает исключение Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 50 видимо не учитывает маркер последовательности байтов идущий первым, а я его учитывал ....=( P.P.S. а потом этот маркер перестал добавлятся (фиг знает почему), но теперь другой косяк в имя добавляет и id и name т.е записывает последний вот так - 19847984198478 Шорты пляжные черные 173.00 17
Aleksandr 28 уровень, Санкт-Петербург
5 января, 07:23
Тот случай, когда задача интересная, а качество валидации абсолютно ни в дугу. Ужасно обидно! Тут некоторые люди, как пишут, решали её десятки раз. Мне повезло обойтись 4-мя. Программа ВСË ДЕЛАЛА СОГЛАСНО УСЛОВИЮ с первого же захода: и парсинг аргументов, и пробелы, и вычисление следующего айди, и вывод в файл. Но валидатор упорно заявлял "При запуске программы с параметрами "-c productName price quantity" в конец файла должна добавится новая строка с товаром". Хотя, всё там добавлялось, как надо. Короче, я бы уже подглядел в готовое решение, потому что надо программированию учиться, а не как валю обхитрить. Бесит! Но повезло. Короче, валя - очень слабое место проекта. Очень. Либо надо условия прописывать жёстче, чтобы, если у валидации будут какие-то явные требования по внутренней реализации программы, это в условиях явно бы отражалось. А то поди угадай, что ему надо. P.S. Насчёт ООП. Я не заглядывал в готовое решение. Но тут пишут, что там ООП в полный рост. Вот хрен его знает, но я не вижу ничего элегантного в том, чтобы накручивать сложностей там, где не надо. Нужен айди-плюс-один? Считываю файл построчно, вынимаю айди из каждой строки, нахожу максимальный. Больше эти строки мне не нужны, я их и не сохранял никуда. Ресурсы свободнее. Нужно добавить строчку? Ну так дописываем её к готовому файлу (new FileWriter(fileName, true), где true отвечает за append. Нужно обработать поля? Вот тут бы и пригодился ООП, вроде бы... А зачем? У нас всё строковое, кроме айди. Мы не парсим цену и количество в числовые форматы, не производим с ними действий. Всё, что нужно - правильно отформатировать. И это отлично делается без создания объекта с полями. ИМХО, конечно.
Future Man 22 уровень
2 января, 13:02
Не опять а снова, валидатор привязывается к решению, а не к результату!! Написал свой кода (да не элегантно и процедурно по факту, на 10 строчек больше чем в гоотов рещении) НО он же работатет, все добавляет, ID увеличивает, форматирование совпадает по кол-ву символов... В итог принял готове решение, конечно оно элегантней и по ООП.... Ну тогда надо было писать, создайте класс такой то, подумайте какие поля и тд и тп.... У кого прога рабоатет исправно, но при этом не пропускает валидатор, то забейте тк условия для принятия валидатором нам не известны, а так гадать и нервы тратить со временм мало удовольствия...
Игорь 22 уровень, Братск
28 декабря 2020, 07:21
Не могу понять, что от меня хотят в этой задаче
Владимир Коземаслов Жук в Муравейнике
14 декабря 2020, 20:06
Потрачено 5 часов времени, задача решена с 1 попытки. Почитайте лекции профессора перед задачами. P.S. Перед добавлением новой строки в файл, не забудьте добавить символ переноса строки fileOutputStream.write('\n');