Imports System.Text Imports System.IO Imports System.Security.Cryptography Imports System.Runtime.CompilerServices Imports System.Globalization Imports VB6 = Microsoft.VisualBasic Public Module StringExtensions Function ChangeExt(path As String, value As String) As String If path = "" Then Return "" If value = "" Then Return path If Not value.StartsWith(".") Then value = "." + value Return Filepath.GetDirAndBase(path) + value.ToLower End Function Function AddPathQuotes(instance As String) As String If instance = "" Then Return "" If instance.Contains(" ") Then Return """" + instance + """" Return instance End Function Function Parent(instance As String) As String Return DirPath.GetParent(instance) End Function Function Ext(instance As String) As String Return Filepath.GetExt(instance) End Function Function ExtFull(instance As String) As String Return Filepath.GetExtFull(instance) End Function Function Base(instance As String) As String Return Filepath.GetBase(instance) End Function Function ContainsAll(instance As String, all As IEnumerable(Of String)) As Boolean If instance <> "" Then Return all.All(Function(arg) instance.Contains(arg)) End Function Function EqualsAny(instance As String, ParamArray param As String()) As Boolean If instance = "" OrElse param.ContainsNothingOrEmpty Then Return False Return param.Contains(instance) End Function Function Append(instance As String, value As String) As String If instance Is Nothing AndAlso value Is Nothing Then Return "" Return instance + value End Function Function AppendSeparator(instance As String) As String If instance?.EndsWith(DirPath.Separator) Then Return instance Return instance + DirPath.Separator End Function Public Function FixBreak(value As String) As String value = value.Replace(VB6.ChrW(13) + VB6.ChrW(10), VB6.ChrW(10)) value = value.Replace(VB6.ChrW(13), VB6.ChrW(10)) Return value.Replace(VB6.ChrW(10), VB6.ChrW(13) + VB6.ChrW(10)) End Function Function ContainsUnicode(value As String) As Boolean For Each i In value If Convert.ToInt32(i) > 255 Then Return True Next End Function Function ToTitleCase(value As String) As String 'TextInfo.ToTitleCase won't work on all upper strings Return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value.ToLower) End Function Function IsInt(value As String) As Boolean Return Integer.TryParse(value, Nothing) End Function Function ToInt(value As String, Optional defaultValue As Integer = 0) As Integer If Not Integer.TryParse(value, Nothing) Then Return defaultValue End If Return CInt(value) End Function Function IsSingle(value As String) As Boolean If value <> "" Then If value.Contains(",") Then value = value.Replace(",", ".") Return Single.TryParse(value, NumberStyles.Float Or NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Nothing) End If End Function Function ToSingle(value As String, Optional defaultValue As Single = 0) As Single If value <> "" Then If value.Contains(",") Then value = value.Replace(",", ".") Dim ret As Single If Single.TryParse(value, NumberStyles.Float Or NumberStyles.AllowThousands, CultureInfo.InvariantCulture, ret) Then Return ret End If End If Return defaultValue End Function Function IsDouble(value As String) As Boolean If value <> "" Then If value.Contains(",") Then value = value.Replace(",", ".") Return Double.TryParse(value, NumberStyles.Float Or NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Nothing) End If End Function Function ToDouble(value As String, Optional defaultValue As Single = 0) As Double If value <> "" Then If value.Contains(",") Then value = value.Replace(",", ".") Dim ret As Double If Double.TryParse(value, NumberStyles.Float Or NumberStyles.AllowThousands, CultureInfo.InvariantCulture, ret) Then Return ret End If End If Return defaultValue End Function Function FormatColumn(value As String, delimiter As String) As String If value = "" Then Return "" Dim lines = value.SplitKeepEmpty(CrLf) Dim leftSides As New List(Of String) For Each i In lines Dim pos = i.IndexOf(delimiter) If pos > 0 Then leftSides.Add(i.Substring(0, pos).Trim) Else leftSides.Add(i) End If Next Dim highest = Aggregate i In leftSides Into Max(i.Length) Dim ret As New List(Of String) For i = 0 To lines.Length - 1 Dim line = lines(i) If line.Contains(delimiter) Then ret.Add(leftSides(i).PadRight(highest) + " " + delimiter + " " + line.Substring(line.IndexOf(delimiter) + 1).Trim) Else ret.Add(leftSides(i)) End If Next Return ret.Join(CrLf) End Function Sub WriteFile(value As String, path As String) WriteFile(value, path, Encoding.Default) End Sub Sub WriteFile(value As String, path As String, encoding As Encoding) Try Using sw As New StreamWriter(File.Create(path), encoding) sw.Write(value) End Using Catch ex As Exception g.ShowException(ex) End Try End Sub Function Left(value As String, index As Integer) As String If value = "" OrElse index < 0 Then Return "" If index > value.Length Then Return value Return value.Substring(0, index) End Function Function Left(value As String, start As String) As String If Not value.Contains(start) Then Return "" End If Return value.Substring(0, value.IndexOf(start)) End Function Function LeftLast(value As String, start As String) As String If Not value.Contains(start) Then Return "" Return value.Substring(0, value.LastIndexOf(start)) End Function Function Right(value As String, start As String) As String If Not value.Contains(start) Then Return "" End If Return value.Substring(value.IndexOf(start) + start.Length) End Function Function RightLast(value As String, start As String) As String If Not value.Contains(start) Then Return "" Return value.Substring(value.LastIndexOf(start) + start.Length) End Function Function EqualIgnoreCase(a As String, b As String) As Boolean If a = "" OrElse b = "" Then Return False Return String.Compare(a, b, StringComparison.OrdinalIgnoreCase) = 0 End Function Function Shorten(value As String, maxLength As Integer) As String If value = "" OrElse value.Length <= maxLength Then Return value End If Return value.Substring(0, maxLength) End Function Function SplitNoEmpty(value As String, ParamArray delimiters As String()) As String() Return value.Split(delimiters, StringSplitOptions.RemoveEmptyEntries) End Function Function SplitKeepEmpty(value As String, ParamArray delimiters As String()) As String() Return value.Split(delimiters, StringSplitOptions.None) End Function Function SplitNoEmptyAndWhiteSpace(value As String, ParamArray delimiters As String()) As String() If value = "" Then Return {} Dim a = SplitNoEmpty(value, delimiters) For i = 0 To a.Length - 1 a(i) = a(i).Trim Next Dim l = a.ToList While l.Contains("") l.Remove("") End While Return l.ToArray End Function Function SplitLinesNoEmpty(value As String) As String() Return SplitNoEmpty(value, Environment.NewLine) End Function Function RemoveChars(value As String, chars As String) As String Dim ret = value For Each i In value If chars.IndexOf(i) >= 0 Then ret = ret.Replace(i, "") End If Next Return ret End Function Function DeleteRight(value As String, count As Integer) As String Return Left(value, value.Length - count) End Function Function ReplaceUnicode(value As String) As String If value.Contains(Convert.ToChar(&H2212)) Then value = value.Replace(Convert.ToChar(&H2212), "-"c) End If Return value End Function Function MD5Hash(value As String) As String Dim crypt = MD5CryptoServiceProvider.Create() Dim hash = crypt.ComputeHash(ASCIIEncoding.ASCII.GetBytes(value)) Dim sb As New StringBuilder() For Each i In hash sb.Append(i.ToString("x2")) Next Return sb.ToString() End Function Sub ToClipboard(value As String) If value <> "" Then Clipboard.SetText(value) Else Clipboard.Clear() End If End Sub End Module