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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Пробел в имени файла на vb6.0

Ответить
Настройки темы
Разное - [решено] Пробел в имени файла на vb6.0

Аватара для blackeangel

Старожил


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

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


Изменения
Автор: blackeangel
Дата: 12-02-2017
Всем привет.
Как разбить на колонки строку
Код: Выделить весь код
File name 0 0 755
По пробелу?
Что делать если имя файла содержит пробел?
Сплит разобьет на 5 столбцов, а надо на 4: file name в первом столбце, а все остальное вследующих.

Отправлено: 13:56, 01-02-2017

 

Ветеран


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

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


Ну, тогда как-то так:
Код: Выделить весь код
^(.+) (\d+) (\d+) (\d+)(?:| (.+))$
VB6 у меня под рукой нету, на WSH выглядит так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim arrContent
Dim objRegExp

Dim elem
Dim i


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With objFSO.OpenTextFile("C:\Мои проекты\0041\0001.txt")
	arrContent = Split(.ReadAll(), vbCrLf)
	.Close
End With

Set objRegExp = WScript.CreateObject("VBScript.RegExp")

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

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

Set objRegExp = Nothing
Set objFSO = Nothing

WScript.Quit 0

Скрытый текст

Обратите внимание: поскольку Вы пишете про «андроид, юникс система» — вероятно, концы строк в файле будут в формате Unix, и тогда потребуется заменить в Split() vbCrLf на vbLf.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:52, 09-02-2017 | #11



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

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


Аватара для blackeangel

Старожил


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

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


Iska, классно работает, но разжуйте этот кусок
Код: Выделить весь код
For Each elem In arrContent
	WScript.Echo elem 'вывод 
	
	If objRegExp.Test(elem) Then
		With objRegExp.Execute(elem).Item(0).Submatches
			For i = 0 To .Count - 1
				WScript.Echo vbTab, i, ": [" & .Item(i) & "]" 'вывод 
			Next
		End With
	End If
	WScript.Echo 'вывод 
Next
Особенно эти 3 строки
Код: Выделить весь код
	If objRegExp.Test(elem) Then
		With objRegExp.Execute(elem).Item(0).Submatches
			For i = 0 To .Count - 1
И как выводить все это не на экран, а в массив?
А VB6 портативный вот https://yadi.sk/d/5TQWB-A83DvtLx

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


Последний раз редактировалось blackeangel, 12-02-2017 в 15:57. Причина: ми6


Отправлено: 15:52, 12-02-2017 | #12


Ветеран


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

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



Цитата blackeangel:
А VB6 портативный вот https://yadi.sk/d/5TQWB-A83DvtLx »
Я, пожалуй, воздержусь от такого.

Цитата blackeangel:
И как выводить все это не на экран, а в массив? »
А зачем Вам массив? Что Вы с ним делать будете? Ладно, число токенов известно заранее — пять, но число строк-то неизвестно. И делать каждый раз Redim Preserve?! Или сначала посчитать строки, а затем определять размер массива?! Ни то, ни другое не есть хорошо и правильно. Здесь я бы использовал словарь, содержащий в качестве ключа — саму строку, а в качестве значения — коллекцию SubMatches из токенов.

Код — чтение из файла в словарь и пример работы со словарём
Код: Выделить весь код
Option Explicit

Sub Main()
    Dim objFSO As New FileSystemObject
    Dim arrContent() As String
    Dim objRegExp As New RegExp
    Dim objTokens As New Dictionary
    
    Dim elem As Variant
    Dim i As Integer
    
    Dim strKey As Variant
    Dim strToken As Variant
    
    
    With objFSO.OpenTextFile("C:\Temp\0002\0001.txt")
        arrContent = Split(.ReadAll(), vbCrLf)
        .Close
    End With
    
    objRegExp.Pattern = "^(.+) (\d+) (\d+) (\d+)(?:| (.+))$"
    
    For Each elem In arrContent
        If objRegExp.Test(elem) Then
            With objRegExp.Execute(elem).Item(0)
                objTokens.Add elem, .Submatches
            End With
        End If
    Next elem
    
    For Each strKey In objTokens
        Debug.Print strKey
        
        For Each strToken In objTokens.Item(strKey)
            Debug.Print vbTab, i, ": [" & strToken & "]"
        Next strToken
    Next strKey
    
    Set objRegExp = Nothing
    Set objFSO = Nothing
End Sub
Картинка с демонстрацией результата работы кода

Сам проект в архиве: SampleProject.7z.

Отправлено: 17:42, 12-02-2017 | #13


Ветеран


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

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


Цитата blackeangel:
но разжуйте этот кусок »
Код: Выделить весь код
For Each elem In arrContent ' Для каждого элемента из массива строк…
	WScript.Echo elem
	
	If objRegExp.Test(elem) Then ' Строка подходит под заданный шаблон?
		With objRegExp.Execute(elem).Item(0).Submatches ' Наложить шаблон на строку, взять первое из совпадений, взять для него коллекцию подгрупп
			For i = 0 To .Count - 1 ' Перебрать всю коллекцию подгрупп, от первого её элемента до последнего
				WScript.Echo vbTab, i, ": [" & .Item(i) & "]" ' Вывести очередную подгруппу
			Next
		End With
	End If

	WScript.Echo
Next

Отправлено: 17:50, 12-02-2017 | #14


Аватара для blackeangel

Старожил


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

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


Iska, количество строк тоже известно оно равно кол-ву строк прочитанного файла.А вот как записать это в массив это что то не понятное. 2 раза for? 1й по количеству строк, второй по столбцам.
Что с массивом делать буду? Ой, много чего. И так крутить и сяк вертеть и накладывать на другой.
Код: Выделить весь код
For i = 0 To .Count - 1
For k = LBound(arrContent) to UBound(arrContent)
For l = 0 to 4
arr(k,l) = arrContent(l)
Next: Next: Next
Или как то по другому?

Последний раз редактировалось blackeangel, 12-02-2017 в 21:07.


Отправлено: 18:54, 12-02-2017 | #15


Ветеран


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

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


Цитата blackeangel:
Iska, количество строк тоже известно оно равно кол-ву строк прочитанного файла. »
blackeangel, а) заранее не известно и б) кто сказал, что все строки попадут под шаблон? Так что так.

Цитата blackeangel:
Что с массивом делать буду? Ой, много чего. И так крутить и сяк вертеть и накладывать на другой. »
Ну, давайте, рассказывайте как обгонял, как подрезал, что и как будете с ним делать. Хотелось бы увидеть и понять преимущества использования в данном конкретном случае массива перед тем же словарём или таблицей базы данных.

Цитата blackeangel:
Или как то по другому? »
От Вы упорный. Говорю же — нельзя заранее предсказать, сколько строк попадёт под шаблон. Да даже тупо будет где-нибудь пустая строка (например, в конце файла) — и уже отличие. Поизвращаться можно, но я хочу понять — зачем.

Отправлено: 19:38, 12-02-2017 | #16


Аватара для blackeangel

Старожил


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

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


Цитата Iska:
Цитата blackeangel:
Iska, количество строк тоже известно оно равно кол-ву строк прочитанного файла. »
blackeangel, а) заранее не известно и б) кто сказал, что все строки попадут под шаблон? Так что так.

Цитата blackeangel:
Что с массивом делать буду? Ой, много чего. И так крутить и сяк вертеть и накладывать на другой. »
Ну, давайте, рассказывайте как обгонял, как подрезал, что и как будете с ним делать. Хотелось бы увидеть и понять преимущества использования в данном конкретном случае массива перед тем же словарём или таблицей базы данных.

Цитата blackeangel:
Или как то по другому? »
От Вы упорный. Говорю же — нельзя заранее предсказать, сколько строк попадёт под шаблон. Да даже тупо будет где-нибудь пустая строка (например, в конце файла) — и уже отличие. Поизвращаться можно, но я хочу понять — зачем.
Ну пустая строка в конце файла это не проблема - гонять цикл на одну строку меньше.
Так шаблон один, как вы говорите, универсальный, так и кладем его на файл, который читаем. В котором куча всего.

Отправлено: 20:17, 12-02-2017 | #17


Аватара для blackeangel

Старожил


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

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


Например, содержимое этого файла надо загнать в массив, разбить на столбцы. Ваш шаблон подо все подойдет? Вроде да. Или ошибаюсь? Я старался предусмотреть все варианты.
А что с ним делается дальше смотрите тут
https://gist.github.com/blackeangel/...239ad6898343e6

Последний раз редактировалось blackeangel, 03-04-2017 в 22:53.


Отправлено: 20:25, 12-02-2017 | #18


Ветеран


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

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


Цитата blackeangel:
А что с ним делается дальше смотрите тут »
blackeangel, словами, словами рассказывайте. Чем и как массив лучше словаря или таблицы БД.

Отправлено: 20:31, 12-02-2017 | #19


Аватара для blackeangel

Старожил


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

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


Цитата Iska:
Цитата blackeangel:
А что с ним делается дальше смотрите тут »
blackeangel, словами, словами рассказывайте. Чем и как массив лучше словаря или таблицы БД.
БД вообще мне не нужна для задачи.
А словарь не катит ТК не поддерживает частичного совпадения. И самое главное - про словарь не знаю ничего, не разу им не пользовался, обходился массивами всегда.

Отправлено: 20:59, 12-02-2017 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Пробел в имени файла на vb6.0

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - копирование выбранного файла в определенное место и добавление к имени файла даты x800 Скриптовые языки администрирования Windows 0 19-02-2014 20:39
CMD/BAT - Использование имени файла для правки в теле файла. xkafkax Скриптовые языки администрирования Windows 8 20-07-2013 11:06
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
Ошибка - Каракули в реестре "Синтаксическая ошибка в имени файла,имени папки или метке тома" permas Microsoft Windows 2000/XP 2 20-02-2010 19:30
Разное - [решено] Пробел в конце имени папки DuoStorm Microsoft Windows 2000/XP 1 17-04-2008 19:18




 
Переход