2016-11-01 2 views
1

У меня есть строка, давайте назовем ее «S», и это может быть до 8 цифр, и я хочу выровнять ее в строке, а затем в текстовом файле справа 8 заготовок (chr (32))Условное форматирование строки VB.NET

Ex. (Я ставлю знак подчеркивания в примере, чтобы отметить пробелы.

S="1234" should result in "____1234" 
S="444444" should result in "__444444" 
S="abc"  should result in "_____abc" 

Для этого я хотел бы написать следующий код

Public Function feld(ByVal S As String, Optional I As Integer = 8) As String 
    Dim lenS As Integer = Strings.Len(S) 
    Dim vorS As Integer = I - lenS 
    Dim rez As String = "" 
    For x = 1 To vorS 
     rez += Strings.Chr(32) 
    Next 
    rez += S 
    Return rez 
End Function 

Есть ли более элегантный способ сделать это?

+1

Кажется, работа для [String.PadLeft] (https://msdn.microsoft.com/en-us/library/system.string.padleft (v = vs.110) .aspx) (Или PadRight) – Sehnsucht

+1

S.PadLeft (8, "_" c)) –

ответ

4

Вы можете используйте String.Format("{0,8}", s), чтобы выровнять строку ввода в правой части результата, которая будет содержать 8 символов.

Чтобы выровнять вход с левой стороны, используйте отрицательное число в формате.

Для получения дополнительной информации см Управление форматирования и Контроль расстояния между в String.Format метод документации.

+0

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

5

Вы делаете это пути слишком сложным:

Public Function feld(ByVal S As String, Optional I As Integer = 8) As String 
    Return S.PadLeft(I) 
End Function 

Спрашивается, почему вы даже нужны новая функция, если не хотите, поведения, отличное от того, что PadLeft() использует в том случае, когда строка слишком длинный ... но если это так, нам нужно знать, какое поведение вы хотите в вопросе.

1

Другое решение:

Public Function AddBlanks(ByVal S As String, Optional L As Integer = 8) As String 
    return Microsoft.VisualBasic.Right(StrDup(L, " ") & S, L) 
End Function 
1

(я надеюсь, что вы используете SQL, если не только избежать этого)

Было бы легче позже, если вы делаете это в SQL создании скалярной функции и вам нужно только выравнивание по левому краю, так что я делаю (ниже только для исполняет имеющих пример, пойти и создать функцию, используя ниже код):

DECLARE @StringValue varchar(8)='123' 
DECLARE @totalStringLength As Integer=8 
DECLARE @ReplaceChar As char(1)='_' 

DECLARE @stringLength As int 
DECLARE @NewString As varchar(8) 
DECLARE @ResultVal As varchar(8) 

SET @stringLength = LEN(ISNULL(@StringValue,@ReplaceChar)) 
IF @stringLength >= @totalStringLength 
Begin 
    SET @ResultVal = @StringValue 
End 
Else 
Begin 
SET @NewString = REPLICATE(@ReplaceChar, @totalStringLength - @stringLength) + ISNULL(@StringValue, @ReplaceChar) 
    SET @ResultVal = @NewString 
End 
select @ResultVal 

Теперь вы можете создать хранимую процедуру или просто позвонить Functio n где вам требуется значение строки.

здесь я предполагаю, что теперь вы создали функцию что-то с именем, как dbo.leftPAD, просто используйте ниже код в командной строке

select dbo.leftpad(string.text,8,'_') 

, если это не то, что вы ищете, чем жаль, и простите за мой плохой английский.

Благодаря

Смежные вопросы