DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストの中身を比較して読み込む方法

環境/言語:[WindwosXP VB.NET]
分類:[.NET]

2006/02/17(Fri) 17:33:08 編集(投稿者)
2006/02/17(Fri) 17:15:11 編集(投稿者)
2006/02/17(Fri) 17:13:07 編集(投稿者)

いつもお世話になっています。

VBを最近勉強し始めた初心者ですが、質問です。

テキストファイルから文字列を読み込み、読み込むときに
先頭の文字と比較します。
先頭にある文字(ここでは#)があれば、その文字だけをComboBoxに表示してきたいのですが教えてもらえないでしょうか。

テキストファイルの中身は

12346
#あいうえお
12345

12345
#かきくけこ
12345

のようになっています。
#の行だけを読み込みComboBoxに表示させたいのです。

どうぞよろしくお願いします。
> #の行だけを読み込みComboBoxに表示させたいのです。

読み込む方法を知っていればすぐおもいつくとおもうが、単純にReadLineメソッドで1行ずつ読み出して先頭が#かどうか比較したのち、追加するだけ。

Dim st As System.IO.StreamReader
st = New System.IO.StreamReader("C:\\a.txt",System.Text.Encoding.Default)
Dim sr As String = "#"

Do Until st.Peek >= 0
If    Then '1行づつ読込み#があれば
ComboBox1.Items.Add(st.ReadLine) 'ComboBoxに追加
End If
Loop

st.Close()

このような感じなんですが、比較の部分がうまくいってないように思われます
ComboBoxに追加する部分はいいと思うのですけど・・・

どのようにすればいいでしょうか?
文字列(String)に対して処理したいのですから、
Stringクラスのヘルプをご覧ください。
今回の件に使用できるメソッドが用意されています。
シークを考えると順序が違いますよね。

    Dim buffer As String = sr.ReadLine()

    If buffer.[ここは秘密] = "#" Then
        Me.ComboBox1.Items.Add(buffer)
    End If

ですね。

________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/

> If buffer.[ここは秘密] = "#" Then
> Me.ComboBox1.Items.Add(buffer)
> End If
>

いろいろ試してはみたのですが
エラーがでたり、読み込みができないようです
.Contains ではないですよね・・・
■No15092に返信(yukiさんの記事)
> いろいろ試してはみたのですが
> エラーがでたり、読み込みができないようです
> .Contains ではないですよね・・・

全メンバを確認すれば、行き着けるとおもいますけど。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemStringMethodsTopic.asp

難しく考えないで「先頭 1 文字が "#"」である場合ですよね。

__________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
> 難しく考えないで「先頭 1 文字が "#"」である場合ですよね。

あるいは、「"#"で始まる行」という考え方もあります

で=A、始まる=B と文節を分け、日本語の助詞は前置詞として考え、
日本語の語順を英語の語順に換えると
B、Aの順になります。B=始まる を英語で言うと・・・。
後は該当しそうな単語をStringクラスのメソッドからチョイス!
StartsWith でしょうか

しかし、「この引数の数を受け付ける 'StartsWith' がないため、オーバーロードの解決に失敗しました。」
とエラーがでるんですよね

勉強不足ですね…
■No15125に返信(yukiさんの記事)
> 勉強不足ですね…

    Dim stBuffer As String = sr.ReadLine()

    If stBuffer.Chars(0) = "#"c Then
        '/ 先頭が '#' である時に行う処理
    End If

________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
こういうのはどうでしょうか? 無駄な処理になるとは思いますが。
わかりやすいように

 1.テキストの文字全てをテキストボックスに貼り付ける
 2.テキストボックスから、"#"の付いている所だけを取り出す。
   (#の付いている場所は、最後に改行されているようなので、改行されている前までを取り出す)

こういう手もありますよ。
まぁ。みなさんが答えを言っちゃってますが・・・。
参考程度に。。。
> Dim stBuffer As String = sr.ReadLine()
>
> If stBuffer.Chars(0) = "#"c Then
> '/ 先頭が '#' である時に行う処理
> End If

stBuffer が長さ0の文字の時でも大丈夫?

とかあるので、String.IndexOf() を使います>じぶん
みなさんありがとうございます。

エラーは消えましたが、まだ読み込みはうまくいかないようです。

Dim sr As System.IO.StreamReader
sr = New System.IO.StreamReader("C:\\\a.txt", System.Text.Encoding.Default)
Dim stBuffer As String = sr.Read()
Do Until sr.Peek >= 0
If stBuffer.Chars(0) = "#"c Then
Me.ComboBox1.Items.Add(stBuffer)
End If
Loop
sr.Close()

こんな感じで大丈夫みたいです。

もうちょっと考えてみますね
■No15133に返信(渋木宏明(ひどり)さんの記事)
> stBuffer が長さ0の文字の時でも大丈夫?

考慮していませんw

> とかあるので、String.IndexOf() を使います>じぶん

一応 Peek はあるものの、Null チェックはすべきなのかなぁw
どうせ Null チェックするなら Peek 要らないって人もいますよね。

___________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
yukiさん

VBがどうなのかはよくわかりませんが
普通にStartWithが妥当だと思いますけど
どう書くととエラーになるのでせぅか?
> どう書くととエラーになるのでせぅか?

この引数の数を受け付ける 'StartsWith' がないため、オーバーロードの解決に失敗しました。

と、でるのですよ
■No15228に返信(yukiさんの記事)
>>どう書くととエラーになるのでせぅか?
>
> この引数の数を受け付ける 'StartsWith' がないため、オーバーロードの解決に失敗しました。
>
> と、でるのですよ

発生したエラーの内容ではなくて、
StartsWithを使ったどんなソースコードを書いたんですか?
と聞かれているのですが・・・。

とりあえず引数の数が間違っているのでしょう、としか言えません。
後、ヘルプでメソッドの説明をもっかい読んでください。
■No15228に返信(yukiさんの記事)
> この引数の数を受け付ける 'StartsWith' がないため、オーバーロードの解決に失敗しました。
>
> と、でるのですよ

こちらもそろそろ丸投げすることにします。
http://jeanne.wankuma.com/tips/string/startswith.html

___________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
みなさまありがとうございました。
これだけヒントをもらったので、あとは自力でがんばってみます。
初心者ですので無知ですいませんでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板