Skip to content

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

Продолжаем говорить о VBA, и сегодня рассмотрим пример работы со строками.

Пользователь вводит путь к файлу в ячейку, и мы должны определить количество папок, через которые нам необходимо пройти до файла, другими словами, определить уровень вложенности. А также заменить все цифры на соответствующие буквы английского алфавита по порядку и вывести название папок до и после изменения.

Наш алгоритм определения вложенности будет заключаться в поиске количества символов «/». Надо учесть, что помимо обычных «проводниковых» путей на компьютере, может быть введёт ссылочный путь, где имеется //. Например, C:/Windiws/… и http://yandex.ru.

Приступим к коду:

Private Sub GetFolder()
Dim way As String
way = Cells(1, 1) + " "

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

Dim way_ex As String
way_ex = way
Dim k As Integer
Dim x As Integer
Dim le As Integer
Dim sl As String
Dim poisk As String
poisk = "/"
k = 0
le = Len(way)

way_ex — копия пути, так как мы будем работать с ним и соответственно изменять.
k — искомое количество /.
x — позиция искомого элемента.
le — количество символов в строке.
sl — символьная переменная для промежуточных расчётов.
poisk — символ который будем искать.

Do
x = InStr(way, poisk)
sl = Mid(way, x + 1, le - x - 1)
way = sl
k = k + 1
Loop While x <> 0
way = way_ex
If InStr(way, "://") <> 0 Then
    Cells(3, 1) = k - 3
Else
    Cells(3, 1) = k - 2
End If

В этом отрывке мы находим k и в зависимости какой у нас путь, ссылочный или «проводниковый», с помощью If находим необходимое значение вложенности (сколько каталогов от корня до файла).

Instr() — служит для поиска номера символа, с которого начинается в заданной строке образец поиска. Поиск идет от указанной позиции слева направо. Нумерация символов всегда начинается с единицы. И если символ не найден, возвращается число 0. Синтаксис InStr([Начальная позиция],String1,String2).

Mid() — используется для считывания символов в строке, с заданным параметром «ОТ» и «ДО». Более подробно почитайте тут.

То, что происходит в If, думаю и так ясно, но на всякий случай поясню: мы проверяем, есть ли у нас в пути://, если есть, то значит мы работаем с ссылочным путём.

Dim i As Integer
Dim kk As Integer
Dim zam As String
Dim way_z As String
kk = 1
x = 1

Далее объявляем новые переменные, которые нам буду необходимы в процессе.

Do While x <> 0
    x = InStr(way, poisk)
    sl = Mid(way, 1, x)
    For i = 0 To 9
        If InStr(sl, CStr(i)) > 1 Then
            Cells(1 + kk, 2) = sl
            If i = 0 Then zam = "A"
            If i = 1 Then zam = "B"
            If i = 2 Then zam = "C"
            If i = 3 Then zam = "D"
            If i = 4 Then zam = "E"
            If i = 5 Then zam = "F"
            If i = 6 Then zam = "G"
            If i = 7 Then zam = "H"
            If i = 8 Then zam = "I"
            If i = 9 Then zam = "J"
            sl = Replace(sl, CStr(i), zam)
            Cells(1 + kk, 3) = sl
            kk = kk + 1
        End If
    Next i
    way_z = way_z + sl
    way = Mid(way, x + 1, le - x - 1)
Loop
way_z = way_z + way
Cells(2, 1) = way_z
End Sub

В этом куске мы запускаем цикл, который заменяет нам все цифры на буквы английского алфавита. Основной алгоритм — разбиение пути.

Do While x <> 0 — означает что мы будет выполнять цикл пока x (позиция искомого элемента), не будет равен 0, что означает что этого элемента в строке больше нет.

Начинаем поиск /, далее копируем слово до / и прогоняем его по циклу от 0 до 9, находя в нём цифры, если находим, записываем в отдельную ячейку. Далее заменяем цифру на букву, и снова записываем в ячейку пониже. С помощью счётчика kk контролируем количество изменяемых уровней в пути. Добавляем проработанные слова в way_z, составляя новый путь.

С помощью этой строчки way = Mid(way, x + 1, le — x — 1) мы циклично отрезаем от пути проработанные слова. Добавляем к way_z остатки от начального пути и записываем в ячейку.
Снимок4
Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь Вы прониклись магией VBA, если же нет, читайте продолжение. =)

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

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

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

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