質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

5709閲覧

VB.NET Listbox 改行を加えたまま保存&読込したい

GoogleWindows

総合スコア23

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/08/20 01:06

Listboxにデータを追加する際、改行された文字列でも1行の項目として登録可能だと思いますが、
そのデータを一旦.txtに書き出して読み込ませると、
改行分だけ項目数が分割されてしまいます。

これを、Listbox登録時のままの分割されていない状態で、
保存&読込をさせるにはどのようにしたら良いでしょうか。

以下、現状の.txt保存&読込コードです。

VB.NET

1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 2 'テキストファイルを読込みリストボックスに表示 3 'リストボックスに水平スクロールバーを表示 4 ListBox1.HorizontalScrollbar = True 5 ListBox1.Items.Clear() '一旦消去 6 Dim st As New System.IO.StreamReader("....\ClipList.csv", 7 System.Text.Encoding.Default) 8 'ファイルの最後までループ 9 Do Until st.Peek = -1 10 '1行づつ読込む 11 ListBox1.Items.Add(st.ReadLine) 12 Loop 13 st.Close() 'ファイルを閉じる 14 15 End Sub 16 17 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 18 Dim enc As Encoding = Encoding.GetEncoding("Shift_JIS") 19 Dim Fname As String = "....\ClipList.csv" 20 Using writer As StreamWriter = New StreamWriter(Fname, False, enc) 21 For i As Integer = 0 To ListBox1.Items.Count - 1 22 writer.WriteLine(ListBox1.Items(i)) 23 Next 24 End Using 25 26 End Sub

開発環境

Windows10 x64
Visual Studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2019/08/20 01:44

入力(ClipList.csvの中身)が最初はどうなってて、出力(Button2をクリックした後のClipList.csvの中身)がどうなってしまうのか、を追記してください。 (たぶん入力も出力も同じものを期待してるって意味ですよね?)
退会済みユーザー

退会済みユーザー

2019/08/20 02:01

何を作っているかぐらいは書きませんか? ListBox というのは Windows Forms, WPF, ASP.NET Web Forms のいずれにもあります。 コードを読めばわかるというのはナシにしてくださいね。あなたが質問の一行目に書いてくれれば回答者・閲覧者はすぐわかる(=時間の無駄が省ける)わけですから。
dewdtm

2019/08/20 02:35

ろくに回答もせずルールを押し付けたり1から10まで説明を求めるような何ちゃってエンジニアばかりだから困る
guest

回答2

0

ベストアンサー

・出力がCSVなのでダブルコーテーションで囲って、改行があっても1つのデータとして扱うようにする(読み込みロジックも変更が必要)
・改行コードを別の文字に置き換え、読み込んだ時に改行に戻す

単純に考えて上記2パターンですかね

投稿2019/08/20 01:40

YAmaGNZ

総合スコア10251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GoogleWindows

2019/08/20 02:07

YAmaGNZ様 ご回答ありがとうございます。 依頼をお受け下さり、感謝いたします。 改行コードを別の文字に置き換える方法で解決いたしました。 st.WriteLine(Replace(ListBox1.Items(i).ToString(), vbCrLf, "置き換え文字")) 的確なご回答ありがとうございました。
guest

0

ListBox1.Items.Add(st.ReadLine)

ReadLineだと、1行単位の読み込みとなります。
行単位でItems.Addするようにコードがなってますが、
ここをどういうふうにしたいんでしょうか

投稿2019/08/20 01:14

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GoogleWindows

2019/08/20 01:22

ご連絡ありがとうございます。 Listboxの行単位にしたいと思っています。 Listboxは、登録時だと改行されている文字列でも一行として扱います。 しかし、txtファイルへ保存すると、行が分割されてしまい、当然読み込み時も行が分割された状態になってしまいます。 xmlでの読み書きが実現すれば可能なのかなとは思っておりますが、 参考になるサンプルが見つからないといった状態です。
y_waiwai

2019/08/20 01:26

回答にも書いてますが、ReadLineで改行ごとに分割されます このコードでは、ListBoxの行ごとに、ファイルの1行が割り当てられることになります
GoogleWindows

2019/08/20 01:32

はい、それは承知しております。 その上で、どういった改善策があるか教えていただけると幸いです。
y_waiwai

2019/08/20 01:34

あなたがどうしたいのかというのがこっちには見えてません。 具体的にどういう風になればいいんでしょうか。具体例を提示してください
GoogleWindows

2019/08/20 01:36

ご質問させていただいた内容がすべてです。 これ以上、どう説明すればよいか分かりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問