2011-04-21 94 views
0

如何删除下面的最后一个crlf代码?在最后一行删除CRLF

Dim fh As StreamReader 
    Dim temp as string 
    Dim temp1 as string 
    fh = new StreamReader("haggis.txt") 
    Dim s As String = fh.ReadLine() 
    While not s Is Nothing 

    temp = temp & s & Vbcrlf 

    Console.WriteLine(temp) 

    End While 
    fh.Close() 

haggis.txt

AAAA 
BBBB 


'Return 
AAAA 
BBBB 
crlf <---- I want to remove this. 
+2

您的代码是完全无效的。 – SLaks 2011-04-21 02:49:14

+0

我更改了代码SLaks - tnx – user709787 2011-04-21 03:01:28

+1

我是唯一一个发现“haggis.txt”有趣的人吗? – Cyclone 2011-04-21 03:27:08

回答

0

你不应该这样做的直接String串联在一个循环。我意识到上面的代码也只是一个例子,但是你永远不会更新你的循环内部的s,因此如果它进入它将是一个无限循环。

假设你解决这个问题,要使用一个StringBuilderString串联:

Dim temp As New System.Text.StringBuilder() 

While s IsNot Nothing 

    temp.Append(s).Append(vbCrLf) 

End While 

Dim answer As String = "" 

' avoid trying to get a substring if it's blank 
If temp.Length <> 0 Then 

    answer = temp.ToString(0, temp.Length - vbCrLf.Length) 

End If 

为了得到它没有最后vbCrLf,干脆砍掉它就像我上面做的。

+0

感谢您的代码工作。 – user709787 2011-04-21 03:23:19

+0

stringBuilder有一个例外,它不应该在连接像“abc”+“def”这样的字符串常量时使用。 – 2011-04-21 04:47:00

+0

@Mark Hosang Fair point。它在连接常量时不应该使用,因为它们将由编译器而不是在运行时连接在一起。对于Java也是如此(万一任何人通过搜索发现这一点)。 – pickypg 2011-04-21 15:48:34

1

试试这个:使用File.ReadAllLines(),这样你就不必使用vbCrLf在所有。它将所有行加载到一个字符串数组中。

Dim readText() As String = File.ReadAllLines("haggis.txt") 
Dim s As String 
For Each s In readText 
    Console.WriteLine(s) 
Next 
+0

对于小文件这个解决方案是好的,但你不认为它会在大文件上失败 – 2011-04-21 03:07:03

+0

@Subhash:把你在互联网上找到的所有代码都用一粒盐,并根据你的特定需求进行衡量。 :)你在假想的服务器上有多少内存? – 2011-04-21 03:08:37

+0

我只是问我的知识。使用File.ReadAllLines()可以安全地使用多大文件导致我在使用它时遇到了一些情况。这将是非常友善的你。 – 2011-04-21 03:14:11

0

这可能是一个简单的解决方案

For Each 
     Do 
      If (String.IsNullOrEmpty(strline)) Then 
       strline = strline & objSR.ReadLine() 
      Else 
       strline = vbCrLf & objSR.ReadLine() 
      End If 
      objwriteline.strline() 
     Loop 
    Next 
+0

'IIf'是VB和VB.NET中的一个函数。它不等同于C#中的三元运算符。结果,'IIf'将导致objSR.ReadLine()被调用两次,从而跳过文件的一半(每个奇数行,可能除了最后一行)。在VB.NET 2008中引入了'If''运算符“,就像C#三元运算符('?:')一样。例如:'如果(布尔表达式,true_part,false_part)' – pickypg 2011-04-21 03:22:17

+0

得到了你的感谢。 – 2011-04-21 03:24:01

+0

@pickypg你的意见,我已经改变了代码。请随时发表评论 – 2011-04-21 03:26:42