こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイルを読み込み各行の両端にダブルクオーテーションをつけて保存するには?

お世話になります。
テキストファイルを読み込みファイルの各行の両端に"をつけたいのです。たとえば、

今日は友人と焼肉を食べに行った。
雨の中、外を歩くのはつらかったが、
久々に会える友達のため東京まででかけた。

という文があったとしてプログラムを通しての出力結果が

"今日は友人と焼肉を食べに行った。"
"雨の中、外を歩くのはつらかったが、"
"久々に会える友達のため東京まででかけた。"

というように出力されるようにしたいのです。
下記のコードを自分で考えてみましたが、テキストファイルに保存がうまくできませんでした。どうすればよろしいでしょうか?
教えてください。お願いします。


Dim Reader As New IO.StreamReader("C:\aa.txt")
Do Until Reader.EndOfStream
ListBox1.Items.Add(Chr(&H22) & Reader.ReadLine & Chr(&H22))
Loop

Reader.Close()

Dim dtmStart As DateTime = DateAdd(DateInterval.Second, 10, Now)
Do While Now < dtmStart
Application.DoEvents()
Loop


Dim Writer As New IO.StreamWriter("C:\bb.txt")
Writer.WriteLine(ListBox1.Text)
Writer.Close()

End Sub

投稿日時 - 2007-10-24 00:12:35

QNo.3456061

暇なときに回答ください

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

Public Class Q3456061

Shared Sub Main()
'System.Windows.Formsを読み込むのが面倒くさかったという
'個人的な都合でSystem.Collections.Generic.Listに変更
Dim Lines As System.Collections.Generic.List(Of String)
Dim ReadFile As String
Dim SaveFile As String

Lines = New System.Collections.Generic.List(Of String)
ReadFile = Q3456061.GetAppPath() & "\Q3456061-1.txt"
SaveFile = Q3456061.GetAppPath() & "\Q3456061-2.txt"

'普段はUTF-8(BOMあり)で作るが,念のためCodePage 932で作った。
'そのため,コンストラクタに文字符号化方式を指定している。

Dim Reader As System.IO.StreamReader
Reader = New System.IO.StreamReader(ReadFile,System.Text.Encoding.GetEncoding(932))

'個人的な都合で,UntilをWhileにさせてもらった。
'http://www.windows-world.jp/ganko/-/46889.html
Do While Reader.EndOfStream = false
Lines.Add(Chr(&H22) & Reader.ReadLine & Chr(&H22))
Loop

Reader.Close()

'意図不明。
'Dim dtmStart As DateTime = DateAdd(DateInterval.Second, 10, Now)
'Do While Now < dtmStart
'Application.DoEvents()
'Loop

Dim Writer As System.IO.StreamWriter
Writer = New System.IO.StreamWriter(SaveFile,false,System.Text.Encoding.GetEncoding(932))
Do While Lines.Count > 0
'元のソースコードにあったListBox1.Textってのが間違いで
'ItemをWriteLineするような気がする。
'それを考慮してDo~Loop内に入れる。ただし、当然Closeは外に出す
Writer.WriteLine(Lines(0))
Lines.RemoveAt(0)

Loop

Writer.Close()

'単純にコレをやりたかったならいいが,ファイルフォーマットの仕様作成等に携わるなら,
'「文字列として改行や制御文字を含めたい」時や「文字列中に"を含めたい」等の要望も予測しておく必要がある。



End Sub

'当方のプログラムの都合上入れてます
'http://dobon.net/vb/dotnet/vb6/apppath.html

Shared Function GetAppPath() As String
Return System.IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetExecutingAssembly().Location)
End Function
End Class

'余談 Q3453592も答えようとしたが,APIリファレンスの読み方が解らず、挫折。
'一応setStringで文字列扱いとしてセルに挿入されるみたいだ。
'で,それ以外の数字に関してだが,
'OOo/Excelではセルを右クリックして「セルのフォーマット」/「表示形式」を「文字列」/「テキスト」に
'変更するとCSVで保存した時に引用符で括られる。

'ただしExcel[当方2000で検証]では読み込むとき,
'標準として読み込むので結局"001"等は1になってしまう。OOoはCSVを開いたときに
'各列のフォーマットをテキストに変更することで001という文字列として読み込むことが出来る。
'OOo Basicでの方法がわからなかったので回答してなかったが

'・・・って余談のほうが長いような

投稿日時 - 2007-10-24 01:08:42

お礼

ご親切にありがとうございます。
私のしりたかったことがまさに解決しました。

これで停滞していた仕事がはかどります。
ありがとうございました。

投稿日時 - 2007-10-24 01:56:51

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問