• ベストアンサー

1行ごとに取得して、その改行文字が何か知る方法

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()

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

その他の回答 (2)

  • pulsa
  • ベストアンサー率57% (34/59)
回答No.2

昔ながらの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/sub05_110.html http://officetanaka.net/excel/vba/file/file08.htm http://yumi-ii.squares.net/archives/2005/09/20050909233610.php

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

文字列じゃなくてバイナリとして走査する形の物にしないと無理だね。 文字列は改行は改行としてしか扱ってくれないけれどバイナリなら「文字コード」という名の数値データでしかなくなるから。 VBでどうやるのかは判らない。ゴメン