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

CSVファイルからのデータテーブルの作成およびデータ呼び出しに関して

環境/言語:[VB2005&SQL2005]
分類:[.NET]

VB2005を始めたばかりのプログラム初心者なんですが、

"1301""極洋""1000""東証"""
"1305""ダイワ上場投信−トピックス""100""東証"""
"1306""TOPIX連動型上場投資信託""100""東証"""
"1308""上場インデックスファンドTOPIX""1000""東証"""
"1310""ダイワ上場投信−トピックス・コア30""100""東証"""
"1311""TOPIX Core 30 連動型上場投資信託""100""東証"""
"1320""ダイワ上場投信−日経225""10""大証"""
"1321""日経225連動型上場投資信託""10""大証"""
"1329""iシェアーズ日経225""10""東証"""
"1330""上場インデックスファンド225""10""東証"""
"1331""ニチロ""1000""東証"""
"1332""日本水産""100""東証"""
"1334""マルハグループ本社""1000""東証"""
以降、延々と続く

このような、CSVファイルから、テキストボックスに例えば
1331と入力したら

ラベル1に、ニチロ
テキストボックス2に、1000
ラベル2に、東証

と、自動的に呼び出したいのですが、どのようにすればよいのでしょうか?

自分の考えでは、CSVから、SQL ServerへDataTable作成後
データベースからの呼び出し
といった方法で考えているのですが、どういうコード書けばよいのか、メソッドを使ったらよいのか?皆目解決策が見つかりません。

ご教授宜しくお願いします
2006/05/02(Tue) 08:21:58 編集(投稿者)

■No15566に返信(健太さんの記事)
> このような、CSVファイルから、

? 区切り文字がないように見えますが...

> 自動的に呼び出したいのですが、どのようにすればよいのでしょうか?

現状 CSV は CSV なのですから、StreamReader で検索しても良いんじゃないでしょうか。
最初にコレクションに格納しておけば、DataTable に頼る必要もないでしょう。

.............................................................................................................................
じゃんぬ @ わんくま同盟, Microsoft MVP for Visual Developer - C#
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
アドバイスありがとうございます

■No15584に返信(じゃんぬねっとさんの記事)
> ■No15566に返信(健太さんの記事)
>>このような、CSVファイルから、
>
> ? 区切り文字がないように見えますが...

元ファイルは、テキストファイルで、タブで区切られていたのをエクセルにてCSV化しました。
この必要はなかったですかね?

>
>>自動的に呼び出したいのですが、どのようにすればよいのでしょうか?
>
> 現状 CSV は CSV なのですから、StreamReader で検索しても良いんじゃないでしょうか。
> 最初にコレクションに格納しておけば、DataTable に頼り必要もないでしょう。

StreamReader で検索できるんですか?
コレクションの方は、現在調べ中です。

ちなみに、現段階でのコードはこんな感じです
一括読込みと、一行ずつの読込みを書いたまま頓挫しています

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'テキストファイルからの呼び出し
'ボタンクッリク

Dim Reader As New IO.StreamReader("d:\meigara.txt", System.Text.Encoding.GetEncoding("Shift-JIS"))
TextBox1.Text = Reader.ReadToEnd

Reader.Close()

End Sub

Private Sub Form1_click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click

'READメッソドは、1文字ずつ
'READLINEメソッドは、1行ずつ
'フォームクリックで呼び出し

Dim Reader As New IO.StreamReader("d:\meigara.txt", System.Text.Encoding.GetEncoding("Shift-JIS"))
Do Until Reader.EndOfStream
ListBox1.Items.Add(Reader.ReadLine)
Loop

Reader.Close()

End Sub

End Class
■No15614に返信(健太さんの記事)
> 元ファイルは、テキストファイルで、タブで区切られていたのをエクセルにてCSV化しました。
> この必要はなかったですかね?

CSV だろうと TSV だろうと区切り文字が変わっただけに過ぎませんから、必要ないと言えばないかもしれませんが、
それにしても、「CSV 化しました」とは何でしょう?
言葉の意味ではなく、カンマ区切りになっていないので ??? 状態です。
(本題とは関係ないので別に良いですが)

> StreamReader で検索できるんですか?

内容を読み込んでいるわけですから、当然できるでしょう。

> ちなみに、現段階でのコードはこんな感じです
> 一括読込みと、一行ずつの読込みを書いたまま頓挫しています

あとは、ReadLine で読み取ったものを区切り文字単位で分割するだけですよね。

いまさらですが、ピッタリなのがありました。

わんくまライブラリ Wankuma.IO.CSVクラス Version1
http://naka.wankuma.com/site/library/dotnet1.1/Wankuma.IO.CSV1d.htm

.............................................................................................................................
じゃんぬ @ わんくま同盟, Microsoft MVP for Visual Developer - C#
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
> 自分の考えでは、CSVから、SQL ServerへDataTable作成後
> データベースからの呼び出し
> といった方法で考えているのですが、どういうコード書けばよいのか、メソッドを使ったらよいのか?皆目解決策が見つかりません。

以下、余計なお世話かもしれませんが、蛇足ということで。

すでに回答があるように、コレクションを使用する方法もあります。しかし、今後、開発しようとしているアプリケーションでどのようなことまでさせたいのかを考えて、どのように実現するかを判断した方が良いと思います。
例えば、この後、株価を表示したくなりませんか? 移動平均を計算したくなりませんか?このような予定があるのであれば、データベースを使った方が楽だと思います。

プログラム初心者ということですので開発にまだ慣れていないと思いますが、データを扱うアプリケーションにおいては、アプリケーションを開発する前にデータ構造をきっちり設計することがかなり重要ですので、じっくり検討してみて下さい。
実はここが一番言いたかったことなのです。

ちなみに「SQL ServerへDataTable作成」の表現ですが、DataTableというと一般的にはクライアントのメモリ内に存在するテーブルのことになります。言い方を変えればADO.NETにおけるテーブルになります。SQLserver上のテーブルであれば、単にテーブルでかまいません。
■No15616に返信(じゃんぬねっとさんの記事)>
サンプルありがとうございます。
サンプルは、C#で書かれてるんですよね?

C# to VB.NET Translatorで
C#→VBに変換しようとしたんですが、エラーになってしまい
また、頓挫中です

#regionは、VB言えば
sub class?
Function?

等にあたるのでしょか?

初歩的な質問ですいません。


>>StreamReader で検索できるんですか?
>
> 内容を読み込んでいるわけですから、当然できるでしょう。
>
>>ちなみに、現段階でのコードはこんな感じです
>>一括読込みと、一行ずつの読込みを書いたまま頓挫しています
>
> あとは、ReadLine で読み取ったものを区切り文字単位で分割するだけですよね。
>
> いまさらですが、ピッタリなのがありました。
>
> わんくまライブラリ Wankuma.IO.CSVクラス Version1
> http://naka.wankuma.com/site/library/dotnet1.1/Wankuma.IO.CSV1d.htm
>
■No15619に返信(trapemiyaさんの記事)
アドバイスありがとうございます

> 例えば、この後、株価を表示したくなりませんか? 移動平均を計算したくなりませんか?このような予定があるのであれば、データベースを使った方が楽だと思います。

株価等の表示もしたいため
上記課題ができたら、データベースの勉強もしたいと思ってます。

> プログラム初心者ということですので開発にまだ慣れていないと思いますが、データを扱うアプリケーションにおいては、アプリケーションを開発する前にデータ構造をきっちり設計することがかなり重要ですので、じっくり検討してみて下さい。
> 実はここが一番言いたかったことなのです。
>
> ちなみに「SQL ServerへDataTable作成」の表現ですが、DataTableというと一般的にはクライアントのメモリ内に存在するテーブルのことになります。言い方を変えればADO.NETにおけるテーブルになります。SQLserver上のテーブルであれば、単にテーブルでかまいません。

ADO.NETは、まだ勉強してないのですが、
ADO.NETは、SQLserverを操作するための手法(クラス?)と考えてよいのでしょうか?

またまた、超初歩的な質問ですいません
どうせ紹介するなら

http://naka.wankuma.com/site/library/dotnet2.0/io/CSVReader1d.htm

こっちの方がいいなぁ(^^;

C#の中身がわからないのであれば、C#でDLLを作成してそこに入れてください。
VBに変換した場合わなになりそうな部分が何箇所かあると思いますし。

ちなみに#regionは
#Region "a"

#End Region
と書き換えればいいんですけどね。
皆さん、ありがとうございます

一応、テキストボックスに銘柄番号を入力すると
各ラベルに、銘柄名、単位、市場を呼び出すことが出来ました

キープレスでイベント発生させているためか、表示されるまで時間がかかります
テキストボックスに4文字入力したら、イベントを発生させるような処理はないのですかね?

力技みたいな、コードですが、以下に載せておきます

Public Class Form1

'キープレスで、イベント発生
'テキストボックスに銘柄番号を入力すると
'ラベル4に、銘柄名
'ラベル5に、銘柄単位
'ラベル6に、市場


Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

Dim Reader As New IO.StreamReader("d:\meigaracsv.csv", System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim Items() As String 'CSVの各項目を表す配列
Dim Line As String = Reader.ReadLine 'CSVの一行
Dim MeigaraCode As String '銘柄番号
Dim MeigaraName As String '銘柄名
Dim MeigaraTanni As String '単位
Dim MeigaraSijou As String '市場

Do Until IsNothing(Line)

Items = Line.Split(",") '一行を, (カンマ)で区切って項目ごとに分解

MeigaraCode = Items(0) '銘柄番号取得

If MeigaraCode = TextBox1.Text Then
MeigaraName = Items(1)
MeigaraTanni = Items(2)
MeigaraSijou = Items(3)

Label4.Text = MeigaraName
Label5.Text = MeigaraTanni
Label6.Text = MeigaraSijou
Exit Sub
End If

Line = Reader.ReadLine '次の行を読み込む。

Loop

Reader.Close()

End Sub

End Class
■No15647に返信(健太さんの記事)
> ADO.NETは、まだ勉強してないのですが、
> ADO.NETは、SQLserverを操作するための手法(クラス?)と考えてよいのでしょうか?

すみません。見落としてました。m(_ _)m
で、ADO.NETですが、SQLserverに限らずデータベースを操作するものと考えて良いでしょう。次はSQLserverにデータを入れてがんばってみて下さい。このアプリ作成を通して、力が付くと思います。
皆様、ありがとうございました

現在、データベース、SQL、グリッド表示で、悪戦苦闘中
お手上げになったときは、またよろしくお願いします

■No15748に返信(trapemiyaさんの記事)
> ■No15647に返信(健太さんの記事)
>>ADO.NETは、まだ勉強してないのですが、
>>ADO.NETは、SQLserverを操作するための手法(クラス?)と考えてよいのでしょうか?
>
> すみません。見落としてました。m(_ _)m
> で、ADO.NETですが、SQLserverに限らずデータベースを操作するものと考えて良いでしょう。次はSQLserverにデータを入れてがんばってみて下さい。このアプリ作成を通して、力が付くと思います。
解決済み!

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