• 締切済み

CSVファイルを読み込む

.net VB 2010 初心者です。VB 6.0は、少々分かります。 よろしくお願い致します。 .net VB 2010を使用して、CSVファイルを読み込みたいのです。 列は固定、行は可変です。 配列で、buf(行,列)のように読み込みたいのです。 これだと、10行、3列目と実際とイメージが合致するからです。 これは、どのように実現可能か教えてください。 buf(10,3)ではなく、もっと良い方法があるのであれば、そちらをよろしくお願い致します。 列は、1列目:No.、2列目:フルネーム、3列目:略語、4列目:更新日 となっています。 なので、1行目のフルネームの取り出し、2行目の略語の取り出しでもOKです。 どうぞよろしくお願い致します。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

CSVファイルをシーケンシャルファイルで読んで、カンマで分解。 VB6も2010でも動くはず dim strBuffer as string Dim nFile as integer Dim strArray() as string Dim nArray as long nFile = freefile() open "C:¥hogehoge.csv" for input as #nfile While not(eof(nfile)) Line Input #nFile, strBuffer Strarray=split(strbuffer,",") narray=ubound(strArray()) if nArray> 3 Then debug.print strarray(0), strarray(2)) ’ここでデータを利用 end if wend Close タブレット手書き入力なので文字の大小不統一はお許し下さい

MassyPie
質問者

補足

ありがとうございます。 下記で動きましたが・・・ strArrayには、カレント行が1行読み込まれます。 私のイメージとしては、strArrayは二次元配列でstrArray(行,列)としたいのです。 行は可変、列は3(0~3) または、strArray(2).フルネーム (3行目のフルネーム) でデータを取り出したいと考えています。 CSVファイルは、小さなサイズなので全体を読み込んでプログラム中に持っていたいのです。 何か良い方法がありましたら、ご教授の程よろしくお願い致します。 Sub Main() Dim strBuffer As String = "" Dim nFile As Integer = 0 Dim strArray() As String = Nothing Dim nArray As Long = 0 nFile = FreeFile() FileOpen(nFile, "C:\test\ItemConf.csv", OpenMode.Input) While Not (EOF(nFile)) strBuffer = LineInput(nFile) strArray = Split(strBuffer, ",") nArray = UBound(strArray) If nArray > 3 Then Debug.Print(strArray(0), strArray(2)) End If End While FileClose() End Sub

回答No.1

C#でCSVファイルを取り込む処理を扱ったことがあります。 そのときは、この処理のためにCSVクラスを自作しました。 String型の2次元配列をフィールドとして、ファイル名を受け取るコンストラクターで、TextFieldParserを使ってデータを配列に読み込みました。 配列へのアクセスにはインデクサを使いました。 VBでも同様のことができるでしょう。

MassyPie
質問者

お礼

ありがとうございます。 コンストラクター? インデクサ? という、感じですが、1つ1つ調べていきます。

関連するQ&A

  • VB2010でCSVファイルを読み、配列に入れる

    ExcelVBAで、フォルダを選択しCSVファイルを表示⇒クリックで対象ファイルを選び配列に入れる次のプログラムを作りました。その後でデータを加工しグラフィック化してるのですが、VBAのグラフィック機能が遅いのでVB2010に変えようと思いいろいろやってみたのですが、どうもうまくいきません。 どなたか、VB2010ではどのようなプログラムになるのか、教えていただけないでしょうか。 'Excel VBA---------------------------------------- Sub CSVデータ() Dim xd(1000),yd(1000) 'フォルダを選ぶ ChDir ThisWorkbook.Path 'CSVファイルの一覧 pname = _ Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv" _ , FilterIndex:=1,Title:="開く",MultiSelect:=False) '対象ファイルをクリックで選ぶ If pname <> False Then Workbooks.Open Filename:=pname End If fname = ActiveWorkbook.Name 'CsVファイルのセルから配列へ移す nstart = 6 nend = nstart +500 k = 0 For i = nstart To nend '6行目から500行の2列、3列を読み配列に入れる k = k + 1 xd(k) = Cells(i, 2) yd(k) = Cells(i, 3) Next i End Sub

  • C#でcsvファイルの列を入れ替えたい

    C#初心者です。 以下のように、カンマ区切りのcsvファイルの特定の列を入れ替えて保存するアプリを作ろうとしています。 ■変更前 りんご,赤,1, みかん,オレンジ,2 メロン,黄緑,3 ■変更後 1,赤,りんご, 2,オレンジ,みかん, 3,黄緑,メロン, 以下のような概略フローを考えてみたのですが、 (3)の処理を実行する場合、どのような実装すれば良いか分かりません。 ■概略フロー (1)1行ずつTextFieldParserで、string配列に読み込む (2)任意の列の値を左から順番を指定して並べ替える  No.3の列を左から1列目に指定⇒No.3の列を左から3列目に指定 (3)並べ替えた配列をカンマ区切りで再結合する どなたかご教示いただけると助かります。

  • csvファイルの読込みとソート

    いつも大変参考にさせていただいております。 csvファイルの読み込みとソートをしたく、ネットや過去ログ等を相当調べたのですが、完全に詰まってしまいました。 (検索キーワード:「php csv ソート」「php 二次元配列 ソート」など) とても困っています。どなたかよろしくお願いします。 以下のようなcsvファイルを読み込みソートしたいのです。 ■csvファイル 20110803, A, りんご 20111215, B, みかん 20110306, A, みかん 20110620, A, りんご 20110215, B, りんご ■個別にやりたい処理 (1)、左列の日付で昇順ソートしてすべて表示 (2)、「A」を含む行をすべて表示(日付順) (3)、「A」+「りんご」を含む行をすべて表示(日付順) □補足 csvをfgetcsvで読み込み、テーブルに入れて表示するところまではできました。 csvの行は増えていきます(max100行位)。列は固定。

    • ベストアンサー
    • PHP
  • 読み込んだCSVファイルの再検索

    VBを用いてかなり大きいCSVファイルから、 ある条件に合うデータを検索するプログラムを作成しています。 日付などの条件をFORMに配置し、絞れるようにしております。 VB読み込み→検索にだいたい2分くらいかかるのですが、 条件を変更して再検索するときに、再度VB読み込みが必要になります。 一度メモリーに読み込んだ値から再検索かけられれば、 2回目以降の検索が早くなると思うのですが、 そのようなことは可能でしょうか。 要はこのようなことを実現したいです。 1.Button1.Click 2.CSVファイル読み込み 3.条件に合うものを検索(終了しない。配列の値を破棄しない) 4.再度Button1.Click 5.(CSVファイルの読み込みは飛ばして)条件に合うものを検索 WindowsXPでVB.NETを使用しております。 ご教授願います。

  • CSVファイル読込みについて

    CSVファイル読込みで困っています。 どなたかご教授をお願い致します。 CSVファイル読込みを行うと、複数行のデータにも関わらず、ネットで調べたプログラムを用いると、1行で読込まれてしまいました。 その原因として、NL(LF)で改行されていたためです。 これをどうにか複数行で読込みを行うための方法はありませんか? NLがある場合、それをvbCrLfに変換してやればよいとは思ったのですが、うまくプログラムを組むことができません。 プログラムをどう組めばよいのか教えて頂けないでしょうか? 以下のサイトを利用させて頂き、読込みを行おうとしました。 http://www.k1simplify.com/vba/tipsleaf/leaf291.html VB初心者なので、どなたかご教授頂けると助かります。 よろしくお願い致します。

  • VBAよりCSVファイルの任意の行を取得

    お世話になります。 Access2010 VBAよりCSVファイルの2行目の文字列を取得したいのですが、とりあえず下記で取得することができました。 path = CurrentProject.path cnt = 1 Open path & "\test.csv" For Input As #1 Do Until cnt > 2   Line Input #1, buf   If cnt = 2 Then     MsgBox buf   End If   cnt = cnt + 1 Loop Close #1 例えば、 1行目 xxxxx 2行目 フィールド1,フィールド2,フィールド3,・・・ 3行目 データ1,データ2,データ3・・・ という内容のCSVがあり、上記のVBAを実行すると、2行目の『フィールド1,フィールド2,フィールド3,・・・』を表示できます。 で、実際のCSVファイルは数十万行あるのですが、そのファイルを指定し上記VBAを実行すると、Line Input #1, bufの箇所で「実行時エラー14 文字列領域が不足しています。」と表示されてしまいます。 何かよい方法はございますでしょうか。 なお、当該Accessはユーザーへ配布するものであり、Runtime環境で実行します。 よって、CreateObjectは使えない状況です。 勉強不足で申し訳ございませんが、ご教授の程よろしくお願い致します。

  • 複数CSVファイルからデータ抽出

    CSVファイルのA列(行は問いません)の文字が転記シートのA列(行は問いません)と一致していたら、転記シートのA列が一致した行の空白に、左から順にCSVファイルのA列が一致した行のF列の値を書き込む。CSVファイルの1行A列を転記シートのF列の値を書き込んだ列の1行目に書き込む。 できれば、書き込んだ値はCSVファイルから消したいです。 コピペでやっていたのですが、ずれていてどうしようもなくなりました。 CSVファイル一つ当たり、4000行ほどあり、ファイルは200弱あります。 プログラムを組んでくださると、ありがたいのですが。 質問というよりお願いになってしまいますが、よろしくお願いします。

  • csvファイルのデータ変換について

    OS:windows2000pro VB:VB6.0sp5 c:\data.csv(カンマ区切) のデータ(全6列)で 1列目,2列目,3列目,4列目,5列目,6列目 [変換前(全6列)] abc,a1,aあ b2,3c,4d5e (1行目) ccc,c3,aあ い,3c,4d5e (2行目) bbc,b2,あ b2a,c3,d5e4 (3行目) [変換後(全6列)] abc,a1,"aあ b2",3c,"4d5e" (1行目) ccc,c3,"aあ い",3c,"4d5e" (2行目) bbc,b2,"あ b2a",c3,"d5e4" (3行目) 上記の様に 3列,6列目を「"・・・"」ダブルコーテイションで 囲い(変換し)、c:\data_after.csvというファイル名で 保存する為のプログラムをご教示ください よろしくお願いいたします

  • 定形のCSVファイル(多数)のデータを1つのファイルにまとめたい。

    定形のCSVファイル(多数)のデータを1つのファイルにまとめたい。 列の項目は定形で、100~200行のデータが書かれたCSVファイルが多数あります。 今はNO.1のファイルのデータの続きに、NO.2でコピーしたものを貼り付け、又、NO.3でコピーしたものを貼り付け、いわゆるコピーアンドペーストでやっています。 でも、コピー範囲を間違えないように進めるとなると、時間がかかります。 もっとかんたんな方法があったら教えてください。 よろしくお願いします。

  • csvファイルのデータの一部を取り出したい

    こんばんは。 VBでcsv形式のファイルの一部を取り出したいのですが、 例えば、下の3 行、3 列のデータが CSV 形式で保存されているファイルで First Name,Last Name,HireDate Nancy,Davolio,10-22-91 Robert,King,10-23-91 その中の"Nancy"だけを取り出して、テキストボックスに入れたいのですが 一部だけ取り出すことってできるのでしょうか? 教えて下さい。 よろしくお願いします。

専門家に質問してみよう