Показать полную графическую версию : [решено] Пробел в имени файла на vb6.0
Что значит «частичное совпадение»? Поясните и проиллюстрируйте кодом.
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. Словарь такое может?
ПС вы даже не сходили по ссылке и не глянули что например в массиве я потом делю на файлы и папки те строки. Словарь это тоже не может. Ну и зачем инструмент который не может того что мне нужно? Да, он быстрый, но не гибкий.
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
blackeangel, подсказать мне не трудно. Но Вы должны отчётливо понимать две вещи:
Размещать, а затем удалять свои сообщения, имеющие существенное отношение к теме, не есть красиво и правильно.
Iska не сидит в ожидании вопроса на конференции днями и ночами для немедленного обслуживания клиентов пользователей, он обычный человек со своими потребностями и обязанностями.
blackeangel
18-02-2017, 21:09
blackeangel, подсказать мне не трудно.
В чем же тогда было дело? Зачем надо было настаивать на том что не нужно?
В прочем, этот форум не для выяснения отношений.
А теперь о погоде.
Как теперь наступила пора подобрать другой шаблон разбивающий на 2 столбца например, такое
/system/children mad u:object_r:childrens mad
Где разделитель на столбцы может быть одним, двумя, тремя ... n пробелами. Вторая часть всегда начинается с u:object_r:
Что надо менять уже в имеющемся шаблоне?
В чем же тогда было дело? »
Я же написал — в чём. В предыдущем собщении.
Что надо менять уже в имеющемся шаблоне? »
Как-то так (не проверялось):
^(.+) +(u:object_r:.*)$
Ну, и подгрупп будет, соответственно, две.
Если не сработает, попробуйте заэкранировать часть шаблона так: «u\:object_r\:». Не помню, надо ли экранировать двоеточие, або нет.
blackeangel
19-02-2017, 22:16
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы....
в переменных типа такого проскакивает
"/system/bin/mcd "
а хотелось бы чтобы разбивал правильно
"/system/bin/mcd"
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы.... »
Вот что значит — не проверять. Попробуйте так (и опять не проверялось :)):
^(.+?) +(u:object_r:.*)$
blackeangel
20-02-2017, 14:38
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы.... »
Вот что значит — не проверять. Попробуйте так (и опять не проверялось :)):
^(.+?) +(u:object_r:.*)$
Отлично сработало, спасибо.
А вот если есть пробелы в конце строки, то можно шаблон расширить для этого? Или все таки лучше заменами?
А вот если есть пробелы в конце строки, »
Например? Так:
/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 движок хранит, но не отображает. Поменял пробелы на подчёркивания.
Не, не прокатывает, тоже уже попробовал. :(
Не, не прокатывает, тоже уже попробовал. »
А у меня прокатывает:
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, странно, так же пробовал и по нулям. Вот файле.
А где там, простите, пробелы между именами и «u:object_r:», ась? Я лично вижу там малоудобоваримую мешанину из символов табуляции, пробелов и дефисов:
http://i.imgur.com/LQPNXkL.png
Каким образом Вы получаете данный файл?
P.S. Попробуйте такой шаблон:
^(.+?)[ \t-]+(u:object_r:.*?) *$
blackeangel
20-02-2017, 19:49
Iska, между именами в этом файле нет, но есть в конце строк.
Дефисы двойные и табы заменяются на пробелы.
Опять же, его делает производитель прошивок.
blackeangel, я работаю с тем файлом, который Вы выкладываете, не строя каких-то иных предположений. У меня шаблон, показанный в сообщении #36 (http://forum.oszone.net/post-2713427-36.html), корректно разбирает строки выложенного Вами файла на две подгруппы. А у Вас?
blackeangel
20-02-2017, 21:51
Iska, а у меня нет, пробелы в конце остаются, смотрите скриншоты
и, думаю вместо [ \t-]
надо использовать [\s-]
Не подтверждаю.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC