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

Компьютерный форум 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

 

Аватара для shisik

Ветеран


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

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


blackeangel, а что мешает просто использоват шаблон и ничего лишнего? Вообще нужна конкретика, так задача не понятна.

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



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

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


Ветеран


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

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


Цитата shisik:
Вообще нужна конкретика, так задача не понятна. »
Угу. Не видим образцов строк, из которых нужно что-то получить, и не видим, что именно нужно получить.

Отправлено: 06:20, 21-06-2017 | #3


Забанен


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

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


Видимо автор темы считает, что все с ним на одной волне, а потому вполне могут телепатировать что же он там хочет найти.

Отправлено: 08:25, 21-06-2017 | #4


Аватара для blackeangel

Старожил


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

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


shisik, Iska, greg zakharov,
Мужики, это ж задача из разряда универсальных. Ну если вам надо на основании чего то, то тогда давай те на основе моих данных
Скрытый текст

Вначале строки
Код: Выделить весь код
drwxr-xr-x 0/0               0 2017-04-01 09:15 /system/app/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AnalyticsCore/
-rw-r--r-- 0/0            4635 2017-03-02 07:30 /system/app/AnalyticsCore/AnalyticsCore.apk
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AnalyticsCore/oat/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AnalyticsCore/oat/arm64/
-rw-r--r-- 0/0          742144 2017-03-02 07:30 /system/app/AnalyticsCore/oat/arm64/AnalyticsCore.odex
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AntHalService/
-rw-r--r-- 0/0           11669 2017-03-02 07:30 /system/app/AntHalService/AntHalService.apk
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AntHalService/oat/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AntHalService/oat/arm64/
-rw-r--r-- 0/0           62208 2017-03-02 07:30 /system/app/AntHalService/oat/arm64/AntHalService.odex
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AntiSpam/
-rw-r--r-- 0/0         3499207 2017-03-02 07:30 /system/app/AntiSpam/AntiSpam.apk
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AntiSpam/oat/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AntiSpam/oat/arm64/
-rw-r--r-- 0/0         1487616 2017-03-02 07:30 /system/app/AntiSpam/oat/arm64/AntiSpam.odex
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AppIndexProvider/
-rw-r--r-- 0/0           12047 2017-03-02 07:30 /system/app/AppIndexProvider/AppIndexProvider.apk
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AppIndexProvider/oat/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AppIndexProvider/oat/arm64/
-rw-r--r-- 0/0          131840 2017-03-02 07:30 /system/app/AppIndexProvider/oat/arm64/AppIndexProvider.odex
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/ApplicationsProvider/
-rw-r--r-- 0/0           17260 2017-03-02 07:30 /system/app/ApplicationsProvider/ApplicationsProvider.apk
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/ApplicationsProvider/oat/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/ApplicationsProvider/oat/arm64/
-rw-r--r-- 0/0           62208 2017-03-02 07:30 /system/app/ApplicationsProvider/oat/arm64/ApplicationsProvider.odex
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AutoTest/
-rw-r--r-- 0/0           38135 2017-03-02 07:30 /system/app/AutoTest/AutoTest.apk
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AutoTest/oat/
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/AutoTest/oat/arm64/
-rw-r--r-- 0/0           25344 2017-03-02 07:30 /system/app/AutoTest/oat/arm64/AutoTest.odex
drwxr-xr-x 0/0               0 2017-03-30 20:52 /system/app/Bluetooth/
-rw-r--r-- 0/0          565609 2017-03-02 07:30 /system/app/Bluetooth/Bluetooth.apk
в середине строки
Код: Выделить весь код
 0/0               0 2017-04-01 09:15 drwxr-xr-x /system/app
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AnalyticsCore
 0/0            4635 2017-03-02 07:30 drwxr-xr-x /system/app/AnalyticsCore/AnalyticsCore.apk
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AnalyticsCore/oat
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AnalyticsCore/oat/arm64
 0/0          742144 2017-03-02 07:30 drwxr-xr-x /system/app/AnalyticsCore/oat/arm64/AnalyticsCore.odex
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AntHalService
 0/0           11669 2017-03-02 07:30 drwxr-xr-x /system/app/AntHalService/AntHalService.apk
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AntHalService/oat
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AntHalService/oat/arm64
 0/0           62208 2017-03-02 07:30 drwxr-xr-x /system/app/AntHalService/oat/arm64/AntHalService.odex
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AntiSpam
 0/0         3499207 2017-03-02 07:30 drwxr-xr-x /system/app/AntiSpam/AntiSpam.apk
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AntiSpam/oat
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AntiSpam/oat/arm64
 0/0         1487616 2017-03-02 07:30 drwxr-xr-x /system/app/AntiSpam/oat/arm64/AntiSpam.odex
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AppIndexProvider
 0/0           12047 2017-03-02 07:30 drwxr-xr-x /system/app/AppIndexProvider/AppIndexProvider.apk
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AppIndexProvider/oat
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AppIndexProvider/oat/arm64
 0/0          131840 2017-03-02 07:30 drwxr-xr-x /system/app/AppIndexProvider/oat/arm64/AppIndexProvider.odex
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/ApplicationsProvider
 0/0           17260 2017-03-02 07:30 drwxr-xr-x /system/app/ApplicationsProvider/ApplicationsProvider.apk
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/ApplicationsProvider/oat
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/ApplicationsProvider/oat/arm64
 0/0           62208 2017-03-02 07:30 drwxr-xr-x /system/app/ApplicationsProvider/oat/arm64/ApplicationsProvider.odex
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AutoTest
 0/0           38135 2017-03-02 07:30 drwxr-xr-x /system/app/AutoTest/AutoTest.apk
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AutoTest/oat
 0/0               0 2017-03-30 20:52 drwxr-xr-x /system/app/AutoTest/oat/arm64
 0/0           25344 2017-03-02 07:30 drwxr-xr-x /system/app/AutoTest/oat/arm64/AutoTest.odex
вконце строки
Код: Выделить весь код
 0/0               0 2017-04-01 09:15 /system/app/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/AnalyticsCore/ drwxr-xr-x
 0/0            4635 2017-03-02 07:30 /system/app/AnalyticsCore/AnalyticsCore.apk -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AnalyticsCore/oat/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/AnalyticsCore/oat/arm64/ drwxr-xr-x
 0/0          742144 2017-03-02 07:30 /system/app/AnalyticsCore/oat/arm64/AnalyticsCore.odex -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AntHalService/ drwxr-xr-x
 0/0           11669 2017-03-02 07:30 /system/app/AntHalService/AntHalService.apk -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AntHalService/oat/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/AntHalService/oat/arm64/ drwxr-xr-x
 0/0           62208 2017-03-02 07:30 /system/app/AntHalService/oat/arm64/AntHalService.odex -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AntiSpam/ drwxr-xr-x
 0/0         3499207 2017-03-02 07:30 /system/app/AntiSpam/AntiSpam.apk -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AntiSpam/oat/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/AntiSpam/oat/arm64/ drwxr-xr-x
 0/0         1487616 2017-03-02 07:30 /system/app/AntiSpam/oat/arm64/AntiSpam.odex -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AppIndexProvider/ drwxr-xr-x
 0/0           12047 2017-03-02 07:30 /system/app/AppIndexProvider/AppIndexProvider.apk -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AppIndexProvider/oat/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/AppIndexProvider/oat/arm64/ drwxr-xr-x
 0/0          131840 2017-03-02 07:30 /system/app/AppIndexProvider/oat/arm64/AppIndexProvider.odex -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/ApplicationsProvider/ drwxr-xr-x
 0/0           17260 2017-03-02 07:30 /system/app/ApplicationsProvider/ApplicationsProvider.apk -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/ApplicationsProvider/oat/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/ApplicationsProvider/oat/arm64/ drwxr-xr-x
 0/0           62208 2017-03-02 07:30 /system/app/ApplicationsProvider/oat/arm64/ApplicationsProvider.odex -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AutoTest/ drwxr-xr-x
 0/0           38135 2017-03-02 07:30 /system/app/AutoTest/AutoTest.apk -rw-r--r--
 0/0               0 2017-03-30 20:52 /system/app/AutoTest/oat/ drwxr-xr-x
 0/0               0 2017-03-30 20:52 /system/app/AutoTest/oat/arm64/ drwxr-xr-x
 0/0           25344 2017-03-02 07:30 /system/app/AutoTest/oat/arm64/AutoTest.odex -rw-r--r--

*все создано искусственно, так как никто не знает где что вылезет.
моя регулярка такая
Код: Выделить весь код
"^(.*)(.*[r|-][w|-][x|-][r|-][w|-][x|-][r|-][w|-][x|-])(.*)$"
но она только на 2,3 пункт распространяется.
Шаблоном является что то вот такое
Код: Выделить весь код
-rw-r--r--
в различных её вариантах

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


Отправлено: 09:37, 21-06-2017 | #5


Аватара для blackeangel

Старожил


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

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


shisik, моя задача состоит в том чтобы заменить этот шаблон на пересчитаные в числа эти буквы. Ну те кто знаком с Linux системами поймет.
Думал использовать replaceAll,но отказался от этой мысли, тк все равно надо читать файл в массив 2д.

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


Последний раз редактировалось blackeangel, 21-06-2017 в 09:59.


Отправлено: 09:54, 21-06-2017 | #6


Ветеран


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

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


Цитата blackeangel:
Мужики, это ж задача из разряда универсальных. »
blackeangel, для регулярных выражений не бывает универсальных задач. Шаблоны жёстко привязаны ко входному набору данных.

Цитата blackeangel:
так как никто не знает где что вылезет. »
Отнюдь. Форматы вполне определены, надо просто их знать.

Ваша регулярка может быть такой:
Код: Выделить весь код
[d-](?:[r-][w-][x-]){3}
Никаких привязок «в начале строки», «в середине строки», «в конце строки» в описанной Вами задаче делать не нужно.

WSH
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim objRegExp

Dim strFile

Dim arrContent
Dim strLine
Dim strPath

Set objFSO    = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

objRegExp.Pattern = "[d-](?:[r-][w-][x-]){3}"

For Each strFile In Array("0001.txt", "0002.txt", "0003.txt")
	WScript.Echo strFile
	
	With objFSO.OpenTextFile(strFile)
		arrContent = Split(.ReadAll(), vbCrLf)
		.Close
	End With
	
	For Each strLine In arrContent
		If objRegExp.Test(strLine) Then
			WScript.Echo objRegExp.Execute(strLine).Item(0).Value
		End If
	Next
Next

Set objRegExp = Nothing
Set objFSO    = Nothing

WScript.Quit 0


Если там, как писалось ранее, может быть l вместо d или - — добавьте в шаблон.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:59, 21-06-2017 | #7


Забанен


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

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


blackeangel, Ваш поток сознания трудно понять.
Цитата blackeangel:
Шаблоном является что то вот такое
А конкретней? Как понимать сие: искать строки начинающиеся с -rw-r--r--? Ежели так:
Код: Выделить весь код
^(-r[w|-]?){3}.*$'
Цитата blackeangel:
моя задача состоит в том чтобы заменить этот шаблон на пересчитаные в числа эти буквы
Бамо фучачо, адьос амигос, ибо дринк кальвадос. Еще раз - четко сформулируйте конечную цель и не взахлеб, а с чуством и расстановкой: что, куда, зачем?

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


Ветеран


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

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


greg zakharov, он хочет в произвольной строке а) найти заведомо однократно встречающийся перечень прав, б) перевести полученное шаблоном символьное значение в число и в) по тому же шаблону заменить найденное значение на посчитанное. Строго говоря, найти и заменить один вид вот этого: File system permissions - Wikipedia на другой.

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


Аватара для blackeangel

Старожил


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

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


greg zakharov, без паники
код мой такой
Код: Выделить весь код
public static String[] parsinganytextfile(String line) {
        ArrayList<String> result = new ArrayList<String>();
        Pattern pattern = Pattern.compile("^(.*)(.*[r|-][w|-][x|-][r|-][w|-][x|-][r|-][w|-][x|-])(.*)$");
        Matcher matcher = pattern.matcher(line);
        if (matcher.find()) {
            for (int i = 1; i <= matcher.groupCount(); ++i) {
                result.add(matcher.group(i));
            }
        }
        return result.toArray(new String[0]);
    }

    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";
        //погнали
        String[][] TextMass = new String[0][];
        try {
            TextMass = Files.lines(Paths.get(InputTextFile))
                    .map(g -> parsinganytextfile(g))
                    .toArray(String[][]::new);
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < TextMass.length; i++) {
            if (TextMass[0].length == 1) {
                Functions.writefile(OutTextFile, getDigits(TextMass[i][0].replace("s", "x")));
            }
            if (TextMass[0].length == 2) {
                     Functions.writefile(OutTextFile, getDigits(TextMass[i][0].replace("s", "x")) + " " + TextMass[i][1]);
            } else {
                Functions.writefile(OutTextFile, TextMass[i][0] + " " + getDigits(TextMass[i][1].replace("s", "x")) + " " + TextMass[i][2]);
            }
        }
    }

    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());
    }
Что делает: читает файл в двумерный массив, выодит из массива в новый файл заменяя уже пересчитыными значениями

Iska, бинго Но не факт что это тот способ верный.

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


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



Компьютерный форум 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




 
Переход