2013-02-12 52 views
0

我必須在vb .NET中以編程方式刪除文件的最後一行空行。有時候,只有一條空行,有時是兩條(但從不多)。刪除vb中的最後一個字符(空行)。NET

我使用這些代碼行現在在:

fs = New FileStream(Fic_source, FileMode.Open, FileAccess.ReadWrite) 
fs.Seek(-50, SeekOrigin.End) 
Dim strEOF As String = New StreamReader(fs).ReadToEnd() 
strEOF = strEOF .Replace(vbCrLf, "") ' 
strEOF = strEOF .Replace("\r", "") ' Removes every CR/LF/CRLF from the end of the file 
strEOF = strEOF .Replace("\n", "") ' 
strEOF = String.Concat(strEOF , vbCrLf) ' adds an empty line to finish the file correctly 

但我似乎無法弄清楚如何在過去50個字符從我流替換到strEOF,任何人有一個想法?

+0

如何「有時是兩個(但絕不會)「翻譯成」最後50個字符「?請在你的問題中更精確。另外,請閱讀常見問題解答並查看是否可以將您的問題應用於廣泛的受衆羣體。因爲這是你的問題太局部化了,必然會在沒有答案的情況下關閉。 – 2013-02-12 19:39:39

+1

我不認爲'strEOF.Replace(「\ r」,「」)'實際上會將vbCr替換爲空字符串。 ''\ n「'相同。 [見此](http://stackoverflow.com/questions/515722/new-line-character-in-vb-net)。 – Neolisk 2013-02-13 01:33:04

+0

你不應該在VB中使用C風格轉義。您的替換功能在字面上查看「\ r」和「\ n」 - 而不是*查找ASCII 13(「\ r」)和ASCII 10(「\ n」)。 – jinzai 2017-12-20 19:41:07

回答

0

如果是我,我會考慮改變文件的長度 - 在文件流上嘗試SetLength。沖洗並關閉。

0

由於您將流中的數據轉換爲字符串,因此請使用正則表達式來匹配並替換多個CRLF的可能性。正則表達式處理器的一個細微之處是,你可以告訴它從右到左工作;因此從最後開始。

以下模式將從最後($)開始,並用一個CRLF替換任何CRLF(最多兩個或四個字符,或者是\ r \ n)。如果沒有,那麼它將替換爲(實際上放在)最後一個,即使它不匹配任何字符集。

dim data = string.Format("ABC{0}DEF{0}{0}", Environment.NewLine) ' 2 CRLF 
dim pattern = "[\r\n]{0,4}$" 

Console.WriteLine("***{0}***", Regex.Replace(data, pattern, Environment.NewLine, RegexOptions.RightToLeft)) 

data = string.Format("ABC{0}DEF", Environment.NewLine) ' No CRLFS 

Console.WriteLine("***{0}***", Regex.Replace(data, pattern, Environment.NewLine, RegexOptions.RightToLeft)) 

' Console Results (note that *** is following each DEF 
'***ABC 
'DEF 
'*** 
'***ABC 
'DEF 
'*** 
0

你想從你的文字端部修整CR和LF,所以你還不如用.TrimEnd:

strEOF = strEOF.TrimEnd(vbCrLf.ToArray) & vbCrLf 
0
Dim objWriter As New StreamWriter(FileNamewithPath, True) 
objWriter.NewLine = Chr(10) 'This works as ENTER on keyboard. This is optional. 
objWriter.WriteLine("The text that is required to write") 
'Loop it to get all the values you need to write. 
'Before the last line. i.e. before your end loop - 1 step 
objWriter.NewLine = "" 'add this 
objWriter.WriteLine("last line to be written"). 
objWriter.Close() 
相關問題