• ベストアンサー

CSVの一行目をコンボボックスに表示させたい

毎回質問ばかりですみません。 CSVの一行目の","を起点にして分割をして そのあと分割したものをコンボボックスの一覧に入れたいのですが なかなかうまくできません。 Dim delimiter As String = "," dim txtf2 As New IO.StreamReader(ファイル保存場所,System.Text.Encoding.Default) IDset = txtf2.ReadLine Dim a As String() = IDset.Split(delimiter) とここまではできるのですが それをコンボボックスに追加する方法がわかりません。 IDsetが不特定な数を想定してるので for nextなどでとは考えているんですがうまくプログラミングができません。 指導いただけるとうれしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

例えば、  Dim st As String = "みかん,りんご,すいか,かき,きりん"  Dim a() As String = st.Split(",")  ComboBox1.Items.AddRange(a) こんな感じの事とは違いますか?

coin_1983
質問者

お礼

とても遅くなり(とてもどころじゃないですよね・・・) もうしわけございませんでした。 とても参考になりました。 行いたいことにぴったりはまりました。 ありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

VBは詳しくありませんが、 LBound(a)とかUBound(a)は使えないのでしょうか? 配列を確認するならIsArray(a)とか。

coin_1983
質問者

お礼

参考にさせていただきました。 ありがとうございました。

関連するQ&A

  • CSVの読み込みについて

    いつもお世話になります。 TextBox1に品物のコードを入れて、Label1に価格を表示するという簡単そうなものです。 品物のコードはCSVファイルのItem(1)から取得します。ところが存在しないコードを入力すると、 追加情報 : インデックスが配列の境界外です というエラーが出ます。下記ソースに何を追加すればよろしいのでしょうか?ご教授下さい。よろしくお願い致します。 Dim Reader As New IO.StreamReader("C:\XXX.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items() As String Dim Line As String = Reader.ReadLine       Dim Code As String 'コード Dim kakaku As String '価格 Do Until IsNothing(Line) Items = Line.Split(",") Code = Items(1) If HinCode = TextBox1.Text Then kakaku = Items(2) Label1.Text = kakaku Exit Sub End If Line = Reader.ReadLine Loop Reader.Close()

  • C# ジェネリックメソッドでCSVの読み込み

    以下のメソッドをジェネリックメソッドにしたいのですが、 Double.Parseメソッドの部分をどう変更したらいいのかわかりません。 どなたか方法を教えてください! //CSVデータをdouble配列に格納する public static void readCSV(double[] a, string filePath) { int i = 0; char delimiter = ','; //区切り文字はカンマ string line = ""; using (StreamReader r = new StreamReader(filePath)) { while ((line = r.ReadLine()) != null) // 1行ずつ読み出し。 { //分割した結果を文字列の配列で受け取る string[] splittedResult = line.Split(delimiter); a[i] = (Double.Parse(splittedResult[0])); i++; } } } //ジェネリックバージョン public static void readCSV<Type>(Type[] a, string filePath) { int i = 0; char delimiter = ','; //区切り文字はカンマ string line = ""; using (StreamReader r = new StreamReader(filePath)) { while ((line = r.ReadLine()) != null) // 1行ずつ読み出し。 { //分割した結果を文字列の配列で受け取る string[] splittedResult = line.Split(delimiter); //Double.ParseをTypeを用いてどう記述していいかわからない a[i] = (Double.Parse(splittedResult[0])); i++; } } }

  • VB2008 コンボボックスとテキストボックスの連動について

    VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。 項目1-1,項目1-2,項目1-3,項目1-4,項目1-5 項目2-1,項目2-2,項目2-3,項目2-4,項目2-5 項目3-1,項目3-2,項目3-3,項目3-4,項目3-5 上記のデータ名 TextFile1.txt Dim fn As String = "C:\TextFile1.txt" Dim dline() As String Dim d() As String Dim ad As ArrayList = New ArrayList() Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default) dline = Split(read.ReadToEnd, vbCrLf) For i As Integer = LBound(dline) To UBound(dline) d = Split(dline(i), ",") ad.Add(d(0)) Next ComboBox1.DataSource = ad ComboBox1.text="顧客名" 以上が現在の状況です。 comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。 もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。

  • csvを新ファイルに8番目で大きい順に並び替え

    VB2010です。 前回、質問させて頂いた続きです。 前回は質問の仕方が失敗で大変皆様にご迷惑をおかけしました・・・・・ 本当に申し訳なく思っています・・・ もうだんだん迷路に入ってしまったので、コードをそのまま記載しました。 Itm(7)を基準に数字の大きい順に並び替えしたいのです。 CSVは全部で19列あります。 ファイルによって違いますが、行数はだいたい100行ぐらいです 無理やりしたのコードを書いたのですが、あと一歩でやはりきれいに並び替えができません・・・ 大変皆様にお手数ですがお助け下さい・・・・ プロの皆様にはかなり幼稚なコードで大変失礼します。 いろいろと試してみたのですが、これぐらいしか自分の力量では思いつかなくて・・・・ 沢山失敗を繰り返したので変なコードも入っているかもですが・・・・・ Dim z As Integer = 0 Dim ReaderA As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & ".csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineA As String = ReaderA.ReadLine Dim Itm() As String Dim s As Integer = 0 Do Until IsNothing(LineA) Itm = LineA.Split(",") If z = 0 Then Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Writer.WriteLine(LineA) Writer.Close() Else Dim ReaderB As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineB As String = ReaderB.ReadLine Dim Stm() As String Dim u As Integer = 0 Do Until IsNothing(LineB) Stm = LineB.Split(",") If Integer.Parse(Itm(7)) > Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If Writer.WriteLine(LineB) If Integer.Parse(Itm(7)) <= Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If s += 1 LineB = ReaderB.ReadLine Loop Writer.Close() ReaderB.Close() IO.File.Delete(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") Microsoft.VisualBasic.FileSystem.Rename(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") End If z += 1 LineA = ReaderA.ReadLine Loop ReaderA.Close()

  • 【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。   すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream  (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr =   gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default);  while(sr->Peek() >= 0){ //csvデータ分繰り返し   strLine = sr->ReadLine(); //1行読み込み   strData = strLine->Split(delimiter); //「,」で区切って、配列に分解   if (iWorkNum == int::Parse(strData[0])){    strData[2] = strWorkTime;//書き換えたい箇所はここだけ    //※ここからの処理方法を教えて下さい。   }  } } sr->Close(); fs->Close();  

  • c#で(",")区切りのcsvファイルから読み込みを行うには?

    駆け出しの初心者です。 以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。 今回c#で読み込みたいcsvファイルは以下のようになっております "abc","123","あいうえお" ただのカンマ区切りであれば読み込みは簡単ですが、 上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか? ちなみに現在単純にカンマ区切りのcsvファイルを読み込むコードを 書いた所ですので、載せておきます これをいじってスムーズにいければうれしいのですが、いかがでしょうか? private void LoadData() { string path = "Data.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray(); string[] strData;//分解後の文字用変数 string strLine;//1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = strLine.Split(delimiter); DataSet.DataTable.AddDataTableRow( DateTime.Parse(strData[0]), strData[1],    strData[2], int.Parse(strData[3]), strData[4]); } sr.Close(); } } いつも丁寧な回答で協力してくれる皆様には心から感謝しております。 どうぞよろしくお願いします。

  • csvの読み込みがうまく行かない

    こんにちは。質問させていただきます。 (Visual Basic 2010 エクスプレス) 下記のように書いたのですが、ファイルの内容どおりに読み込んでくれません。 ファイルの中身は さささ,0,ししししししし すすす,0,せせせせせせ そそそ,0,たたたたた となっているのですが、最初の一行を読み込み、しかも最初の一行を繰り返し2段目3段目の テキストボックスに表示させてしまいます。 具体的には さささ ししししししし さささ ししししししし さささ ししししししし です。 本来は さささ ししししししし すすす せせせせせせ そそそ たたたたた と表示させたいのです。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Using reader As New System.IO.StreamReader("C:\csvtest\test.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items() As String 'CSVの各項目を表す配列 Dim Line As String = reader.ReadLine 'CSVの一行 Do Until IsNothing(Line) Items = Line.Split(",") '一行を, (カンマ)で区切って項目ごとに分解 With reader TextBox1.Text = Items(0) CheckBox1.CheckState = Items(1) TextBox2.Text = Items(2) Line = reader.ReadLine '次の行を読み込む。 TextBox3.Text = Items(0) CheckBox1.CheckState = Items(1) TextBox4.Text = Items(2) Line = reader.ReadLine '次の行を読み込む。 TextBox5.Text = Items(0) CheckBox1.CheckState = Items(1) TextBox6.Text = Items(2) Line = reader.ReadLine '次の行を読み込む。 .Close() End With Loop End Using End Sub 問題点がわかる方、よろしくおねがいします!

  • c#でcsvから指定の1行だけを読み込む方法

    以前c言語で同じような質問をして、とても有益な回答を頂きましたが、 今回c#でのコードの書き方をご教示いただければと思い、再度質問致します。 例えば以下のようなcsvファイルがあったとします。 ab1,ef2,ab3,af4,ab5 bb1,bf2,bb3,bf4 cb1,cf2,cb3,cf4,cb5 zb1,zf2,zb3,zf4,zb5 プログラムに"cb3"という文字列を探させて、その文字列を含む一行 "cb1,cf2,cb3,cf4,cb5"のみを読み込む方法を探しております。 現時点では以下のコードにてcsvファイルを丸々読み込んでおります。 private void LoadData()//csvファイルを読み込む { string path = "abc.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray();//区切り文字をまとめる string[] strData;//分解後の変数 string strLine; //1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default ); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = CsvToArrayList1(strLine)[0]; abc.abctable.AddabctableRow ( strData[0], int.Parse(strData[1]) ); } sr.Close(); } c言語の時はstrstrで特定の文字を含む1行のみを取得できたのですが、 c#ではもっと良い方法があるのではと考えております、 お時間がありましたら是非教えてください。 皆様の丁寧な回答にいつも感謝しております。

  • VBを2008を用いてCSVを取り込む ””で区切られていない数値混入

    VBを2008を用いてCSVを取り込む ””で区切られていない数値混入 文字列に,が含まれている場合がある。 題名どおりなのですが、以下のようなCSVファイルをVB2008で取り込もうと考えています。 "AAAAA",BBBBB,CCCCC,"DDDD,DDD","EEEEE","FFFFF" (同じアルファベットが本来同じ項目のデータ、BとCは0-9の数字のみ入ります またBCには常に””が含まれません。 Dは文字列なのですが、まれに「,」が含まれます) 下のものが現在使用しているソースですがsplitで「,」を指定しているので 当然Dが2つのデータとして認識されています。 BやCが””で囲まれていれば「”,”」で区切ればすむのですが一部が””なしなので どうやろうか迷っています。 実現したいこととしては ""なしの時は必ず、コンマまでが1つのデータ、 ""があれば""で区切られたデータが1つのデータとできればいいんですが。。。 以下ソースです。 ちなみにASPXファイルです。 (replaceDoubleQuotesというのは”を削除するための関数で無視していただいて結構です。 また以下のソースでは取り込み自体はせずにタイトル行がはいっているCSVファイルを弾く作業をしているのですが CSVからデータを取り出す作業は同じなので短いソースを使用させてもらっています) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim Reader2 As New IO.StreamReader("C:\UploadedFiles\Uriage.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items2() As String 'CSVの各項目を表す配列 Dim Line2 As String = Reader2.ReadLine 'CSVの一行 Items2 = Line2.Split(",") Dim num_hantei As String = "^[0-9]+$" If Not (Regex.IsMatch(replaceDoubleQuotes(Items2(3)), num_hantei)) Then Dim objFSO As Object objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile("C:\UploadedFiles\Uriage.txt", True) objFSO = Nothing Label1.Text = "取り込みエラー。タイトル行がはいっている可能性があります。" Exit Sub End If Reader2.Close() End Sub Function replaceDoubleQuotes(ByVal apdata As Object) As String '文字列に変換する Dim tmp As String = String.Format("{0}", apdata) '1つのダブルクォーテーションを0個に置換する つまり消去する replaceDoubleQuotes = tmp.Replace("""", "") End Function

  • comboxのリストをファイルから読み込む方法

    最近始めたばかりなのですが、よろしくお願い致します。 フォーム1にコンボボックス1があります。 フォーム1をロードした際に、コンボボックス1にTextFile1.txtのリストを表示したいのですが、上手くいきません。 TextFile1.txtは、名前,住所,電話番号,,,,というように区切られていて、コンボボックスには名前だけを表示させたいと思います。 使用しているソフトは、VisualBasic2008ExpressEditionで、WinXPを使っています。 一応下記が現状のコードです。自分ではヘルプ・入門書などを見て書いてみましたが、行き詰ってしまいました。よろしくお願い致します。 Imports System.IO -------------------------------- Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Reader As New IO.StreamReader("C:\Documents and Settings\ob\デスクトップ\WindowsApplication3\WindowsApplication3\TextFile1.txt") Dim items() As String   Dim line As String = Reader.ReadLine ComboBox1.Text = "名前一覧" '初期表示 ComboBox1.Items.Add(Reader.ReadLine()) End Sub End Class

専門家に質問してみよう