Поиск данных внутри файла

  • 20
  • Недоступна
Считать с консоли имя файла. Найти в файле информацию, которая относится к заданному id, и вывести ее на экран в виде, в котором она записана в файле. Программа запускается с одним параметром: id (int). Закрыть потоки. В файле данные разделены пробелом и хранятся в следующей последовательности: id
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (349)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Антоний Шаламов18 уровень, Хабаровск
16 hours ago
Когда хочешь создать контент для теста)))
for (int i = 0; i < 100; i++) {
    f.write((i + " NAME" + i + " PRICE" + i + " QUALITY" + i + "\n").getBytes());
}
Артемий19 уровень, Москва
Thursday, 04:59
Стараясь сначала самому решать задачу, не залезая в обсуждения, удалось её решить длинным способом с первого раза. Но увидел как в обсуждении её решают в две строки, то понял, что я немного лох) Пропарсил всю строку файла, ибо подумал, что эти параметры должны быть заданного типа (то есть id именно int, а не String, price именно double , а не String и тд) 😅 причем при парсинге больше проблем было с условием "productName - название товара, может содержать пробелы, String"
Максим Ерогов22 уровень, Екатеринбург
18 June, 03:57
С двух попыток!!! Забыл закрыть файл. А так, lines() вам в помощь!
Татьяна19 уровень, Ростов на Дону
28 June, 07:30
И я не закрыла поток(
Iana samarina19 уровень, Владивосток
15 June, 20:59
Комментарий для поднятия настроения: (Осторожно, содержит говнокод) System.out.println(args[0] + " " + result + Double.parseDouble(data[data.length - 2]) + " " + Integer.parseInt(data[data.length - 1]));
Vasiliy19 уровень, Москва
15 June, 14:30
Всем привет! Главный мой затык по этому заданию - это я сам, и как итог с 6 попытки(((( Условие, которое мне было не очевидно 5 попыток: " если ID совпадает с ARG[0] надо вывести на консоль всю информацию о товаре, то есть всю строку целиком"
Vitalachka20 уровень, Лондон
14 June, 00:00
вот кто нибудь может мне объяснить какого лешего в условии это: где id - int. productName - название товара, может содержать пробелы, String. price - цена, double. quantity - количество, int.????? у кого не проходит по 3 пункту, будьте уверены в том, что вы читаете полный ID а не просто начало строки!
Антоний Шаламов18 уровень, Хабаровск
16 hours ago
string = scanner.nextLine();
String[] array = string.split(" ");
if (args[0].equals(array[0]))
    System.out.println(string);
Александр19 уровень, Минск
4 June, 20:05
В валидаторе не проходило 3 условия из 4: 1) Создай для файла поток для чтения 2) Программа должна найти в файле и вывести информацию о id, который передается первым параметром. 3) Поток для чтения должен быть закрыт. Код перепроверил раз 10 посимвольно, сравнил с решениями тут, но при этом не проходило даже банальное условие про закрытие потока. В итоге поменял условие цикла while с (reader.readLine() != null) на условие (reader.ready()) и всё прошло! Не поменяв больше ни строчки кода, валидатор принял задачу. Что за бред? Уже в который раз замечаю, что то что пишет валидатор - оно может просто не соответствовать действительности. Рандомно выкидывает условия, которые якобы не проходят, независимо от того правда это, или нет
Zen Bool20 уровень, Харьков
16 June, 21:25
С такой записью и не должно проходить валидацию. Вы прочитали строку сравнили с null и "выбросили"... а потом очевидно в цикле опять читаете строку и работаете с ней, но это уже следующая строка. Отсюда -> когда поменяли на ready() - все заработало.
Антоний Шаламов18 уровень, Хабаровск
16 hours ago
(reader.readLine() != null)
В этой строке ридер не проверяет на то, что еще остались строки, он просто считывает строку в свой буфер, а учитывая, что в программе вы эту строку никуда не помещаете, у вас просто теряется она. Т. е. такой код
if (reader.readLine() != null)
    String str = reader.readLine();
пропустит половину строк из файла(через одну). А вот метод ready() не считывает строку в свой буфер, этот метод как раз проверяет, что файл еще не закончился.
Jeanik Popov24 уровень, Москва
3 June, 18:43
В цикле { считать строку с файла; создать массив строк из этой строки, разделенную пробелами; сравнить ид, поданный для поиска с нулевой строкой в массиве, преобразованную в число; }
Petr22 уровень, Уфа
16 June, 15:36
В число можно не преобразовывать. args[0] это стринг и ID в строке тоже стринг. У меня прошло так: if(arr[0].equals(args[0])){ System.out.print(s); }
Шамиль19 уровень, Кисловодск
30 May, 20:21
Короче можно сделать стримами
fileBR.lines().filter(s -> s.startsWith(29 + " ")).forEach(System.out::println);
а можно чистой джавой
while ((s=fileBR.readLine())!=null) if (s.startsWith(2+" ")) System.out.println(s);
одно-фикственно и то и то в одну строчку НО чистая джава в 10 раз быстрее чем стримы. В стримах очень много проверок (они же на все случай жизни придуманны) так что я думаю если есть возможность чистой джавы используйте чистую, а стриым используем в очень очень сложных конструкциях. Если в большом проекте в каком-то местечке кода используете первый вариант (стримы) в место второго варианта то могут дать по рукам
Шамиль19 уровень, Кисловодск
30 May, 20:22
Ой 29 + " " и 2+" " это просто осталось от проверок частных случаев в место этих ставим args[0]+" " для данной задачи
Влад36 уровень, Москва
1 June, 22:17
В больших проектах больше используются стримы как раз. Стримы очень полезные и их нужно знать.
Шамиль19 уровень, Кисловодск
1 June, 22:46
Больше может да, но не лучше чем чистая джава Давай по чесноку для обработки Big data какой вариант выбрал бы из этих двух строчек?? Какой вариант быстрее и более стабильнее для много платформенных систем?
Dmytro25 уровень, Киев
13 June, 22:06
Запустил оба варианта на файле с 25 млн строк (args[id] в последней строке). Время выполнения одинаковое, я так понимаю все уперлось в скорость диска.
Шамиль19 уровень, Кисловодск
13 June, 22:39
Смотря как читал если построчно (это 25 млн обращение ) или еще хуже побайтно то, да! А если потоки (большими кусками) тогда диск меньше будет влиять на скорость выполнения. И еще если разница в одно строчке то не думаю что даст большой разница при современных ПК. Если арр обрабатывает большой объем данных и требуется быстрота то конечно только чистая джава, а если арр львиную долю своей работе находится в режиме ожидания то конечно можно использовать готовые решения (например к таким арр можно отнести рисовалку текстовый редактор) видео редакторы то же можно использовать готовые решения но не в алгоритме рендера
Антоний Шаламов18 уровень, Хабаровск
16 hours ago
Вот где то в комментариях к какой то предыдущей задачи вы наехали на кого то, кто выложил скриншот, на котором он хвастается, что решил задачу с первого раза. А сами для чего здесь выкладываете решения, основанные на знаниях, которые в курсе еще не затрагивались? Тоже самолюбие потешить охота?...
Шамиль19 уровень, Кисловодск
5 hours ago
Наехал аж😂🤣😂🤣😂🤣 Да я помню он из уровня 40 сюда вернулся и начал тут хвастаться выкладывать скрины валидации НаХ это кому надо пускай делится методом своего решения если отличается чем-то от других. А тебя это каким боком вообще касается, а изи)? Я так сморю тебя зависть замучила))) основное время на слежку за мной тратишь, где бы зацепиться)))) займись делом, тогда и у тебя будет чем блеснуть. Хочешь блеснуть да не чем да)))
Фёкла24 уровень, Москва
25 May, 14:41
Просто оставлю это здесь
BufferedReader fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))
Шамиль19 уровень, Кисловодск
30 May, 20:26
Зачем?? Все равно тут не найдешь со временем)))) Лучше в тел. на заметки напиши))))
Herr Ives19 уровень
5 June, 08:24
у себя на странице оставь