tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルテキストを複数のtextboxに配置
記事No7935
投稿日: 2008/08/12(Tue) 10:57
投稿者イチノセ
みなさん、はじめまして。
VB2008 winvista 32 環境でプログラムを作っています。
テキストファイルの中から特定の文字列(項目名)を複数のテキストボックスに
配置しようとしているのですが、テキストボックスに表示されるのは
すべての行の項目名が入ってしまいます。
これを一行ずつテキストボックスに収めるにはどうすれば良いのでしょうか?

※テキストの中身(test001.txt)
0001,あいうえお,アイウエオ,aiueo
0002,かきくけこ,カキクケコ,kakikukeko
0003,さしすせそ,サアシスセソ,sashisuseso
 ・
 ・
 ・
この中のカナ部分のみを複数のテキストボックスへ配置したいのです。

試したコード

   Dim line As String
        Dim Item() As String
        Dim reader As New System.IO.StreamReader("D:\test001.txt", System.Text.Encoding.Default)
        TextBox1.Clear()
        Do Until reader.EndOfStream
            line = reader.ReadLine
            Item = line.Split(",")
            'TextBox1.AppendText(line.Substring(3) & ControlChars.CrLf)
            TextBox1.AppendText(Item(2))
            TextBox2.AppendText(Item(2))
        Loop
        reader.Close()

実際の動作は、TextBox1と2も同じく[アイウエオカキクケコサシスセソ・・・・]
になってしまいます。
どれが一行目でどれが2行目なのか等記入すれば思いどおりに表示できるのでしょうか?



その記述方法がわからないのですが、どなたか知恵を貸していただけませんでしょうか?

[ツリー表示へ]
タイトルRe: テキストを複数のtextboxに配置
記事No7936
投稿日: 2008/08/12(Tue) 11:23
投稿者魔界の仮面弁士
> VB6.0 winvista 32 環境でプログラムを作っています。
こっちに移動してきてもなお、VB6 と言い切りますか…。(^_^;)


> この中のカナ部分のみを複数のテキストボックスへ配置したいのです。
TextBox1 と TextBox2 に、それぞれどのように配置したいのでしょうか?

「1 行目を TextBox1 、2 行目を TextBox2 に配置」させたいなら、
行数に応じたボックスが必要でしょう。(今は 2 つ分しか無いですね)

「2 列目のひらがなを TextBox1 、3 列目のカタカナを TextBox2 に配置」なら、
前者は Item(1)、後者は Item(2) を使うべきでしょう。また、その場合、それぞれの
データを改行させて表示させていくのか、それとも区切り無く続けていくのかでも
書き方が異なってきますね。


> Dim reader As New System.IO.StreamReader("D:\test001.txt", System.Text.Encoding.Default)
Using ブロックを使うようにしましょう。

[ツリー表示へ]
タイトルRe^2: テキストを複数のtextboxに配置
記事No7937
投稿日: 2008/08/12(Tue) 12:30
投稿者イチノセ
> > VB6.0 winvista 32 環境でプログラムを作っています。
> こっちに移動してきてもなお、VB6 と言い切りますか…。(^_^;)
>
>
> > この中のカナ部分のみを複数のテキストボックスへ配置したいのです。
> TextBox1 と TextBox2 に、それぞれどのように配置したいのでしょうか?
>
> 「1 行目を TextBox1 、2 行目を TextBox2 に配置」させたいなら、
> 行数に応じたボックスが必要でしょう。(今は 2 つ分しか無いですね)
>
> 「2 列目のひらがなを TextBox1 、3 列目のカタカナを TextBox2 に配置」なら、
> 前者は Item(1)、後者は Item(2) を使うべきでしょう。また、その場合、それぞれの
> データを改行させて表示させていくのか、それとも区切り無く続けていくのかでも
> 書き方が異なってきますね。
>
>
> > Dim reader As New System.IO.StreamReader("D:\test001.txt", System.Text.Encoding.Default)
> Using ブロックを使うようにしましょう。

魔界の仮面弁士さま、vb6.0 誤記していました。。ご指摘ありがとうございます
> TextBox1 と TextBox2 に、それぞれどのように配置したいのでしょうか?
それぞれのTextBoxにカナの部分だけを配置していきたいのです
textbox1には1行目のアイウエオ
textbox2には2行目のカキクケコ
textbox3には3行目のサシスセソ
というようにカナの項目をそれぞれの
TextBoxに表示させたいのです
このTextBoxは18個ほどあります

> Using ブロックを使うようにしましょう。
下記の記述方法でよろしいのでしょうか?

  Dim Line As String
        Dim Item() As String
        Using reader As New System.IO.StreamReader("D:\test001.txt", System.Text.Encoding.Default)
            TextBox1.Clear()
            TextBox2.Clear()
            TextBox3.Clear()
            Do Until reader.EndOfStream
                Line = reader.ReadLine
                Item = Line.Split(",")
                TextBox1.AppendText(Item(2))
                TextBox2.AppendText(Item(2))
                TextBox3.AppendText(Item(2))
            Loop

        End Using

※現在の状況はどのTextBoxにもカナの項目がすべて入ってしまいます。
Item=Line.Split(","&ControlChars.NewLine)と
Item=Line.Split(","&ControlChars.CrLf)、を試しましたが見当違いでした。。

[ツリー表示へ]
タイトルRe^3: テキストを複数のtextboxに配置
記事No7939
投稿日: 2008/08/12(Tue) 13:05
投稿者魔界の仮面弁士
> vb6.0 誤記していました。。ご指摘ありがとうございます
正しいバージョンは何ですか?
(VB6 板に書かれてはいますが、誤記ならば、本人が訂正するのが筋なので)

> textbox1には1行目のアイウエオ
> textbox2には2行目のカキクケコ
> textbox3には3行目のサシスセソ
> というように表示させたいのです
> このTextBoxは18個ほどあります
ファイルが 19 行あったり、10行しかなかった場合などの対応が
気になりますが、とりあえず手抜きコードでよければ、こんな感じかな。

Dim all As String = My.Computer.FileSystem.ReadAllText("D:\test001.txt", System.Text.Encoding.Default)
Dim lines() As String = all.Split(vbNewLine)
TextBox1.Text = lines(0).Split(","c)(2)
TextBox2.Text = lines(1).Split(","c)(2)
TextBox3.Text = lines(2).Split(","c)(2)

実際には、不正なデータ(カンマの数が足りない行など)も考慮すべきかと。

[ツリー表示へ]
タイトルRe^4: テキストを複数のtextboxに配置
記事No7940
投稿日: 2008/08/12(Tue) 13:19
投稿者イチノセ
> > vb6.0 誤記していました。。ご指摘ありがとうございます
> 正しいバージョンは何ですか?
> (VB6 板に書かれてはいますが、誤記ならば、本人が訂正するのが筋なので)
>
> > textbox1には1行目のアイウエオ
> > textbox2には2行目のカキクケコ
> > textbox3には3行目のサシスセソ
> > というように表示させたいのです
> > このTextBoxは18個ほどあります
> ファイルが 19 行あったり、10行しかなかった場合などの対応が
> 気になりますが、とりあえず手抜きコードでよければ、こんな感じかな。
>
> Dim all As String = My.Computer.FileSystem.ReadAllText("D:\test001.txt", System.Text.Encoding.Default)
> Dim lines() As String = all.Split(vbNewLine)
> TextBox1.Text = lines(0).Split(","c)(2)
> TextBox2.Text = lines(1).Split(","c)(2)
> TextBox3.Text = lines(2).Split(","c)(2)
>
> 実際には、不正なデータ(カンマの数が足りない行など)も考慮すべきかと。

魔界の仮面弁士さま、どうもありがとうございます。
正しいバージョンは一番初めの投稿を修正させていただきましたが、VB2008になります。
お察しのとおり全くの素人です(^^;)
split(","c)のcは文字化け等の対策なのでしょうか?
カンマの数はテキストを書き込むのをプログラム上で行っているので
人為的なミスはないと思いますが、対策として考えさせていただきます。

[ツリー表示へ]
タイトルRe^5: テキストを複数のtextboxに配置
記事No7941
投稿日: 2008/08/12(Tue) 14:28
投稿者魔界の仮面弁士
> split(","c)のcは文字化け等の対策なのでしょうか?

","  とは、文字列リテラル。String 型の「,」を意味します。
","c とは、文字リテラル。  Char 型の「,」を意味します。


> カンマの数はテキストを書き込むのをプログラム上で行っているので

たとえば 3 レコードのデータとしても、
『1行目{改行}2行目{改行}3行目{改行}』となるパターンと、
『1行目{改行}2行目{改行}3行目』というパターンとがありますよね。

もし、前者の実装になっているのであれば、ファイルの一番最後に、
カンマを含まない空の行が存在する事になるので、注意してください。

[ツリー表示へ]
タイトルRe^6: テキストを複数のtextboxに配置
記事No7942
投稿日: 2008/08/12(Tue) 14:46
投稿者イチノセ
> もし、前者の実装になっているのであれば、ファイルの一番最後に、
> カンマを含まない空の行が存在する事になるので、注意してください。

魔界の仮面弁士さま、度々ありがとうございます。
無用なエラーをなくすためにも","cで記述いたします。

[ツリー表示へ]
タイトルRe^7: テキストを複数のtextboxに配置
記事No7943
投稿日: 2008/08/12(Tue) 15:25
投稿者魔界の仮面弁士
> 【全文引用を避け、必要な部分のみを引用するようにして下さい。】
# そう来ましたか。(^^; >管理者殿
## といって、注意文ごと引用する人が出てきたりして…。(negative thinking)


> > もし、前者の実装になっているのであれば、ファイルの一番最後に、
> > カンマを含まない空の行が存在する事になるので、注意してください。
> 魔界の仮面弁士さま、度々ありがとうございます。
> 無用なエラーをなくすためにも","cで記述いたします。

それとこれとは別問題ですよ。
","c にしたからといって、空行の判定が行えるわけではありませんし。

[ツリー表示へ]
タイトルRe^8: テキストを複数のtextboxに配置
記事No7946
投稿日: 2008/08/12(Tue) 19:05
投稿者イチノセ
> > 無用なエラーをなくすためにも","cで記述いたします。
現時点では","でも特にエラーはなかったのですが、
魔界の仮面弁士さんの仰るようにテキストの最終行に
改行があるのか、ないのか
あったとするとカンマがないので何かしらの不具合が出てくるのでは
ということですよね?


言葉足らずで、すみません^^;

[ツリー表示へ]