Remove only one newline from the end of string in vb.net - vb.net

I have a string like below
test1
test2
test3
newline
newline
newline
here i am using s = s.TrimEnd(ControlChars.Cr, ControlChars.Lf) to remove the last newline only, but it's removing all three newline.
i want to remove only one last newline from the string if any
Thanks in advance...

you can try like:
if (s.EndsWith(Environment.NewLine)) {
s = s.Remove(s.LastIndexOf(Environment.NewLine)) }

Get last space and then get sub string.
Dim lastIndex = s.lastIndexOf(" ")
s = s.substring(0, lastIndex)
(Or)
Use split function
Dim s = "test1 test2 test3 newline newline newline"
Dim mySplitResult = myString.split(" ")
Dim lastWord = mySplitResult[mySplitResult.length-1]

we can do as below
Dim stringText As String() = "test1 test2 test3 newline newline newline"
Dim linesSep As String() = {vbCrLf}
Dim lines As String() = stringText.Split(linesSep, StringSplitOptions.None)
If stringText.EndsWith(vbCrLf) Then
Dim strList As New List(Of String)
strList.AddRange(lines)
strList.RemoveAt(lines.Length - 1)
lines = strList.ToArray
End If
it worked for me!!!!

Here you go.
s = s.substring(0, s.lastindexof(characterToBeRemoved))

Related

how to replace multiple range of white space with comma in VB?

How do i remove multiple white space with a comma
String str="one two "
Need output like str="one,two"
Dim Text As String = str.Trim.Replace("\s{2,}", ",")
Thank you.
String.Split and String.Join could be used here
Dim values = str.Split(new String() { " " }, StringSplitOptions.RemoveEmptyEntries)
Dim result = String.Join(",", values)
str = str.trimEnd.replace(" ", ",")

Extracting Portion of Url using VB.net

I have this URL
https://www.google.com/maps/place/Aleem+Iqbal+SEO/#31.888433,73.263572,17z/data=!3m1!4b1!4m5!3m4!1s0x39221cb7e4154211:0x9cf2bb941cace556!8m2!3d31.888433!4d73.2657607
I am trying to Extract 31.888433,73.263572 from the URL
and send 31.888433 to TextBox 1
and 73.263572 to TextBox 2
Can you give me an example how can i do this with regex or anything else
You can use string.split(). This method takes an array of chars which are the discriminants for the splitting. The better solution is to split by '/', take the string that starts with '#' and then split it by ','. You'll have an array with two string: first latitude, second longitude.
Should be immediate using LINQ
The explanation is in the code comments.
Dim strURL As String = "https://www.google.com/maps/place/Aleem+Iqbal+SEO/#31.888433,73.263572,17z/data=!3m1!4b1!4m5!3m4!1s0x39221cb7e4154211:0x9cf2bb941cace556!8m2!3d31.888433!4d73.2657607"
'Find the index of the first occurance of the # character
Dim index As Integer = strURL.IndexOf("#")
'Get the string from that the next character to the end of the string
Dim firstSubstring As String = strURL.Substring(index + 1)
'Get a Char array of the separators
Dim separators As Char() = {CChar(",")}
'Split the string into an array based on the separator; the separator is not part of the array
Dim strArray As String() = firstSubstring.Split(separators)
'The first and second elements of the array is what you want
Dim strTextBox1 As String = strArray(0)
Dim strTextBox2 As String = strArray(1)
Debug.Print($"{strTextBox1} For TextBox1 and {strTextBox2} for TextBox2")
Finally Made a working Code Myself
Private _reg As Regex = New
Regex("#(-?[\d].[\d]),(-?[\d].[\d])", RegexOptions.IgnoreCase)
Private Sub FlatButton1_Click(sender As Object, e As EventArgs) Handles FlatButton1.Click
Dim url As String = WebBrowser2.Url.AbsoluteUri.ToString()
' The input string.
Dim value As String = WebBrowser2.Url.ToString
Dim myString As String = WebBrowser2.Url.ToString
Dim regex1 = New Regex("#(-?\d+\.\d+)")
Dim regex2 = New Regex(",(-?\d+\.\d+)")
Dim match = regex1.Match(myString)
Dim match2 = regex2.Match(myString)
If match.Success Then
Dim match3 As String = match.Value.Replace("#", "")
Dim match4 As String = match2.Value.Replace(",", "")
Label1.Text = match3
Label2.Text = match4
End If
End Sub
Dim url As String = "www.google.com/maps/place/Aleem+Iqbal+SEO/#31.888433,73.263572,17z/data=!3m1!4b1!4m5!3m4!1s0x39221cb7e4154211:0x9cf2bb941cace556!8m2!3d31.888433!4d73.2657607"
Dim temp As String = Regex.Match(url, "#.*,").Value.Replace("#", "")
Dim arrTemp As String() = temp.Split(New String() {","}, StringSplitOptions.None)
Label1.Text = arrTemp(0)
Label2.Text = arrTemp(1)

Issue in splitting an array of strings

I'm using webrequests to retrieve data in a .txt file that's on my dropbox using this "format".
SomeStuff
AnotherStuff
StillAnother
And i'm using this code to retrieve each line and read it:
Private Sub DataCheck()
Dim datarequest As HttpWebRequest = CType(HttpWebRequest.Create("https://dl.dropboxusercontent.com.txt"), HttpWebRequest)
Dim dataresponse As HttpWebResponse = CType(datarequest.GetResponse(), HttpWebResponse)
Dim sr2 As System.IO.StreamReader = New System.IO.StreamReader(dataresponse.GetResponseStream())
Dim datastring() As String = sr2.ReadToEnd().Split(CChar(Environment.NewLine))
If datastring(datastring.Length - 1) <> String.Empty Then
For Each individualdata In datastring
MessageBox.Show(individualdata)
Console.WriteLine(individualdata)
Next
End If
End Sub
The problem is, the output is this:
It always adds a line break (equal to " " as i see as first character on each but the first line string) after the first line like:
http://img203.imageshack.us/img203/1296/gejb.png
Why this happens? I tried also replacing the Environment.Newline with nothing like this:
Dim newstring as String = individualdata.Replace(Environment.Newline, String.Empty)
But the result was the same... what's the problem here? I tried with multiple newline strings and consts like vbnewline, all had the same result, any ideas?
You are not splitting by NewLine since you are cutting off Environment.NewLine which is a string with CChar. You just have to use the overload of String.Split that takes a String() and a StringSplitOption:
So instead of
Dim text = sr2.ReadToEnd()
Dim datastring() As String = text.Split(CChar(Environment.NewLine))
this
Dim datastring() As String = text.Split({Environment.NewLine}, StringSplitOptions.None)
I suspect that your file contains a mix of NewLine+CarriageReturn (vbCrLf) and a simple NewLine (vbLf).
If this is the case then you could create an array of the possible separators
Dim seps(2) as Char
seps(0) = CChar(vbLf)
seps(1) = CChar(vbCr)
Dim datastring() As String = sr2.ReadToEnd().Split(seps, StringSplitOptions.RemoveEmptyEntries)
The StringSplitOptions.RemoveEmptyEntries is required because a vbCrLf creates an empty string between the two separators

Split a string in VB.NET

I am trying to split the following into two strings.
"SERVER1.DOMAIN.COM Running"
For this I use the code.
Dim Str As String = "SERVER1.DOMAIN.COM Running"
Dim strarr() As String
strarr = Str.Split(" ")
For Each s As String In strarr
MsgBox(s)
Next
This works fine, and I get two message boxes with "SERVER1.DOMAIN.COM" and "Running".
The issue that I am having is that some of my initial strings have more than one space.
"SERVER1.DOMAIN.COM Off"
There are about eight spaces in-between ".COM" and "Off".
How can I separate this string in the same way?
Try this
Dim array As String() = strtemp.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
Use this way:
Dim line As String = "SERVER1.DOMAIN.COM Running"
Dim separators() As String = {"Domain:", "Mode:"}
Dim result() As String
result = line.Split(separators, StringSplitOptions.RemoveEmptyEntries)
Here's a method using Regex class:
Dim str() = {"SERVER1.DOMAIN.COM Running", "mydomainabc.es not-running"}
For Each s In str
Dim regx = New Regex(" +")
Dim splitString = regx.Split(s)
Console.WriteLine("Part 1:{0} | Part 2:{1}", splitString(0), splitString(1))
Next
And the LINQ way to do it:
Dim str() = {"SERVER1.DOMAIN.COM Running", "mydomainabc.es not-running"}
For Each splitString In From s In str Let regx = New Regex(" +") Select regx.Split(s)
Console.WriteLine("Part 1:{0} | Part 2:{1}", splitString(0), splitString(1))
Next

Split when a character is found ( txt not delimited) using VB.net

I am trying to populate a datagrid from a .txt file. I managed to do it with the split function Split(sr.ReadLine, " ") when I have all the rows identical with only one space, but the problem I have is that the txt file is not delimited and the "spaces" varies some time. This is a sample of my data:
Col1 Col2 Col3
1 Mary Yes
1234 John Yes
999 Leo No
So my question is how to delimit or split the line based when it finds the next character and ignore the empty spaces. This is the code I have.
OpenFileDialog1.Filter = "Text File|*.txt"
OpenFileDialog1.Title = "Open File..."
OpenFileDialog1.FileName = "test"
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Dim sr As System.IO.StreamReader = New System.IO.StreamReader(OpenFileDialog1.FileName)
Dim srlineitems() As String
srlineitems = Split(sr.ReadLine, " ")
Dim DT As New DataTable
DT.Columns.Add("Col1")
DT.Columns.Add("Col2")
DT.Columns.Add("Col3")
DT.Columns.Add("Col4")
DataGridView1.DataSource = DT
Dim Lines() As String = System.IO.File.ReadAllLines(OpenFileDialog1.FileName)
For Each Line As String In Lines
Dim ItemsOf() As String = Split(Line, " ")
Dim NRow As String() = {ItemsOf(0), ItemsOf(1), ItemsOf(2), ItemsOf(3)}
DT.Rows.Add(NRow)
Next Line
End If
Any help is appreciated
Try the .Net String.Split method instead, it has a RemoveEmptyEntries option.
ItemsOf = Line.Split(New String() {" "},
StringSplitOptions.RemoveEmptyEntries)