|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Пересчет буквенных прав в цифровые в любом текстовом файле |
|
Java - Пересчет буквенных прав в цифровые в любом текстовом файле
|
Старожил Сообщения: 329 |
Профиль | Отправить PM | Цитировать
Мучаюсь второй день, не могу понять как реализовать.
В общем надо написать одну регулярное выражение которое охватывало сразу 4 варианта нахождения шаблона в строке согласно его позиции 1) вначале строки 2) в середине строки 3)в конце строки 4) только шаблон С 2м и 3м я сделал так Но это не применимо к началу строки: отрывает первый символ что стоит у шаблона, он тоже нужен(но тк он переменный то я его .* И обозначил) Ну а в 4м случае - тоже самое что и в начале строки. Может как то так: |
|
------- Отправлено: 00:03, 21-06-2017 |
Забанен Сообщения: 793
|
Иными словами lp файла нужно привести к чмодному виду, то есть, например, -rw-rw-rw- = 666, так?
|
Отправлено: 10:14, 21-06-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать greg zakharov, именно!
|
------- Отправлено: 10:18, 21-06-2017 | #12 |
Забанен Сообщения: 793
|
|
Отправлено: 10:22, 21-06-2017 | #13 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать greg zakharov, не вариант. Данные например берутся из архива tar.gz или ещё чего лучше.
А с ls даже связываться не хочу. Лучше уж find /system -exec stat -c '%N %u %g %a' {} \; Но эта другая история. Вернёмся к нашим баранам про регулярку) |
------- Отправлено: 10:26, 21-06-2017 | #14 |
Забанен Сообщения: 793
|
Пфф, и что? Данные из тарбола трудно что ли разобрать в самом потоке? Пустая работа - бог в помощь.
|
Отправлено: 10:31, 21-06-2017 | #15 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать greg zakharov, с таким подходом на 90% задач можете сказать: "нафиг вам это не нужно, найдите специалиста"
|
------- Отправлено: 10:35, 21-06-2017 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, всё, что Вам нужно — определить шаблон для всех возможных вариантов выдачи набора прав, и только. Я не специалист по Unix, я могу ориентироваться только по указанным статьям в wiki. Посему Вам должно быть виднее, что где подставить в шаблон регулярного выражения.
|
Отправлено: 10:42, 21-06-2017 | #17 |
Забанен Сообщения: 793
|
blackeangel, акститесь, уважаемый! Есть три типа людей: те, кто делают, те, кто понимают что делают и те, кто понимают что делают, но делают рационально. К последнему типу Вы явно не относитесь.
|
Отправлено: 10:49, 21-06-2017 | #18 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Так как мне никто не помог, кроме Iska - идеей, что уже весьма ценно, немного подумав, все таки решил реализовать идею с replaceAll. Получилось коротенечко. Кому интересно вот:
//пересчет прав в любом текстовом файле --> public static void RecalcRules() { String InputTextFile; JFileChooser fileopen = new JFileChooser(); int ret = fileopen.showDialog(null, "Открыть файл"); if (ret == JFileChooser.APPROVE_OPTION) { File file = fileopen.getSelectedFile(); InputTextFile = file.getAbsolutePath(); } else { return; } String OutTextFile = InputTextFile + "_new"; BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(InputTextFile)); } catch (FileNotFoundException e) { e.printStackTrace(); } String line; Pattern pattern = Pattern.compile("[-|l|s|d|b|c|p]([r|-][w|-][x|-]){3}"); try { while ((line = reader.readLine()) != null) { Matcher matcher = pattern.matcher(line); if (matcher.find()) { line = line.replaceAll(matcher.group(), getDigits(matcher.group())); writefile(OutTextFile,line); }else{ writefile(OutTextFile,line); } } } catch (IOException e1) { e1.printStackTrace(); } } //пересчет прав в любом текстовом файле <-- //калькулятор прав public static String getDigits(String s) { if (!s.matches("^.*([r|-][w|-][x|-]){3}$")) { throw new IllegalArgumentException("Achtung!"); } Function<String, String> rwxMapper = rwx -> String.valueOf(Integer.parseInt(rwx.replaceAll("[rwx]", "1").replaceAll("-", "0"), 2)); return Arrays.stream(s.substring(s.length() - 9).split("(?<=\\G...)")).map(rwxMapper).collect(joining()); } //запись в файл public static void writefile(String FileName, String text) { PrintWriter writer = null; try { writer = new PrintWriter(new BufferedWriter(new FileWriter(FileName, true))); } catch (IOException e) { e.printStackTrace(); } writer.print(text + "\n"); writer.close(); } |
------- Последний раз редактировалось blackeangel, 25-06-2017 в 16:25. Причина: код стал короче и быстрее + невыложенные ранее функции Отправлено: 01:09, 25-06-2017 | #19 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
.NET - Регулярное выражение | LilLoco | Программирование и базы данных | 19 | 04-05-2016 09:36 | |
CMD/BAT - [решено] Регулярное выражение | micolo | Скриптовые языки администрирования Windows | 5 | 06-03-2014 20:23 | |
Debian/Ubuntu - grep регулярное выражение | Forpost | Общий по Linux | 3 | 25-05-2012 00:50 | |
Регулярное выражение | venuko | Вебмастеру | 11 | 02-08-2010 18:18 | |
Регулярное выражение | benya | Вебмастеру | 27 | 26-08-2005 14:34 |
|