プロが教える店舗&オフィスのセキュリティ対策術

CR,LF,CRLFが混在しているテキストで難儀しております。

VB.NETでReadLine()を使えば、どんな改行コードでも削除した文字列を取得できますが、同じ内容を書き込む場合にどのような改行コードわからないと同じファイルができません。
安直にNewLineやWriteLine()を使うと、どんな改行コードでWindowsの場合はCRLFになります。
ReadLine()で取得した文字列+改行コードがわかる方法がありますか?

以下、例です。

dim s as String
Dim sr As New System.IO.StreamReader("yomu", "ISO-2022-JP")
Dim sw As New System.IO.StreamWriter("kaku", false, "ISO-2022-JP")

While sr.Peek() > -1
s = sr.ReadLine() '改行文字を取り除いた文字列
sw.Write(s) '書き込む
end While

sr.close()
sw.close()

A 回答 (3件)

 下記の方法で確認できます。



 Dim cn As integer
 Dim cbuf As String
 Dim cLine() As String

 cbuf = "".PadLeft(CInt(FileSystem.FileLen("C:\sbj\temp\aaaa.txt")))

 FileSystem.FileOpen(1, "aaaa.txt", OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Default)
 FileSystem.FileGet(1, cbuf)

 cbuf = Replace(cbuf, Chr(13) & Chr(10), Chr(12))
 cbuf = Replace(cbuf, Chr(10), Chr(10) & Chr(13) & Chr(10))
 cbuf = Replace(cbuf, Chr(13), Chr(13) & Chr(13) & Chr(10))
 cbuf = Replace(cbuf, Chr(12), Chr(13) & Chr(10))

 cLine=split(cbuf,Chr(13) & Chr(10)) ' 行変数 cLine に代入

 for cn=0 to cLine.Length-1 ' 行数分ループ

   If cLine(cn).Length>0 then
     If cLine(cn).Substring(cLine(cn).Length - 1, 1) = Chr(10) Then
       <===============> 最後の文字はLF
     ElseIf cLine(cn).Substring(cLine(cn).Length - 1, 1) = Chr(13) Then
       <===============> 最後の文字はCR
     Else
       <===============> 最後の文字はCRLF
     End If
   Else
       <===============> 最後の文字はCRLF
   End if

 next cn
    • good
    • 1

昔ながらのOpenステートメントを使って


Open "ファイルのフルパス" For Binary Lock Read Write As #1
なんてやります

ただ、今度は改行が拾えなくなるので、該当する改行コード(CR,LF,CRLF)の何れかに当たったら、その部分が改行と判断します
例えば拾ったとあるコードがCRかどうかの判断は
If MidB(buf,i,1) = Chr(13) then
てな感じ(Chr(13)はvbCRでも良かったはず)

この改行コードの入っていた位置と組み合わせ(CRLF= Chr(13) & Chr(10))をご自身で作った改行コードごとに行った作業の終了後に、ひとつなぎの文字列に戻してやれば理論上可能です
○CR□LF

○=△
□=◇

△CR◇LF
コレを書き出す

メモリの都合で難しい時は、Appendを使って追記して行けるので、一気にメモリに入れなくても分けて作業できます
コードに起こすと、結構な量なので概念(?)だけ

参考にするならこの辺り
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
http://officetanaka.net/excel/vba/file/file08.htm
http://yumi-ii.squares.net/archives/2005/09/2005 …
    • good
    • 0

文字列じゃなくてバイナリとして走査する形の物にしないと無理だね。


文字列は改行は改行としてしか扱ってくれないけれどバイナリなら「文字コード」という名の数値データでしかなくなるから。


VBでどうやるのかは判らない。ゴメン
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A