PDA

Показать полную графическую версию : [решено] Пробел в имени файла на vb6.0


Страниц : 1 [2] 3

Iska
12-02-2017, 21:41
Что значит «частичное совпадение»? Поясните и проиллюстрируйте кодом.

blackeangel
12-02-2017, 21:49
Что значит «частичное совпадение»? Поясните и проиллюстрируйте кодом.

For i = 1 To UBound(Arr1, 1)
For j = 1 To UBound(Arr2, 1)
If Len(Arr2(j, 1)) > 0 Then
If InStr(1, Arr2(j, 1), Arr1(i, 1)) > 0 Then
Arr2(j, 2) = Arr1(i, 1)
End If
End If
Next j
Next i

For i = 1 To UBound(Arr3, 1)
For j = 1 To UBound(Arr2, 1)
If Len(Arr2(j, 1)) > 0 Then
If InStr(1, Arr2(j, 1), Arr3(i, 1)) > 0 Then
Arr2(j, 3) = Arr3(i, 1)
End If
End If
Next j
Next i
rn = Arr2

Например 2 массива, в одном есть перечень обозначений, во втором такой же перечень но с различными добавками на конце. Надо наложить один массив на другой, и определить есть или нет хотя бы обозначений из массива 2 в массиве 1. То есть только instr. Словарь такое может?

ПС вы даже не сходили по ссылке и не глянули что например в массиве я потом делю на файлы и папки те строки. Словарь это тоже не может. Ну и зачем инструмент который не может того что мне нужно? Да, он быстрый, но не гибкий.

Iska
12-02-2017, 22:32
blackeangel, «проиллюстрируйте кодом» подразумевает код, который можно исполнить и увидеть результат. То есть, готовый пример. Каково содержимое Arr1, Arr2 и Arr3?

ПС вы даже не сходили по ссылке и не глянули »
Я ходил и глядел. У меня нет большого желания сидеть и детально разбираться в портянке плохо структурированного кода. Смотрю на него — и будто во времена Fortran-IV вернулся. Я про то и говорю, что Вы зарылись в эти массивы, и не делаете ни шага влево, ни шага вправо, хотя есть ещё целая куча объектов, но Вы их не используете.

например в массиве я потом делю на файлы и папки те строки. Словарь это тоже не может. »
Может, может ;).

Ваш шаблон подо все подойдет? Вроде да. Или ошибаюсь? »
Прогнал по шаблону — совпали все строки.

P.S. Добавлю ещё про массивы: у Вас куча кода уходит попросту на борьбу с недостатками многомерных массивов.

blackeangel
13-02-2017, 06:54
Может, может ;).

Ну ка ну ка, а то вдруг откажусь сегодня ж от массивов?

P.S. Добавлю ещё про массивы: у Вас куча кода уходит попросту на борьбу с недостатками многомерных массивов.
Количество строк мне не мешает ;)
Ну ка что там за борьба с коррупцией?

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

blackeangel
14-02-2017, 21:36
Iska, трудно было подсказать?
Вот так работает в массив
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
If objRegExp.Test(elem) Then
With objRegExp.Execute(elem).Item(0).Submatches
For i = 0 To .Count - 1
arr(j, i) = .Item(i)
Next
j = j + 1
End With
End If
Next
End Sub

Iska
15-02-2017, 15:34
blackeangel, подсказать мне не трудно. Но Вы должны отчётливо понимать две вещи:

Размещать, а затем удалять свои сообщения, имеющие существенное отношение к теме, не есть красиво и правильно.
Iska не сидит в ожидании вопроса на конференции днями и ночами для немедленного обслуживания клиентов пользователей, он обычный человек со своими потребностями и обязанностями.

blackeangel
18-02-2017, 21:09
blackeangel, подсказать мне не трудно.
В чем же тогда было дело? Зачем надо было настаивать на том что не нужно?
В прочем, этот форум не для выяснения отношений.
А теперь о погоде.
Как теперь наступила пора подобрать другой шаблон разбивающий на 2 столбца например, такое

/system/children mad u:object_r:childrens mad

Где разделитель на столбцы может быть одним, двумя, тремя ... n пробелами. Вторая часть всегда начинается с u:object_r:
Что надо менять уже в имеющемся шаблоне?

Iska
19-02-2017, 01:28
В чем же тогда было дело? »
Я же написал — в чём. В предыдущем собщении.

Что надо менять уже в имеющемся шаблоне? »
Как-то так (не проверялось):
^(.+) +(u:object_r:.*)$
Ну, и подгрупп будет, соответственно, две.

Если не сработает, попробуйте заэкранировать часть шаблона так: «u\:object_r\:». Не помню, надо ли экранировать двоеточие, або нет.

blackeangel
19-02-2017, 22:16
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы....
в переменных типа такого проскакивает

"/system/bin/mcd "

а хотелось бы чтобы разбивал правильно

"/system/bin/mcd"

Iska
19-02-2017, 23:27
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы.... »
Вот что значит — не проверять. Попробуйте так (и опять не проверялось :)):
^(.+?) +(u:object_r:.*)$

blackeangel
20-02-2017, 14:38
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы.... »
Вот что значит — не проверять. Попробуйте так (и опять не проверялось :)):
^(.+?) +(u:object_r:.*)$
Отлично сработало, спасибо.
А вот если есть пробелы в конце строки, то можно шаблон расширить для этого? Или все таки лучше заменами?

Iska
20-02-2017, 15:28
А вот если есть пробелы в конце строки, »
Например? Так:
/system/children mad____u:object_r:childrens mad_____
скажем?!

Тогда можно попробовать так:
^(.+?) +(u:object_r:.*?) *$

Update: Ну, вот, опять: концевые пробелы в тэге code движок хранит, но не отображает. Поменял пробелы на подчёркивания.

blackeangel
20-02-2017, 16:17
А вот если есть пробелы в конце строки, »
Например? Так:
/system/children mad____u:object_r:childrens mad_____
скажем?!

Тогда можно попробовать так:
^(.+?) +(u:object_r:.*?) *$

Update: Ну, вот, опять: концевые пробелы в тэге code движок хранит, но не отображает. Поменял пробелы на подчёркивания.
Не, не прокатывает, тоже уже попробовал. :(

Iska
20-02-2017, 16:26
Не, не прокатывает, тоже уже попробовал. »
А у меня прокатывает:
Option Explicit

Dim strString


strString = "/system/children mad u:object_r:childrens mad "

With WScript.CreateObject("VBScript.RegExp")
.Pattern = "^(.+?) +(u:object_r:.*?) *$"

If .Test(strString) Then
With .Execute(strString).Item(0).Submatches
WScript.Echo "[" & .Item(0) & "]"
WScript.Echo "[" & .Item(1) & "]"
End With
End If
End With

WScript.Quit 0


[/system/children mad]
[u:object_r:childrens mad]
Если у Вас не так — выкладывайте образец исходного файла, упакованный в архив.

blackeangel
20-02-2017, 18:30
Iska, странно, так же пробовал и по нулям. Вот файле.

Iska
20-02-2017, 19:26
А где там, простите, пробелы между именами и «u:object_r:», ась? Я лично вижу там малоудобоваримую мешанину из символов табуляции, пробелов и дефисов:
http://i.imgur.com/LQPNXkL.png
Каким образом Вы получаете данный файл?

P.S. Попробуйте такой шаблон:
^(.+?)[ \t-]+(u:object_r:.*?) *$

blackeangel
20-02-2017, 19:49
Iska, между именами в этом файле нет, но есть в конце строк.
Дефисы двойные и табы заменяются на пробелы.
Опять же, его делает производитель прошивок.

Iska
20-02-2017, 20:02
blackeangel, я работаю с тем файлом, который Вы выкладываете, не строя каких-то иных предположений. У меня шаблон, показанный в сообщении #36 (http://forum.oszone.net/post-2713427-36.html), корректно разбирает строки выложенного Вами файла на две подгруппы. А у Вас?

blackeangel
20-02-2017, 21:51
Iska, а у меня нет, пробелы в конце остаются, смотрите скриншоты
и, думаю вместо [ \t-]
надо использовать [\s-]

Iska
20-02-2017, 23:04
Не подтверждаю.
Option Explicit

Sub Main()
Dim objFSO As New FileSystemObject
Dim arrContent() As String
Dim objRegExp As New RegExp
Dim objTokens As New Dictionary

Dim strString As Variant


With objFSO.OpenTextFile("\\tsclient\C\Мои проекты\0046\file_contexts")
arrContent = Split(.ReadAll(), vbLf)
.Close
End With

objRegExp.Pattern = "^(.+?)[ \t-]+(u:object_r:.*?) *$"

For Each strString In arrContent
Debug.Print strString

If objRegExp.Test(strString) Then
With objRegExp.Execute(strString).Item(0).SubMatches
Debug.Print "[" & .Item(0) & "]"
Debug.Print "[" & .Item(1) & "]"
End With
End If

Debug.Print
Next

Set objRegExp = Nothing
Set objFSO = Nothing
End Sub
/system/bin/logcat -- u:object_r:logcat_exec:s0
[/system/bin/logcat]
[u:object_r:logcat_exec:s0]

/system/bin/sh -- u:object_r:shell_exec:s0
[/system/bin/sh]
[u:object_r:shell_exec:s0]

/system/bin/run-as -- u:object_r:runas_exec:s0
[/system/bin/run-as]
[u:object_r:runas_exec:s0]
http://i.imgur.com/thfv31j.png

и, думаю вместо [ \t-] надо использовать [\s-] »
Не вижу принципиальной необходимости.




© OSzone.net 2001-2012