📄 strings.vb
字号:
End If If IncludeLeadingDigit = TriState.UseDefault Then IncludeLeadingDigit = TriState.True End If Dim sb As StringBuilder = New StringBuilder sb.Append("{"c).Append("0"c).Append(":"c) FormatNumber(sb, Expression, NumDigitsAfterDecimal, IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits) If (UseParensForNegativeNumbers = TriState.True) Then sb.Append(";"c).Append("("c) FormatNumber(sb, Expression, NumDigitsAfterDecimal, IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits) sb.Append(")"c) End If sb.Append("}"c) Return String.Format(sb.ToString, Expression) End Function Private Sub FormatNumber(ByVal sb As StringBuilder, ByVal Expression As Object, _ Optional ByVal NumDigitsAfterDecimal As Integer = -1, _ Optional ByVal IncludeLeadingDigit As TriState = TriState.UseDefault, _ Optional ByVal UseParensForNegativeNumbers As TriState = TriState.UseDefault, _ Optional ByVal GroupDigits As TriState = TriState.UseDefault) 'FIXME : perform more elegant type checking 'Expression = DirectCast(Expression, Double) If (GroupDigits = TriState.True) Then sb.Append("#"c).Append(","c).Append("#"c).Append("#"c).Append("#"c) End If If (IncludeLeadingDigit = TriState.True) Then sb.Append("0"c) End If sb.Append("."c) If NumDigitsAfterDecimal = -1 Then sb.Append("0"c).Append("0"c) Else For i As Integer = 1 To NumDigitsAfterDecimal sb.Append("0"c) Next End If End Sub Public Function FormatPercent(ByVal Expression As Object, Optional ByVal NumDigitsAfterDecimal As Integer = -1, _ Optional ByVal IncludeLeadingDigit As TriState = TriState.UseDefault, _ Optional ByVal UseParensForNegativeNumbers As TriState = TriState.UseDefault, _ Optional ByVal GroupDigits As TriState = TriState.UseDefault) As String 'FIXME : should throw IllegalCastException 'Expression = CDbl(Expression) If (NumDigitsAfterDecimal < -1) Then Throw New ArgumentException("Argument 'NumDigitsAfterDecimal' is Invalid") End If Try If TypeOf Expression Is String Then Dim tmpstr2 As String = CStr(Expression) Convert.ToDouble(tmpstr2) End If Catch ex As Exception Throw New InvalidCastException(" Cast from String to type 'Double' is not valid.") End Try If Not ((TypeOf Expression Is Short) Or (TypeOf Expression Is Integer) Or (TypeOf Expression Is Long) _ Or (TypeOf Expression Is Decimal) Or (TypeOf Expression Is Single) Or (TypeOf Expression Is Double) _ Or (TypeOf Expression Is Byte)) Then Throw New InvalidCastException(" Cast to type 'Currency' is not valid.") End If ' FIXME : what affects default values If UseParensForNegativeNumbers = TriState.UseDefault Then UseParensForNegativeNumbers = TriState.False End If If GroupDigits = TriState.UseDefault Then GroupDigits = TriState.True End If If IncludeLeadingDigit = TriState.UseDefault Then IncludeLeadingDigit = TriState.True End If Dim sb As StringBuilder = New StringBuilder sb.Append("{"c).Append("0"c).Append(":"c) FormatPercent(sb, Expression, NumDigitsAfterDecimal, IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits) If (UseParensForNegativeNumbers = TriState.True) Then sb.Append(";"c).Append("("c) FormatPercent(sb, Expression, NumDigitsAfterDecimal, IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits) sb.Append(")"c) End If sb.Append("}"c) Return String.Format(sb.ToString, Expression) End Function Private Sub FormatPercent(ByVal sb As StringBuilder, ByVal Expression As Object, ByVal NumDigitsAfterDecimal As Integer, _ ByVal IncludeLeadingDigit As TriState, ByVal UseParensForNegativeNumbers As TriState, _ ByVal GroupDigits As TriState) 'FIXME : use NumberFormatInfo.PercentNegativePattern and NumberFormatInfo.PercentPositivePattern Dim percentChar As String = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.PercentSymbol FormatNumber(sb, Expression, NumDigitsAfterDecimal, IncludeLeadingDigit, UseParensForNegativeNumbers, GroupDigits) sb.Append(percentChar) End Sub Public Function GetChar(ByVal Str As String, ByVal Index As Integer) As Char If Str Is Nothing Then Throw New ArgumentException("Length of argument 'String' must be greater than zero.") End If If Index < 1 Then Throw New ArgumentException("Argument 'Index' must be greater than or equal to 1.") End If If Index > Str.Length Then Throw New ArgumentException("Argument 'Index' must be less than or equal to the length of argument 'String'.") End If Return Str.Chars(Index - 1) End Function Public Function InStr(ByVal Start As Integer, ByVal String1 As String, ByVal String2 As String, _ <OptionCompare()> Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod = 0) As Integer If Start < 1 Then Throw New ArgumentException("Argument 'Start' must be greater or equal to zero.") End If If String1 Is Nothing Then Return 0 End If If String1.Length = 0 Then Return 0 End If If String2 Is Nothing Then Return Start End If If String2.Length = 0 Then Return Start End If If Start > String1.Length Then Return 0 End If If Compare = CompareMethod.Text Then String1 = String1.ToLower() String2 = String2.ToLower() End If Dim i As Integer = String1.IndexOf(String2, Start - 1) Return i + 1 End Function Public Function InStr(ByVal String1 As String, ByVal String2 As String, _ <OptionCompare()> Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod = 0) As Integer Return InStr(1, String1, String2, Compare) End Function Public Function InStrRev(ByVal StringCheck As String, ByVal StringMatch As String, _ Optional ByVal Start As Integer = -1, _ <OptionCompare()> Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod = 0) As Integer If Start = 0 Or Start < -1 Then Throw New ArgumentException("Argument 'Start' must be greater than 0 or equal to -1.") End If If StringCheck Is Nothing Then Return 0 End If If StringCheck.Length = 0 Then Return 0 End If If StringMatch Is Nothing Then Return Start End If If StringMatch.Length = 0 Then Return Start End If If Start > StringCheck.Length Then Return 0 End If If Start = -1 Then Start = StringCheck.Length End If If Compare = CompareMethod.Text Then StringMatch = StringMatch.ToLower() StringCheck = StringCheck.ToLower() End If Dim i As Integer = StringCheck.LastIndexOf(StringMatch, Start - 1, Start) Return i + 1 End Function Public Function Join(ByVal SourceArray() As Object, Optional ByVal Delimiter As String = " ") As String Dim i As Integer Dim sb As StringBuilder = New StringBuilder If (SourceArray Is Nothing) Then Return Nothing End If If (SourceArray.Length = 0) Then Return Nothing End If If TypeOf SourceArray(0) Is Array Then Throw New ArgumentException("Procedure call or argument is not valid") End If If SourceArray.Rank > 1 Then Throw New ArgumentException("Argument 'SourceArray' cannot be converted to type 'String'") End If For i = 0 To SourceArray.Length - 2 sb.Append(CStr(SourceArray(i))) If Not Delimiter Is Nothing Then sb.Append(Delimiter) End If Next sb.Append((SourceArray(i))) Return sb.ToString() End Function Public Function Join(ByVal SourceArray() As String, Optional ByVal Delimiter As String = " ") As String Dim oarr() As Object oarr = SourceArray Return Join(oarr, Delimiter) End Function Public Function LCase(ByVal Value As Char) As Char Return Char.ToLower(Value) End Function Public Function LCase(ByVal Value As String) As String If Value Is Nothing Then Return Nothing End If Return Value.ToLower() End Function Public Function Left(ByVal Str As String, ByVal Length As Integer) As String If Length < 0 Then Throw New ArgumentException("Argument 'Length' must be greater or equal to zero.") End If If Str Is Nothing Or Length = 0 Then Return String.Empty End If If Length > Str.Length Then Length = Str.Length End If Return Str.Substring(0, Length) End Function Public Function Len(ByVal Expression As Boolean) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Byte) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Char) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Double) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Integer) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Long) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Object) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Short) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Single) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As String) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As DateTime) As Integer Return GetSize(Expression) End Function Public Function Len(ByVal Expression As Decimal) As Integer Return GetSize(Expression) End Function Private Function GetSize(ByVal Expression As Object) As Integer If Expression Is Nothing Then Return 0 End If Dim Tcode As TypeCode = Type.GetTypeCode(Expression.GetType()) Select Case Tcode Case TypeCode.Boolean Return 2 Case TypeCode.Byte Return 1 Case TypeCode.Char Return 2 Case TypeCode.DateTime Return 8 Case TypeCode.DBNull Throw New InvalidCastException Case TypeCode.Decimal Return 8 Case TypeCode.Double Return 8 Case TypeCode.Empty Return 0 Case TypeCode.Int16 Return 2 Case TypeCode.Int32 Return 4 Case TypeCode.Int64 Return 8 Case TypeCode.Object Throw New InvalidCastException Case TypeCode.SByte Return 1 Case TypeCode.Single Return 4 Case TypeCode.String Return CStr(Expression).Length Case TypeCode.UInt16 Return 2 Case TypeCode.UInt32 Return 4 Case TypeCode.UInt64 Return 8 End Select End Function Public Function LSet(ByVal Source As String, ByVal Length As Integer) As String If Source Is Nothing Then Source = String.Empty End If If Source.Length >= Length Then Return Source.Substring(0, Length) Else Return Source.PadRight(Length) End If End Function Public Function LTrim(ByVal Str As String) As String If Str Is Nothing Then Return String.Empty End If Dim carr() As Char = {" "c} Return Str.TrimStart(carr) End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -