Замените вызовы оператора Print пользовательской функцией - PullRequest
0 голосов
/ 27 февраля 2019

Существует устаревшее приложение VB6, которое использует оператор Print для записи журналов по всему приложению.Есть более 20 тысяч случаев Print.Я хочу написать дополнительную информацию о каждом вызове Print.

Этого можно добиться, заменив вызовы Print моей собственной функцией.Это помогло бы и в будущем.

Некоторые из операторов выглядят следующим образом:

Print #FileNo, Tab(1); "My Text Here";
Print #FileNo, Tab(col); Txt;
Print #FileNo, Tab(100); Format(TheDate, "DDMMMYYYY") & "    " & Variable_Name & "Field : " & Format(Field, "x")
Print #FileNo, Tab(1); Format(TheDate, "x") & " - " & TheName;
Print #FileNo, String(132, "-")
Print #FileNo, Tab(6); "SOME VALUE"; "SOME MORE VALUES";

Здесь ; указывает команде Print не изменять строку, а Tab указываетпоместите точку вставки в абсолютный номер столбца.

Вопрос: Как заменить Print собственной функцией, сохранив поведение Tab и semicolon?

1 Ответ

0 голосов
/ 27 февраля 2019

Вместо того, чтобы разбивать один вызов на несколько вызовов, вы должны заставить свою функцию ожидать аргумент ParamArray , как предложено Алексом .Ваша функция должна выглядеть примерно так:

' Remember to set the return type or change the function to a Sub.
Public Function MyPrint(fileNo As Byte, ParamArray text() As Variant) 'As SomeType
    ' Insert body here.
End Function

Теперь поговорим о регулярных выражениях.Чтобы использовать только NotePad ++, я думаю, что вам нужно будет сделать это в два шага.

  1. Чтобы заменить имя метода (Print на MyPrint), используйте следующеешаблон:

    Print\h+(#\w+)
    

    и заменить на:

    MyPrint \1
    

    Демо .

  2. Чтобы заменить точки с запятой запятыми, вы можете использовать следующий шаблон:

    (?:MyPrint #\w+\K,\h*|(?!^)\G\h*)([^;\r\n]+);?
    

    и заменить на:

    , \1
    

    Демо .

Пример ввода:

Print #FileNo, Tab(1); "My Text Here";
Print #FileNo, Tab(col); Txt;
Print #FileNo, Tab(100); Format(TheDate, "DDMMMYYYY") & "    " & Variable_Name & "Field : " & Format(Field, "x")
Print #FileNo, Tab(1); Format(TheDate, "x") & " - " & TheName;
Print #FileNo, String(132, "-")
Print #FileNo, Tab(6); "SOME VALUE"; "SOME MORE VALUES";

Print #FileNo, Tab(100); "First Text"; "Second Text"
Print #FileNo, "Third Text"; "Fourth Text"

Окончательный вывод:

MyPrint #FileNo, Tab(1), "My Text Here"
MyPrint #FileNo, Tab(col), Txt
MyPrint #FileNo, Tab(100), Format(TheDate, "DDMMMYYYY") & "    " & Variable_Name & "Field : " & Format(Field, "x")
MyPrint #FileNo, Tab(1), Format(TheDate, "x") & " - " & TheName
MyPrint #FileNo, String(132, "-")
MyPrint #FileNo, Tab(6), "SOME VALUE", "SOME MORE VALUES"

MyPrint #FileNo, Tab(100), "First Text", "Second Text"
MyPrint #FileNo, "Third Text", "Fourth Text"
...