2011-04-21 73 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