powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Пробел в имени файла
25 сообщений из 58, страница 2 из 3
Пробел в имени файла
    #39397043
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но есть в файле такие строки как:
Код: vbnet
1.
system/app/MetokNLP/lib/arm64/liblocSDK 2 5OEMXXX.so 0 0 644 /system/lib64/liblocSDK 2 5OEMXXX.so

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

С другой стороны, разнообразие чисел в примере ограничено: 0, 2000, 755, 644
Может стоит жестко задать их набор?
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39399665
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

0555, 0550,1301 и т.д.
Этих чисел много :(
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404398
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
А как это все затронуть в массив?
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404399
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Засунуть в массив
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404402
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Private Sub Command1_Click()
Dim objFSO
Dim arrContent
Dim objRegExp

Dim elem
Dim i


Set objFSO = CreateObject("Scripting.FileSystemObject")

With objFSO.OpenTextFile("C:\system_statfile.txt")
    arrContent = Split(.ReadAll(), vbCrLf)
    .Close
End With
ReDim arr(UBound(arrContent), 4)
Set objRegExp = CreateObject("VBScript.RegExp")

objRegExp.Pattern = "^(.+) (\d+) (\d+) (\d+)(?:| (.+))$"
'

    For Each elem In arrContent
For j = 0 To UBound(arrContent)
        If objRegExp.Test(elem) Then
         With objRegExp.Execute(elem).Item(0).Submatches
            For i = 0 To .Count - 1
                        arr(j, i) = .Item(i)
                'WScript.Echo vbTab, i, ": [" & .Item(i) & "]"
            Next
            
        End With
    End If
Next
Stop
Next
End Sub


Что тут не так? Он одну и ту же запись лепит везде. Вот файл. Помогите добить?
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404448
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel
Код: vbnet
1.
2.
    For Each elem In arrContent
For j = 0 To UBound(arrContent)

Зачем два вложенных цикла по одному и тому же массиву? Либо один, либо другой.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404455
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Типы разные: elem - string
j - integer
И одно на другое подменить не прокатит. Как переделать? Что то мозг иссох уже.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404457
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мешает?
Код: vbnet
1.
2.
For j = 0 To UBound(arrContent)
  elem = arrContent(j)



можно и наоборот
Код: vbnet
1.
2.
For Each elem In arrContent
  j = j + 1
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404458
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, не очень хорошая идея читать весь файл в память.
Что мешает читать и обрабатывать его построчно?
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404466
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЧто мешает?
Код: vbnet
1.
2.
For j = 0 To UBound(arrContent)
  elem = arrContent(j)



можно и наоборот
Код: vbnet
1.
2.
For Each elem In arrContent
  j = j + 1


Спасибо, 2й вариант оправдал догадки.

А построчно чтение типа долгое...Мне так говорили, но правда это или нет, я не знаю.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39404482
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelА построчно чтение типа долгое...Мне так говорили, но правда это или нет, я не знаю.Если файл небольшой, то загрузка в память целиком - оправдана. С другой стороны, на маленьком файле и разницы не увидишь. Но логи, как правило, длинные, Как думаешь, что произойдет, если попытаешься считать разом 500Мб файл?
Впрочем, промежуточный массив с результатом при большом объеме - тоже не очень хорошая вещь, все зависит от того, что с этими данными планируется делать дальше.

Впрочем, это просто информация на будущее.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407293
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Хорошо, а теперь наступила пора подобрать другой шаблон развивающий на 2 столбца например, такое
/system/children mad u:object_r:childrens mad
Где разделитель на столбцы может быть одним, двумя, тремя ... n пробелами. Вторая часть всегда начинается с u:object_r:
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407331
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
"^(.*) +(u:object_r:.+)$"


BlackeAngelа теперь наступила поравидимо, наступила пора все-таки открыть учебник по регулярным выражениям.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407542
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы....
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407550
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

в переменных типа такого проскакивает
Код: vbnet
1.
"/system/bin/mcd          "


а хотелось бы чтобы разбивал правильно
Код: vbnet
1.
"/system/bin/mcd"
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407564
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это можно использовать как ваше первое задание по регулярным выражениям.
Добавить после второй группы произвольное количество пробелов, так чтобы они не попадали во вторую группу.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407575
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Так?
Код: vbnet
1.
"^(.*) +(\s) +(u:object_r:.+)$"
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407613
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват, я, засыпая, неверно прочел проблему, не второй столбец, а первый....
Надо просто использовать "ленивый квантификатор"
Код: vbnet
1.
"^(.*?) +(u:object_r:.+)$"


По умолчанию "жадный" захапал все пробелы себе в первую группу, "ленивый" оставил.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407746
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
А как еще в конце строки убрать все пробелы во втором столбце?
Что добавить надо ещё?
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407881
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelShocker.Pro,
А как еще в конце строки убрать все пробелы во втором столбце?
Что добавить надо ещё?
так их (пробелы) и добавить:
Код: vbnet
1.
"^(.*?) +(u:object_r:.+) *$"
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407941
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Не добавить, а убрать.
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407943
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Те пробелы, которых несколько, перед переносом строки.

Код: vbnet
1.
"/system/bin/sh mini      u:object:r_shell         "
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39407945
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А на выходе должно получиться 2 столбца
Код: vbnet
1.
"/system/bin/sh mini" "u:object:r_shell"
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39408065
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Shocker.Pro]BlackeAngelтак их (пробелы) и добавить:
Код: vbnet
1.
"^(.*?) +(u:object_r:.+) *$"


Такой код не проходит...
...
Рейтинг: 0 / 0
Пробел в имени файла
    #39408066
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Такое тоже не проходит
Код: vbnet
1.
^(.+?) +(u:object_r:.*?) *$


Вот файл - пример
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 2 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Пробел в имени файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]