Как сохранить пробелы (или выравнивание) в форматировании кода VB. NET? - PullRequest
0 голосов
/ 16 июня 2020

Сегодня я переношу программу Java на VB. NET и, используя Visual Studio 2019, переношу следующий код

Static XMsg MSG_1001_CMD_PARAMETER_IS_NULL          = new XMsg(1001, True , "[%s] command's parameter [%s] cannot be null");
Static XMsg MSG_1002_CMD_PARAMETER_IS_EMPTY         = new XMsg(1002, True , "[%s] command's parameter [%s] cannot be empty");
Static XMsg MSG_1003_ERROR_WHEN_OPENING_OUPUT_FILE  = new XMsg(1003, True , "Error when opening OUTPUT file [%s]");
Static XMsg MSG_1004_ORACLE_ERROR_ON_ALTER_SESSION  = new XMsg(1004, False, "Oracle error when executing ALTER SESSION");

Код Java отформатирован так, чтобы каждый параметр в new XMsg форматируется как таблица. Каждое значение параметра начинается с того же столбца.

Когда я перекодирую этот Java код в VB. NET, я получаю следующий код

Shared MSG_1001_CMD_PARAMETER_IS_NULL = New XMsg(1001, True, "%", "[%s] command's parameter [%s] cannot be null")
Shared MSG_1002_CMD_PARAMETER_IS_EMPTY = New XMsg(1002, True, "%", "[%s] command's parameter [%s] cannot be empty")
Shared MSG_1003_ERROR_WHEN_OPENING_OUPUT_FILE = New XMsg(1003, True, "%", "Error when opening OUTPUT file [%s]")
Shared MSG_1004_ORACLE_ERROR_ON_ALTER_SESSION = New XMsg(1004, False, " ", "Oracle error when executing ALTER SESSION")

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

Есть ли советы, позволяющие сохранить базовое форматирование c (оставить пробелы)?

Использование специальной директивы для объявления выключенного форматирования?

Использование специального символа Unicode для замены символа пробела?

Использование специальной программы форматирования кода c? Какой?

1 Ответ

0 голосов
/ 17 июня 2020

Пока VB. Net не определяет специфицированные c директивы для stop и start VB. Net форматирования кода, невозможно выровнять аналогичные строки, как в таблице.

Поскольку я ищу, что сообщения приложения легко читаются, я написал небольшой текстовый шаблон (инструменты T4 в Visual Studio 2019), который автоматически генерирует мой код VB. NET.

The VB. Net код всегда НЕ ВЫРАВНИВАЕТСЯ; но исходный файл .TXT, который используется инструментами T4 для генерации VB. NET код выровнен.

.TXT файл, содержащий все сообщения, следует за

+----------------------------------------+------+------------------------------------------------------------------------------------------
| CMD_PARAMETER_IS_NULL                  | 1001 | [%s] command's parameter [%s] cannot be null
| CMD_PARAMETER_IS_EMPTY                 | 1002 | [%s] command's parameter [%s] cannot be empty
| ERROR_WHEN_OPENING_OUPUT_FILE          | 1003 | Error when opening OUTPUT file [%s]
| ORACLE_ERROR_ON_ALTER_SESSION          | 1004 | Oracle error when executing ALTER SESSION
| ORACLE_ERROR_IN_OPEN_DB                | 1005 | Oracle error in OPEN-DB= new XMsg()
| ZIP_ERROR_ON_CALC_CHAIN                | 1006 | ZIP error on CALC-CHAIN

.TT файлом, который генерирует VB. NET код соответствует

<#@ template debug="false" hostspecific="false" language="VB" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".vb" #>

Public Partial Class M

<#
    Dim iPos = 1
    Dim sLine As String
    Dim sVariableName As String = "?"
    Dim iVariableNamePos As Integer
    Dim iVariableNameLen As Integer
    Dim sMsgNo As Integer
    Dim iMsgNoPos As Integer
    Dim iMsgNoLen As Integer
    Dim sNrVariables As String
    Dim sMessage As String = "?"
    Dim iMessagePos As Integer
    Dim bColumnPosInitialized = False

    Dim sr as StreamReader = New StreamReader(".\Sources\Messages.txt", Encoding.Default)

    Do While True
        sLine = sr.ReadLine
        If sLine is Nothing then
            Exit Do
        End If

        If sLine.StartsWith("+") Then
            If Not bColumnPosInitialized Then
                bColumnPosInitialized = True
                iVariableNamePos = sLine.IndexOf("+") + 2
                iMsgNoPos = sLine.IndexOf("+", iVariableNamePos + 1) + 2
                iMessagePos = sLine.IndexOf("+", iMsgNoPos + 1) + 2
                iVariableNameLen = iMsgNoPos - iVariableNamePos - 3
                iMsgNoLen = iMessagePos - iMsgNoPos - 3
            End If
        Else
            If sLine.StartsWith("|") Then
                sLine &= "  "
                sNrVariables = "0"
                sVariableName = sLine.Substring(iVariableNamePos, iVariableNameLen).Trim
                sMsgNo = sLine.Substring(iMsgNoPos, iMsgNoLen).Trim
                sMessage = sLine.Substring(iMessagePos).Trim
                If sMessage.Contains("[%s]") Then
                    sNrVariables = "1"
                End If
#>
Shared <#= "MSG_" & sMsgNo & "_" & sVariableName #> = New XMsg(<#= sMsgNo #>, <#= sNrVariables #>, "%", "<#= sMessage #>")
<#
            End If
        End If
    Loop

    sr.Close()
#>

End Class

и сгенерирован VB. Net исходный код соответствует

Public Partial Class M

    Shared MSG_1001_CMD_PARAMETER_IS_NULL = New XMsg(1001, 1, "%", "[%s] command's parameter [%s] cannot be null")
    Shared MSG_1002_CMD_PARAMETER_IS_EMPTY = New XMsg(1002, 1, "%", "[%s] command's parameter [%s] cannot be empty")
    Shared MSG_1003_ERROR_WHEN_OPENING_OUPUT_FILE = New XMsg(1003, 1, "%", "Error when opening OUTPUT file [%s]")
    Shared MSG_1004_ORACLE_ERROR_ON_ALTER_SESSION = New XMsg(1004, 0, "%", "Oracle error when executing ALTER SESSION")
    Shared MSG_1005_ORACLE_ERROR_IN_OPEN_DB = New XMsg(1005, 0, "%", "Oracle error in OPEN-DB= new XMsg()")
    Shared MSG_1006_ZIP_ERROR_ON_CALC_CHAIN = New XMsg(1006, 0, "%", "ZIP error on CALC-CHAIN")
End Class

Исходный файл .TT в настоящее время является пропотипом без проверки синтаксиса и некоторые ограничения. Но это уже другая история.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...