Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / вырезать часть строки / 7 сообщений из 7, страница 1 из 1
03.04.2013, 14:54
    #38211218
Saules
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
Доброго всем дня,
есть 10 правильных вариантов, какие могут быть названия файлов
например:
01000732038001_ 20080410 _OP_P11.dgn
01000480030001002_ 20110609 _EGY.dgn
01000480040001006_ 20060403 _EGYS.dgn
01000482013001_ 20070302 _BAGS.dgn
01000482021_ 20070410 _BTS.dgn
01000510145001_ 20101203 _SZ_1.dgn
01000510145001_ 20101203 _SZ_99.dgn
01000510145_ 20101203 _UP.dgn
01000990084001_ 20111018 _EK_2.JPG
01000990084881_ 20111018 _EK_99.JPG
01000992360001_ 20120111 _IL_1.jpg
01000992360001_ 20120111 _IL_11.jpg

середина - это дата в формате ”yyyymmdd”
как вырезать из строки только эту часть и проверить на правильность формата даты?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Function GetFilename(ByVal sFileName As String) As String
  Dim lngLen As Long
   Dim sFName, sFName1, Last As String
   
Dim i, j As Integer
sFName1 = Left(sFileName, InStrRev(sFileName, ".") - 1)
Debug.Print sFName1

i = InStrRev(sFName1, "_")
If i > 0 Then
sFName = Left(sFName1, i - 1)
Debug.Print sFName
End If

j = InStrRev(sFName, "_")
If j > 0 Then
Last = Left(sFName, j - 1)
Debug.Print "Last = " & Last
End If

End Function



на данный момент не получается сделать ее универсальной для всех вариантов, а если точнее, то не получается вырезать дату. левую часть, до первого "_" получается, а остальное нет.
...
Рейтинг: 0 / 0
03.04.2013, 15:01
    #38211240
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
Спасут регулярные выражения.

\d+_(\d{6})_

В принципе можно вырезать ее сразу в формате dd.mm.yyyy, а потом проверить на валидность. Или заложить валидность в регулярку, но если не валидируется, то результата не будет.
...
Рейтинг: 0 / 0
03.04.2013, 15:02
    #38211244
запуск
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
Saules,

Код: vbnet
1.
2.
3.
dim s() as string
s=split("01000732038001_20080410_OP_P11.dgn","_")
msgbox s(1)



как то так
...
Рейтинг: 0 / 0
03.04.2013, 15:02
    #38211248
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
Код: vbnet
1.
2.
i = InStr(1, sFileName, "_")
Debug.Print Mid$(sFileName, i + 1, InStr(i + 1, sFileName, "_") - i - 1)
...
Рейтинг: 0 / 0
03.04.2013, 15:03
    #38211252
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
три ответа сразу )))
впрочем, ответ Запуска мне нравится больше моего )
...
Рейтинг: 0 / 0
03.04.2013, 15:12
    #38211290
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
Ну и я что ли кодом разрожусь...

Код: vbnet
1.
2.
3.
4.
5.
Set rx = CreateObject("VBScript.RegExp")
rx.Pattern = "(\d+_)(\d{4})(\d\d)(\d\d)(_.*)"
Debug.Print rx.Replace("01000732038001_20080410_OP_P11.dgn", "$4.$3.$2")

'10.04.2008



Shocker.Proвпрочем, ответ Запуска мне нравится больше моего )Твой вариант шустрее.
...
Рейтинг: 0 / 0
03.04.2013, 16:06
    #38211447
Saules
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вырезать часть строки
оо! спасибо! у меня тоже получилось, но очень криво и громоздко
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / вырезать часть строки / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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