取得したデータをスプレッドに表示する(貼り付ける)には?

解決


  2006-06-21 21:22:13  No: 131959

いつもお世話になります。良と申します。
Web上のDBにうまく接続してデータを取ってきたんですが
そのデータをスプレッドに表示するのに3行3列のデータを表示するのに
力技でやったんですがこれが取得したデータが尽きるまで項目別に
表示したい場合はどうしたらよろしいでしょうか?
Mid関数の中身とセットテキストをうまく変えればできるんでしょうか?

これまでのソース(少し長いですが)を表示します。

 'ボタンを押下時のイベント
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ’変数の宣言        
        Dim strText As String
        Dim strURL As String
        Dim strData As String
        Dim lngCnt As Long
        Dim shtCnt As Object

        '青森の取得するSQLのリクエストを設定
        strText = "SELECT AREA_NAME, AREA_ID,KEN FROM ATD_AREA WHERE KEN = '青森'"

        strURL = "ここにはWebDB上のアドレスを記載"

        'Web上のデータベースに接続するクラスを宣言
        Dim webClient As New System.Net.WebClient

        'クエリ文字列用のコレクションを作成
        Dim qc As New System.Collections.Specialized.NameValueCollection

        'コレクションに追加する
        qc.Add("sql", strText)

        'コードを変換する
        qc.Add("code", "UTF-8")

        'クエリ文字列を設定する
        webClient.QueryString = qc

        'HTTPサーバーへ接続する
        Dim sr As System.IO.Stream = _
            webClient.OpenRead(strURL)

       

        'StreamReaderを使って接続する。
        Dim srRead As New System.IO.StreamReader(sr)
        'cntの宣言
        Dim cnt As Short
        '文字列の宣言
        Dim strMoji1 As String
        Dim strMoji2 As String
        Dim strMoji3 As String

        Do
            lngCnt += 1
            ’ループカウンター
            For shtCnt = 1 To 3
                'データを読み込む。一回目のループstrData="八戸,01000,青森"、二回目のループstrData="青森,01100,青森"、三回目のループstrData
="弘前,01200,青森"
                strData = srRead.ReadLine

                If Len(strData) > 0 Then
                    If InStr(strData, ",") > 0 Then

                        'Cntの中には","が何文字目に入っているかの文字数の値を格納。
                        cnt = InStr(strData, ",")

                        'strMoji1には左側のcnt-1文字目までの文字が入る。1回目strMoji1="八戸"2回目"青森"3回目"青森"
                        strMoji1 = Mid(strData, 1, cnt - 1)

                        '1回目strMoji2="01000"2回目"01100"3回目"01200"
                        strMoji2 = Mid(strData, cnt + 1, (cnt * 2) - 1)

                        '1回目strMoji3="青森"2回目"青森"3回目"青森"
                        strMoji3 = Mid(strData, (cnt * 2) + 4, (cnt * 3) - 1)
                        

                    End If

                    '一覧にセットする
                    Me.AxvaSpread2.SetText(lngCnt, shtCnt, strMoji1)
                    Me.AxvaSpread2.SetText(lngCnt + 1, shtCnt, strMoji2)
                    Me.AxvaSpread2.SetText(lngCnt + 2, shtCnt, strMoji3)

                End If
            Next
        Loop Until strData = ""

          
        srRead.Close()
できれば知恵のほう貸していただきたく思います。よろしくお願いいたします。


特攻隊長まるるう  2006-06-22 20:41:37  No: 131960

えーと。開発環境は[VB.NET2005]でしたっけ?[VB.NET2003]でしたっけ?
[ASP.NET]でしたっけ?

基本的にそのオブジェクトに必要そうな機能は実装されている場合が
多いので、まずはヘルプを見てください。『メンバ』の一覧のページがあります。
説明も一覧になってます。全てチェックしても3分掛からないでしょう?
[StreamReader メンバ]
http://msdn2.microsoft.com/ja-jp/library/system.io.streamreader_members.aspx

>取得したデータが尽きるまで
EndOfStream で末尾かどうかチェックすれば良いのでは?

Mid や InStr は[VB6.0]時代の関数なので、[VB.NET]を意識するなら Substring や
IndexOf を使ってみるのも良いかも。
[String メンバ]
http://msdn2.microsoft.com/ja-jp/library/system.string_members.aspx
 # カンマ区切りなら Split を利用するというのもあるよ。

>Mid関数の中身とセットテキストをうまく変えればできるんでしょうか?
そうですね。ループでまわせば良いんじゃないでしょうか。


  2006-06-22 22:00:48  No: 131961

こんにちは良です。

>特攻隊長まるるうさん

早速お返事のほうありがとうございます!
すみません。動作環境はVB.NET2003です。
とりあえずヘルプに目を通してみます。

ほかにもいろいろアプローチしてみます。


特攻隊長まるるう  2006-06-23 00:48:56  No: 131962

カンマ区切りでそれなりに動くっぽいサンプル。
[VB.NET2003]
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim strData As String = ",,八戸,01000,青森,"
        Call Test(strData)

        strData = ""
        Call Test(strData)

        strData = ","
        Call Test(strData)

        strData = "あ"
        Call Test(strData)
    End Sub

    Private Sub Test(ByVal ReadLineText As String)
        Call sample1(ReadLineText)
        Call sample2(ReadLineText)
        Call sample3(ReadLineText)
        Debug.WriteLine("")
    End Sub

    Private Sub sample1(ByVal ReadLineText As String)
        Dim intStart, col, i As Integer
        With ReadLineText
            If .Length > 0 Then
                intStart = 0
                col = 0
                Do
                    i = .IndexOf(",", intStart)
                    If i = -1 Then
                        Debug.WriteLine(col.ToString("sample1_00:") & .Substring(intStart))
                        Exit Do
                    Else
                        Debug.WriteLine(col.ToString("sample1_00:") & .Substring(intStart, i - intStart))
                        intStart = i + 1
                        col = col + 1
                    End If
                Loop
            End If
        End With
    End Sub

    Private Sub sample2(ByVal ReadLineText As String)
        Dim strArray() As String
        Dim i As Integer
        With ReadLineText
            If .Length = 0 Then Exit Sub
            strArray = .Split(","c)
        End With
        For i = 0 To strArray.GetLength(0) - 1
            Debug.WriteLine(i.ToString("sample2_00:") & strArray(i))
        Next
    End Sub

    Private Sub sample3(ByVal ReadLineText As String)
        Dim intStart, col, i As Integer
        If Len(ReadLineText) > 0 Then
            intStart = 1
            col = 0
            Do
                i = InStr(intStart, ReadLineText, ",")
                If i = 0 Then
                    Debug.WriteLine(col.ToString("sample3_00:") & Mid$(ReadLineText, intStart))
                    Exit Do
                Else
                    Debug.WriteLine(col.ToString("sample3_00:") & Mid$(ReadLineText, intStart, i - intStart))
                    intStart = i + 1
                    col = col + 1
                End If
            Loop
        End If
    End Sub


  2006-06-23 01:29:39  No: 131963

こんにちは。良です。

<特攻隊長まるるうさん

サンプルありがとうございます!
早速質問なんですがサンプル1〜3というのは全部同じ
処理をしているんですか?

あとこのサンプルを視覚的に検証したい場合は
デザインにどんなツールを追加すれば見れますか?
わからない単語はヘルプを見ますのでそれだけ教えていただけませんか?


特攻隊長まるるう  2006-06-23 02:36:36  No: 131964

>早速質問なんですがサンプル1〜3というのは全部同じ
>処理をしているんですか?
『同じ処理』の定義は?
コードが違うんだから違う処理なのでは?

結果として、似たような出力が得られると思いますが、
サンプルなんてものは、その場で考えているので、
100%の動作保証をするものではありません。
必要な解析・検証は個人でやってください。

>あとこのサンプルを視覚的に検証したい場合は
視覚的???Debug.WriteLine の結果は『出力ウィンドウ』
に出力されていると思います。
http://support.microsoft.com/default.aspx?scid=kb;ja;313417
デバッグ作業は普通、『ブレークポイント』を設定して
『ステップ実行』しますが。。。『デバッグ』したことないですか?
http://msdn.microsoft.com/library/ja/vsdebug/html/_asug_How_Do_I_Topics3a_Debugging.asp


  2006-06-23 02:45:28  No: 131965

こんにちは良です。
ブレークポイントを作成してステップ実行して
見ていますが出力ウィンドウは見ていなかったです。
いつもテキストボックスかコンボボックスに
出力するようにしていましたので。

ありがとうございます。もう一度ステップ実行して
出力ウィンドウを見てみます。


  2006-06-23 02:47:16  No: 131966

お名前を忘れてしまいました。

>特攻隊長まるるうさん

いつもありがとうございます!

もっと自分で検証の仕方を勉強していきたいと思います。


  2006-06-23 02:51:58  No: 131967

こんにちは。良です。

出力ウィンドウでしっかり結果を見ることができました!
これをもっと自分で検証していきたいと思います。
ありがとうございましたm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加