2016-05-12 36 views
0

私はこれに対する解決策を探しましたが、私が見つけたものは、私が必要以上にやっていることです。VB.netのファイルの末尾にあるCR/LFを削除する

追加したいファイルがあります。私は最後の行の最後に追加する必要がありますが、それらはすべてキャリッジリターンを持っているので、私は通常のように追加するだけで新しい行に追加されます。

私が望むのは、ファイルパスを取って、その終わりにCR/LFを削除するサブルーチンを作成することです。これに対する解決策を私に指摘するどんな助けでも感謝します。私はこれを行うための機能が組み込まれていないことに驚いています。

+0

ファイルを読み書きする方法を示すコードはありますか? – Malcor

+0

まだありません。私は何かできるようになる前に、キャリッジリターンを取り除く必要があります。ファイルへの書き込みは簡単です。私はキャリッジリターンがなくなったら、後でファイルに書きます。タスクは別々になる予定です。 – pminogue

+0

グローバルアイデアは、ファイルを読み取り/書き込みとして開き、最後の2文字(CR + LFは2文字)にポインタを置き、そこから書き込みを開始することです。それは最後の新しい行を取り除くでしょう... –

答えて

3
Dim crString = Environment.NewLine '= vbCrLf 
    Dim crBytes = Encoding.UTF8.GetBytes(crString) 
    Dim bytesRead(crBytes.Length - 1) as Byte 
    Dim iOffset As Integer = 0 
    Dim stringRead As String 

    Using fs = File.Open("G:\test.txt", FileMode.Open, FileAccess.ReadWrite)  
     While iOffset < fs.Length  
      fs.Seek(- (crBytes.Length + iOffset), SeekOrigin.End) 
      fs.Read(bytesRead,0, crBytes.Length) 
      stringRead = Encoding.UTF8.GetString(bytesRead) 
      If stringRead = crString Then 
       fs.SetLength(fs.Length - (crBytes.Length * iOffset + 1)) 
       Exit While 
      End If 
      iOffset += 1 
     End While 
    End Using 

私はFileStreamとしてテキストファイルを開き、ファイルの最後にその位置を設定 - キャリッジリターン文字列の長さを。

次に、キャリッジリターンが見つかるまで、またはeofに達するまで、オフセットを減らしながら現在のバイトを読み取ります。

CRが見つかった場合は、それを削除します。 ループを削除してeofだけを確認したい場合は、 しかし、私はループを使用しているので、いくつかのvbNullStringがeofにある可能性があります。

私の例ではUTF8エンコードを使用していますのでご注意ください。他のエンコーディングがある場合は、それに応じてそれを適応させる必要があります。実行前

あるtest.txt:コードスニペットの実行後

Before

があるtest.txt:

enter image description here

EDITfs.SetLength部分は、最後の文字の場合には間違っていましたファイルはCRではありませんでした。

+0

素晴らしいもの。どうもありがとう。これはまさに私が必要としていたものです。 – pminogue

+0

* faulty *または* irregular *テキストファイル(この環境があなたの環境で発生している場合)で動作するかどうか確認してください。私は初心者だけをテストしました。私の編集も見てください。 –

+1

私は使用しているファイルと完全に動作します。常に同じ形式でなければなりません。そうでない場合は、このスクリプトがそれらに触れる前に対処されます。再度、感謝します。 – pminogue

0

私はString.Replace(ControlChars.CrLf.ToCharArray(),"")作品が見つかりました。

おそらくそれを行うためのより良い方法です!

+0

これは実際にはファイルであり、文字列ではありません。しかし、提案をありがとう。 – pminogue

関連する問題