テキストファイルの途中に改行を挿入するには?

解決


きゅうぞう  2004-10-24 02:33:48  No: 117166

改行のない1行のテキストファイルのヘッダ部分を区別するために、Nバイト目に改行コードを1つ挿入したいのですが、どのような処理
をすればよいのか検討が付きません。よい方法があったら教えてください。
例)
<!-- header --><root><name>aaa</name></root>

<!-- header -->
<root><name>aaa</name></root>


ガッ  2004-10-24 03:16:01  No: 117167

テキストファイルのヘッダっちゅーよりはHTMLやね。
nバイト目に改行コードをポロっと入れると、文字化けが起こる可能性が高いので、
n文字目に改行コードを入れることにしたほうがいいと思うぞ。
でも何がなんでもnバイト目に入れようとするなら…

Private Sub Form_Load()
    Dim buf() As Byte
    Dim v As Variant
    buf = "abc"
    For Each v In buf: Debug.Print v;: Next: Debug.Print
    buf = addVBCRLF(buf, 1)
    For Each v In buf: Debug.Print v;: Next: Debug.Print
    Debug.Print "<" + CStr(buf) + ">"
End Sub

Public Function addVBCRLF(ByVal iString As String, ByVal nPosition As Long) As String
    
    addVBCRLF = LeftB$(iString, nPosition) + vbCrLf + RightB$(iString, LenB(iString) - nPosition)
    
End Function

コレで。


Say  2004-10-24 03:53:58  No: 117168

文字列に読み込んで
"<!-- header --><root>"を
"<!-- header -->" & vbCrLf & "<root>"に
Replaceするとか。


ガッ  2004-10-24 13:25:13  No: 117169

…そういえば、なんでもないことなんだが…VBのバージョンはなんだろうな…
オレのはVB6だ。


きゅうぞう  2004-10-25 20:07:25  No: 117170

ガッさん、Sayさん返事ありがとうございます。
一応解決しました。
.NET VBで作ってます。

詳細な説明がないなかで推測で書いていただいてありがとうございます。
ただ、XMLファイルを扱っておりまして、ファイルサイズが極端に大きく
なるケースを想定しなくてはならず、String型の結合は行わない方が
よいと思い、バイナリ形式で2つのファイルをオープンして1文字ずつ
書き込んでいくやりかたで、なんとか解決しました。
.NETでは、バイナリファイルの扱いがよくわからなかったものですから
過去ログを参考にしてなんとか対処しました。
業務アプリで、XMLを読み込む側のPGがどうしても、ヘッダ部の後にある
改行を意識しているものですから、こちらのPGでMSXMLのDOMを使って
SAVEを行うと、自動的に、改行をとられてしまうのです。
それで、1行目だけ改行を入れるという処理を必要としました。

ちなみにこんな感じでやりました:

'* 1行目だけ改行を入れる
Dim strWkFile as String = "c:\original.xml"
Dim strWkFile as String = "c:\work.xml"

Dim inFile As New System.IO.FileStream(strWkFile, IO.FileMode.Open)
Dim outFile As New System.IO.FileStream(strWkFile2, IO.FileMode.OpenOrCreate)
Dim sr As New System.IO.BinaryReader(inFile)
Dim sw As New System.IO.BinaryWriter(outFile)
Dim strBuf As String

strBuf = "<?xml version=""1.0"" encoding=""UTF-8""?>" + vbCrLf    '* ヘッダ文字列
Dim bs() As Byte = System.Text.Encoding.UTF8.GetBytes(strBuf)     '* バイナリへ変換

sw.Seek(0, IO.SeekOrigin.Begin)
sw.Write(bs, 0, bs.Length)

'* 読み込みファイルをシークする
sr.ReadChars(39)

'* 1文字ずつ読み込んで書き込む
Do While (sr.PeekChar() <> -1)
   sw.Write(sr.ReadByte())

Loop

inFile.Close()
outFile.Close()

お騒がせしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加