对于每个循环字符串

时间:2012-11-22 16:46:47

标签: vb.net visual-studio-2010

我从我的网站上获取文件内容:

    Dim client As WebClient = New WebClient()
    Dim text = client.DownloadString("http://myurl.com/raw.php")

text如下:

Line
Another Line
Test1
Test2

现在,如何在text变量中运行循环,以获得每行的文本?

我试过这个:

    Dim str As String() = text.Split(":::")
    For Each line As String In str
        MsgBox(line)
    Next

我用:::完成每一行,但这种方法看起来很难看,我希望有更好的解决方案?

4 个答案:

答案 0 :(得分:5)

Dim lines As String() = text.Split(Environment.NewLine)
For Each line As String In lines
    MsgBox(line)
Next

这可能不起作用,因为原始字符串中的换行符字符与Environment.Newline不同。如果字符串来自基于Unix的源,则会发生这种情况。

另一种方法可能是:

Dim reader = new StringReader(text)
While True
    Dim line = reader.ReadLine()
    If line is Nothing
        Exit While
    Else
        MsgBox(line)
    End If
End While

答案 1 :(得分:2)

使用XML时vb.net端的示例:

Dim doc As New System.Xml.XmlDocument
doc.Load("http://myurl.com/raw.php")

Dim list = doc.GetElementsByTagName("article")

For Each item As System.Xml.XmlElement In list
    MsgBox(item.InnerText)
Next

编辑:

示例XML架构:

<?xml version='1.0'?>
<!-- File generated at 22/11/2012 17:22 -->
<articleList>
  <article>Hello</article>
  <article>World</article>
  <article>Fish</article>
</articleList>

现在切换到XML的另一个好处是,将来更容易添加更多细节(如文章标题,日期/时间,作者等)。

答案 2 :(得分:1)

使用text.Split(CChar(Environment.NewLine)),如另一个答案中所建议的那样,不是最佳的:Environment.NewLine在Windows系统上返回双字符序列CR LF。因此,CChar(Environment.NewLine)仅返回字符串的第一个字符CR。如果数据源来自unix系统,则可能由LF s分隔。

如果您不确定确切的行结尾,可以使用以下内容:

Dim lines As String() = text.Split(new String() {vbCrLf, vbCr, vbLf}, 
                                   StringSplitOptions.None)

这应该涵盖所有情况,因为它仅在CR,仅在LF和两者的组合上分开。

答案 3 :(得分:-1)

很抱歉在几年后提出这个问题......我刚刚找到了一种更简单的方法:

dim lin() as string
lin() = TextBox1.Text.Split(vbCrLf)