• ベストアンサー

テキスト操作

できるかどうか曖昧なのでこの場で質問させていただきます。 VBからテキストに書き込みを行う処理なんですが、 まず 111111 と先頭行に書かれたテキストファイルがあります。 これから新たに先頭行に"2222222"を追加します。 (ここからVBの処理で) 222222 111111 また先頭行に"333333"を追加します。 ここで"11111111"を削除します。 333333 222222 つまりテキストファイルが3行以上に達すると下から削除していく動きです。(ところてん式に押し出すイメージですね) こうゆう動きってVBで可能でしょうか? 僕が調べた限りでは不可能な気がします。 もし、代替案があればご指導いただきたいと思ってます。

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

  • ベストアンサー
  • mono-001
  • ベストアンサー率32% (13/40)
回答No.1

別に不可能じゃないですよ 1行目を読み込んで新たに追加する文字列とともに書き込めばすむだけです 実装方法は色々あると思いますので考えてみてください

ko0513jp
質問者

お礼

なるほど! 読み込みがありましたね。これなら実装できます! 僕の考え不足でしたね^^; どうもありがとうございます。

その他の回答 (3)

回答No.4

'ためしに実装してみた。 'スタックを追加。 Option Explicit On Option Strict On Option Compare Binary ' Option Infer Off Class Q4130976A Private Queue As System.Collections.Generic.Queue(Of String) Sub New() Dim StreamReader As System.IO.StreamReader Dim StreamWriter As System.IO.StreamWriter Dim Strings As String() = {"00000"} Dim Stack As System.Collections.Generic.Stack(Of String) 'ファイルを作っておいてね。そこに書き込むので。 Dim Path As String = "./Q4130976-1.txt" '本当はこの辺にtry catch構文が必要。ファイルが無かったとか処理途中でファイル名が変更されたとか。 StreamReader = New System.IO.StreamReader(Path,System.Text.Encoding.GetEncoding(65001)) Queue = New System.Collections.Generic.Queue(Of String)() Stack = New System.Collections.Generic.Stack(Of String)() Do While Not StreamReader.EndOfStream Stack.Push(StreamReader.ReadLine()) Loop If Stack.Count > 2 Then Exit Sub End If StreamReader.Close() For Each str As String In Stack Queue.Enqueue(str) Next For Each str As String in Strings Append(str) Next StreamWriter = New System.IO.StreamWriter("./Q4130976-1.txt",false,System.Text.Encoding.GetEncoding(65001)) Dim strs As String() = Queue.ToArray() System.Array.Reverse(strs) For Each str As String in strs StreamWriter.WriteLine(str) Next StreamWriter.Close() End Sub Sub Append(Str As String) If Queue.Count = 2 Then Queue.Dequeue() End If Queue.Enqueue(Str) End Sub Shared Sub Main() Dim hoge As Q4130976A = New Q4130976A End Sub End Class

回答No.3

あーっとちょっと待った。 最初にファイルに 11111 22222 って書いてあったら 先に11111が消える。考え直してくる

回答No.2

'ためしに実装してみた。 Option Explicit On Option Strict On Option Compare Binary ' Option Infer Off Class Q4130976A Private Queue As System.Collections.Generic.Queue(Of String) Sub New() Dim StreamReader As System.IO.StreamReader Dim StreamWriter As System.IO.StreamWriter Dim Strings As String() = {"2222","3333"} 'ファイルを作っておいてね。そこに書き込むので。 Dim Path As String = "./Q4130976-1.txt" '本当はこの辺にtry catch構文が必要。ファイルが無かったとか処理途中でファイル名が変更されたとか。 StreamReader = New System.IO.StreamReader(Path,System.Text.Encoding.GetEncoding(65001)) Queue = New System.Collections.Generic.Queue(Of String)() Do While Not StreamReader.EndOfStream Queue.Enqueue(StreamReader.ReadLine()) Loop If Queue.Count > 2 Then Exit Sub End If StreamReader.Close() For Each str As String in Strings Append(str) Next StreamWriter = New System.IO.StreamWriter("./Q4130976-1.txt",false,System.Text.Encoding.GetEncoding(65001)) Dim strs As String() = Queue.ToArray() System.Array.Reverse(strs) For Each str As String in strs StreamWriter.WriteLine(str) Next StreamWriter.Close() End Sub Sub Append(Str As String) If Queue.Count = 2 Then Queue.Dequeue() End If Queue.Enqueue(Str) End Sub Shared Sub Main() Dim hoge As Q4130976A = New Q4130976A End Sub End Class

関連するQ&A