Skip to content

Работа со строками. Задача 2

Доброго времени суток, и сегодня мы разберём 2-ой пример на тему «Работа со строками VBA». Отмечу, что в этом примере используются много интересных функций для строк, которые ранее не разбирались. И раз мы уже добрались до данной статьи, не буду вдаваться в детальные подробности. Сегодня поговорим только о новых командах. Поехали!

Задача:
Для введённых пользователем путей (как ссылочных, так и «проводниковых») написать программу, которая выполняет 3 действия:
1) Превращает обычный «проводниковый» путь в ссылочный.

2) Удаляет имя каталога, предшествующее конечному объекту, например, C:/Windows/test.txt --> C:/test.txt

3) Приписать к каждому файлу в конце имени CodeTown

Вывод должен быть представлен в виде таблицы со столбцами: «Исходные данные», «1 задание», «2 задание» и «3 задание».

Звучит несложно, правда? =)

Приступим:

Private Sub prog2()
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim kol As Integer
Dim i As Integer
Dim x As Byte
Dim Arr
Dim Arr2
Dim otrez As String
Dim size As Integer
'1 задание'
size = WorksheetFunction.CountA(Worksheets(1).Columns(1))
s2 = "http://"
For i = 2 To size
    s1 = Cells(i, 1)
    x = InStr(s1, ":\")
    If x = 0 Then
        If Left(s1, 7) = s2 Then 'если интернет ссылка'
            s3 = s1
        Else
            s3 = s2 + s1
        End If
    Else
        otrez = Left(s1, x + 1)
        s3 = Replace(s1, otrez, s2)
            
    End If
    s3 = Replace(s3, "\", "/")
Cells(i, 2) = s3

Начнём с того, что если не задавать у переменной тип, то VBA по умолчанию присвоит ей тип Variant, что означает любой. Грубо говоря, вы можете записать всё, что хотите в эту переменную, и это будет воспринято соответственно: если только целые, то int, дробные — Double т.д., но это делать не всегда разумно.

Основной алгоритм решения первого задания прост: проверяем, является ли путь «проводниковым», если Да, то заменяем переднюю часть на http://, если Нет, то проверяем, является ли путь ссылкой: Да — всё так и оставляем, Нет — добавляем вначале http://. В конце заменяем все «\» на «/».

Left() — копирует определённое количество слева, которое мы можем задать, символов строки. Есть аналог, команда Right() — как вы, наверно, догадались, копирует справа.

'2 Задание' 
If Left(s1, 7) = s2 Then 'интернет ссылка'
    Arr = Split(s1, "/")
    Arr2 = Arr
    kol = UBound(Arr)
    If kol > 2 Then
        ReDim Preserve Arr(kol - 2)
        Cells(i, 3) = Join(Arr, "/") + "/" + Arr2(kol)
    Else
        Cells(i, 3) = Join(Arr, "/")
    End If
Else
Else
     Arr = Split(s1, "\") 'локальная ссылка'
     Arr2 = Arr
     kol = UBound(Arr)
     If kol > 1 Then
        ReDim Preserve Arr(kol - 2)
        Cells(i, 3) = Join(Arr, "\") + "\" + Arr2(kol)
    Else
        Cells(i, 3) = Join(Arr, "\")
    End If
End If

«Глаза боятся, мозг работает» =) Не волнуйтесь, сейчас всё разберём:

Split() — разбивает строку на массив строк, где разделителем является пробел по умолчанию, или с заданным символом.

UBOund() — определяет размер массива.

ReDim Preseve в отличии от ReDim переназначает массив с сохранением массива.

Join — объединяет массив в одно целое, в данном случае, массив строк в одну строку.

Теперь алгоритм: определяем является ли путь ссылкой, если Да:
разбиваем на массив строк , считаем сколько получилось частей, если больше 2-ух, то переназначая массив, удаляем у него две последние части и добавляем одну часть (самый конец пути). Если меньше 2-ух, то собираем массив обратно, как было, так как слишком мало частей.
Если путь локальная ссылка делаем абсолютно аналогичные действия, но в этот раз частей должно быть больше 1.

'3 задание'
x = InStrRev(s1, ".")
otrez = Left(s1, x - 1)
s3 = Replace(s1, otrez, otrez + "_CodeTown")
Cells(i, 4) = s3
Next i

End Sub

Ну после предыдущего куска, тут вы уже ничего не должны боятся.
InStrRev() — аналог InStr(), только поиск идёт с конца строки, и возвращается позиция конечного элемента.

Алгоритм: находим конец имени файла, к которому нас ведёт путь. Затем копируем всё до точки, то есть, весь путь до конца имени файла в переменную, и заменяем её на ту же переменную, но с добавкой «CodeTown».

Заканчиваем цикл.
Наш вывод:
Снимок6
Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь вы прониклись магией VBA, если же нет, читайте продолжение. =)

Скачать исходники

Опубликовано вVBA

Будьте первым, кто оставит комментарий

    Добавить комментарий