改行のない1行のテキストファイルのヘッダ部分を区別するために、Nバイト目に改行コードを1つ挿入したいのですが、どのような処理
をすればよいのか検討が付きません。よい方法があったら教えてください。
例)
<!-- header --><root><name>aaa</name></root>
↓
<!-- header -->
<root><name>aaa</name></root>
テキストファイルのヘッダっちゅーよりは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
コレで。
文字列に読み込んで
"<!-- header --><root>"を
"<!-- header -->" & vbCrLf & "<root>"に
Replaceするとか。
…そういえば、なんでもないことなんだが…VBのバージョンはなんだろうな…
オレのはVB6だ。
ガッさん、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()
お騒がせしました。
ツイート | ![]() |