Пробел в имени файла на vb6.0
Всем привет.
Как разбить на колонки строку Код:
File name 0 0 755 Что делать если имя файла содержит пробел? Сплит разобьет на 5 столбцов, а надо на 4: file name в первом столбце, а все остальное вследующих. |
Найти первое слово, вырезать его, а оставшуюся часть строки разбить. Похоже в VB это функции - InStr, Mid, Len.
|
Цитата:
Код:
system/box/book for children 0 0 644 /books/for people |
Как и другие ЯП Васик поддерживает регулярки, ими, собственно, и бейте строку. Самая регулярка будет в данном случае выглядить примерно так:
Код:
([a-z]+\/?\s?)+|\d+ |
Цитата:
Цитата:
Цитата:
В любом случае Вам следует сделать либо а) заранее позаботиться о содержимом исходной строки или б) найти методы, позволяющие однозначно судить о начале и конце каждого токена в строке. Например, для приведённых Вами вариантов воспользоваться регулярками по совету коллеги greg zakharov. |
Что то такое?
Код:
Dim re As Object, result As Object, i As Integer system/app/MetokNLP/lib/arm64/lib.so 0 0 644 |
Цитата:
Вы сначала определитесь, какие могут быть варианты, затем — по каким критериям для всех этих вариантов можно определить токены. Вот я вижу у Вас уже кучу вариантов: Код:
File name 0 0 755 |
Цитата:
А вот только пробелы справа, что то упустил. В общем возможные варианты: 1. Пробелы слева(относительно цифр) 2. Пробелы справа 3. Пробелы и справа и слева 4. Нет пробелов. Ну например. Код:
1. File name 0 0 755 |
blackeangel, Вы не поймёте, что я хочу услышать.
Что собой представляет данная строка? Откуда она берётся? Каким правилам подчиняется её содержимое? Что представляет собой каждый токен этой строки? Каким может быть содержимое каждого токена? Почему в одном случае их четыре, а в другом пять? |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Ну, тогда как-то так:
Код:
^(.+) (\d+) (\d+) (\d+)(?:| (.+))$ Скрытый текст
Код:
Option Explicit Скрытый текст
Обратите внимание: поскольку Вы пишете про «андроид, юникс система» — вероятно, концы строк в файле будут в формате Unix, и тогда потребуется заменить в Split() vbCrLf на vbLf. |
Iska, классно работает, но разжуйте этот кусок
Код:
For Each elem In arrContent Код:
If objRegExp.Test(elem) Then А VB6 портативный вот https://yadi.sk/d/5TQWB-A83DvtLx |
Вложений: 1
Цитата:
Цитата:
Код — чтение из файла в словарь и пример работы со словарём
Код:
Option Explicit Картинка с демонстрацией результата работы кода
Сам проект в архиве: Файл 143409. |
Цитата:
Код:
For Each elem In arrContent ' Для каждого элемента из массива строк… |
Iska, количество строк тоже известно оно равно кол-ву строк прочитанного файла.А вот как записать это в массив это что то не понятное. 2 раза for? 1й по количеству строк, второй по столбцам.
Что с массивом делать буду? Ой, много чего. И так крутить и сяк вертеть и накладывать на другой. Код:
For i = 0 To .Count - 1 |
Цитата:
Цитата:
Цитата:
|
Цитата:
Так шаблон один, как вы говорите, универсальный, так и кладем его на файл, который читаем. В котором куча всего. |
Например, содержимое этого файла надо загнать в массив, разбить на столбцы. Ваш шаблон подо все подойдет? Вроде да. Или ошибаюсь? Я старался предусмотреть все варианты.
А что с ним делается дальше смотрите тут https://gist.github.com/blackeangel/...239ad6898343e6 |
Цитата:
|
Цитата:
А словарь не катит ТК не поддерживает частичного совпадения. И самое главное - про словарь не знаю ничего, не разу им не пользовался, обходился массивами всегда. |
Что значит «частичное совпадение»? Поясните и проиллюстрируйте кодом.
|
Цитата:
Код:
For i = 1 To UBound(Arr1, 1) ПС вы даже не сходили по ссылке и не глянули что например в массиве я потом делю на файлы и папки те строки. Словарь это тоже не может. Ну и зачем инструмент который не может того что мне нужно? Да, он быстрый, но не гибкий. |
blackeangel, «проиллюстрируйте кодом» подразумевает код, который можно исполнить и увидеть результат. То есть, готовый пример. Каково содержимое Arr1, Arr2 и Arr3?
Цитата:
Цитата:
Цитата:
P.S. Добавлю ещё про массивы: у Вас куча кода уходит попросту на борьбу с недостатками многомерных массивов. |
Цитата:
Цитата:
Ну ка что там за борьба с коррупцией? И вообще, мы ушли от обсуждаемой темы. И занялись моим говнокодом, который даже еще не дописан и не оптимизирован. |
Iska, трудно было подсказать?
Вот так работает в массив Код:
Private Sub Command1_Click() |
blackeangel, подсказать мне не трудно. Но Вы должны отчётливо понимать две вещи:
|
Цитата:
В прочем, этот форум не для выяснения отношений. А теперь о погоде. Как теперь наступила пора подобрать другой шаблон разбивающий на 2 столбца например, такое Код:
/system/children mad u:object_r:childrens mad Код:
u:object_r: |
Цитата:
Цитата:
Код:
^(.+) +(u:object_r:.*)$ Если не сработает, попробуйте заэкранировать часть шаблона так: «u\:object_r\:». Не помню, надо ли экранировать двоеточие, або нет. |
Iska, все хорошо, только он оставляет пробелы в конце 1го столбца, а этого не надо бы....
в переменных типа такого проскакивает Код:
"/system/bin/mcd " Код:
"/system/bin/mcd" |
Цитата:
Код:
^(.+?) +(u:object_r:.*)$ |
Цитата:
А вот если есть пробелы в конце строки, то можно шаблон расширить для этого? Или все таки лучше заменами? |
Цитата:
Код:
/system/children mad____u:object_r:childrens mad_____ Тогда можно попробовать так: Код:
^(.+?) +(u:object_r:.*?) *$ |
Цитата:
|
Цитата:
Пример кода
Код:
Option Explicit Результат
Код:
[/system/children mad] Если у Вас не так — выкладывайте образец исходного файла, упакованный в архив. |
Iska, странно, так же пробовал и по нулям. Вот файле.
|
А где там, простите, пробелы между именами и «u:object_r:», ась? Я лично вижу там малоудобоваримую мешанину из символов табуляции, пробелов и дефисов:
Скрытый текст
Каким образом Вы получаете данный файл? P.S. Попробуйте такой шаблон: Код:
^(.+?)[ \t-]+(u:object_r:.*?) *$ |
Iska, между именами в этом файле нет, но есть в конце строк.
Дефисы двойные и табы заменяются на пробелы. Опять же, его делает производитель прошивок. |
blackeangel, я работаю с тем файлом, который Вы выкладываете, не строя каких-то иных предположений. У меня шаблон, показанный в сообщении #36, корректно разбирает строки выложенного Вами файла на две подгруппы. А у Вас?
|
Iska, а у меня нет, пробелы в конце остаются, смотрите скриншоты
и, думаю вместо Код:
[ \t-] Код:
[\s-] |
Не подтверждаю.
Вот код
Код:
Option Explicit Выжимки из вывода
Код:
/system/bin/logcat -- u:object_r:logcat_exec:s0 Вот скриншот
Цитата:
|
Iska, посмотрите что получилось в этих строках
Код:
/system(/.*)? u:object_r:system_file:s0 |
Поменял вывод групп в одну строку, на:
Код:
Debug.Print "[" & .Item(0) & "]" & vbTab & "[" & .Item(1) & "]" Код:
/system(/.*)? u:object_r:system_file:s0 |
Iska,
Код:
'file_contexts |
Iska, проблема решилась удалением всех строк с replace.
Спасибо. |
Цитата:
|
Время: 00:51. |
Время: 00:51.
© OSzone.net 2001-