Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Пересчет буквенных прав в цифровые в любом текстовом файле

Ответить
Настройки темы
Java - Пересчет буквенных прав в цифровые в любом текстовом файле

Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: blackeangel
Дата: 25-06-2017
Мучаюсь второй день, не могу понять как реализовать.

В общем надо написать одну регулярное выражение которое охватывало сразу 4 варианта нахождения шаблона в строке согласно его позиции
1) вначале строки
2) в середине строки
3)в конце строки
4) только шаблон
С 2м и 3м я сделал так
Код: Выделить весь код
"^(.*)(.*shablon)(.*)$"
Но это не применимо к началу строки: отрывает первый символ что стоит у шаблона, он тоже нужен(но тк он переменный то я его .* И обозначил)
Ну а в 4м случае - тоже самое что и в начале строки.
Может как то так:
Код: Выделить весь код
"^(.*?)(.*shablon)(.*?)$"

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 00:03, 21-06-2017

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Иными словами lp файла нужно привести к чмодному виду, то есть, например, -rw-rw-rw- = 666, так?

Отправлено: 10:14, 21-06-2017 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


greg zakharov, именно!

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 10:18, 21-06-2017 | #12


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Тогда как на счет stat?
Код: Выделить весь код
$ ls -l .bashrc
-rw-r--r-- 1 User 197121 7,3K янв 10 13:45 .bashrc

$ stat -c %a .bashrc
644

Отправлено: 10:22, 21-06-2017 | #13


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


greg zakharov, не вариант. Данные например берутся из архива tar.gz или ещё чего лучше.
А с ls даже связываться не хочу. Лучше уж
find /system -exec stat -c '%N %u %g %a' {} \;
Но эта другая история.
Вернёмся к нашим баранам про регулярку)

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 10:26, 21-06-2017 | #14


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Пфф, и что? Данные из тарбола трудно что ли разобрать в самом потоке? Пустая работа - бог в помощь.

Отправлено: 10:31, 21-06-2017 | #15


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


greg zakharov, с таким подходом на 90% задач можете сказать: "нафиг вам это не нужно, найдите специалиста"

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 10:35, 21-06-2017 | #16


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


blackeangel, всё, что Вам нужно — определить шаблон для всех возможных вариантов выдачи набора прав, и только. Я не специалист по Unix, я могу ориентироваться только по указанным статьям в wiki. Посему Вам должно быть виднее, что где подставить в шаблон регулярного выражения.

Отправлено: 10:42, 21-06-2017 | #17


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


blackeangel, акститесь, уважаемый! Есть три типа людей: те, кто делают, те, кто понимают что делают и те, кто понимают что делают, но делают рационально. К последнему типу Вы явно не относитесь.

Отправлено: 10:49, 21-06-2017 | #18


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Пересчет буквенных прав в цифровые в любом текстовом файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.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




 
Переход