• ベストアンサー

VB6の列数読み込み

VB6にて、CSVファイルの列数を読み込むにはどのようにしたら良いのでしょうか? Line Inputを用いて変数の数をカウントする、といった方法が思い浮かんだのですが、記述方がわかりません。 ご教授、お願いします。

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

  • ベストアンサー
  • HIROs-NET
  • ベストアンサー率78% (15/19)
回答No.1

列数のカウントは、下記のようにしてはどうでしょうか? Dim No As Integer Dim Buff As String No = FreeFile Open "Test.csv" For Input As #No '1行分データを読み込む Line Input #No, Buff Close #No Dim val() As String '読み込んだ1行分のデータをカンマで分割し配列に代入する val = Split(Buff, ",") '配列には列数分のデータが入っているので、要素番号+1 が列数となる Dim colCnt As Integer colCnt = UBound(val) + 1

skirby112
質問者

お礼

カンマの数での分割の方法がわからなかったので、とても参考になりました ご丁寧に、ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

Public Function RowCount(ByVal FileName As String) As Integer On Error GoTo Err_RowCount   Dim N    As Integer   Dim fso   As Object   Dim txs   As Object   Dim strText As String      N = 0   Set fso = CreateObject("Scripting.FIleSystemObject")   Set txs = fso.GetFile(FileName).OpenAsTextStream(1, 0)   Do While txs.AtEndOfLine <> True     strText = txs.ReadLine     N = N - XXXXXXXXXX   Loop Exit_RowCount:   RowCount = N   Exit Function Err_RowCount:   Resume Exit_RowCount End Function まあ、バグ臭いとこを修正。

skirby112
質問者

お礼

ご丁寧に、ありがとうございました! XXXX…の部分を検討し、こちらも参考にさせていただきます

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.2

[イミディエイト] ? RowCount("C:\Temp\Test.csv") 2 Public Function FileSize(ByVal FileName As String) As Long On Error GoTo Err_FileSize   Dim fso   As Object   Dim fil   As Object   Dim lngSize As Long      Set fso = CreateObject("Scripting.FIleSystemObject")   Set fil = fso.GetFile(FileName)   lngSize = fil.Size Exit_FileSize:   FileSize = lngSize   Exit Function Err_FileSize:   lngSize = -1   Resume Exit_FileSize End Function Public Function RowCount(ByVal FileName As String) As Integer   Dim N    As Integer   Dim fso   As Object   Dim txs   As Object   Dim strText As String      N = 0   If FileSize(FileName) > 0 Then     Set fso = CreateObject("Scripting.FIleSystemObject")     Set txs = fso.GetFile(FileName).OpenAsTextStream(1, 0)     Do While txs.AtEndOfLine <> True       strText = txs.ReadLine       N = N - XXXXXXXXXX     Loop   End If   RowCount = N End Function XXXXXX をどうするのか? つまり、空行をカウントするのか否かで多少書き方が違ってきます。 また、ファイルサイズをチェックしないでエラートラップを利用しても同じ結果を得られます。 Public Function RowCountII(ByVal FileName As String) As Integer On Error GoTo Err_RowCount   Dim N    As Integer   Dim fso   As Object   Dim txs   As Object   Dim strText As String      N = 0   Set fso = CreateObject("Scripting.FIleSystemObject")   Set txs = fso.GetFile(FileName).OpenAsTextStream(1, 0)   Do While txs.AtEndOfLine <> True     strText = txs.ReadLine     N = N - XXXXXXXXXX   Loop Exit_RowCount:   RowCountII = N   Exit Function Err_RowCount:   Resume Exit_RowCount End Function XXXXXXXXXX の部分はは、頑張って完成させて下さい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • csvファイルのデータ列数を取得したいのですがうまくいきません。

    csvファイルのデータ列数を取得したいのですがうまくいきません。 VB2010、StreamReaderでファイルを読み込み、 以下のコードで列数を取得してみたのですが、 数値変数の「列数」に7が入ります。 実際は3列しかありません。 SR.ReadLine()で読み込んだデータ右端部にいらないカンマがいくつか並んでいました。 列数 = UBound(Split(SR.ReadLine(), ",")) どう修正したらよいでしょうか。 また、csvファイルのデータ列数を簡単に取得する方法はないでしょうか? 教えてください。 お手数をおかけしますがよろしくお願いします。

  • csvファイルを列数ごとに分割するExcelマクロ

    csvファイルを列数ごとに分割するExcelマクロが書けずに困っています。 これがないため作業が遅くなり困っています。 横に長い(列数が多い)csvファイルを指定した列数ごとに分割して複数のcsvファイルに分けたいのですができません。 行数ごとに分割して複数のcsvファイルに分けるExcelマクロは調べると複数出てくるのですが... 何かいい方法はないでしょうか? 以下がコードです。 https://yu-syan.sakura.ne.jp/?p=87 たぶんLine Input # ステートメントで行数ごとに読込している部分を列数ごとに読込すればできると思うのですがその動作をするステートメントが無いため困っています。 http://officetanaka.net/excel/vba/statement/LineInput.htm 以下がcsvファイルです。 https://drive.google.com/file/d/1W0O4R10ibNVRnzDzeZ9AKSRT9gueS3GZ/view?usp=drive_link #VBA #Excel #マクロ #csv #データ処理

  • VB及びエクセルのVBAにて、

    VB及びエクセルのVBAにて、 300000行のCSVデータを読み込もうと試みました。 ファイルOpenで、Line InputやInputBを使用しましたが、 どちらもあまり処理速度は変わらないようです。 高速で1行ずつCSVデータを読み込む方法をご存じないでしょうか。 ご存知でしたら、関連するサイトを教えていただければ助かります。 お手数をおかけしますが、よろしくお願いします。

  • VB6.0 ファイルの一括読込み

    VB6.0で一行ずつ読み込む方法はわかるのですが、改行文字込で一括して全データを読込む方法はありませんでしょうか。 また、読み込んで変数に格納したStringのデータをLine Inputのように一行ずつ読み込んでいく方法はありませんでしょうか。

  • vbからのCSV出力について

    VB6.0について質問です。 CSV出力でデータ数がエクセルの限界を超えそうなので 統計ソフトのSPSSというソフトを使おうと思うのですが VBからSPSSへの連携はできるのでしゅうか? 現在、データをカンマ区切りで変数に格納し拡張子をCSVにして出力すると 自動的にCSVファイルが作成されますが SPSSでCSV出力させるにはどうやればよいですか? 当方SPSSは触ったことがないのでお知恵をお貸しください++

  • ACCESSで列数を数える方法

    ACCESSで列数を数える方法が知りたいです ファイルで黒い枠内の所の数を(9個)を13の所に合計数(9と) 表示させたいのですがよくわかりません 関数があるのでしょうか? どなたかよろしくお願いします

  • VBでCSVファイルのある行をインポート

    VBでCSVのインポートをしたいのです。 CSVファイルの中身で、最初の5行は読みません。そして、カンマ区切りの行の最初の文字が数字である場合だけを読みたいのです。で最後の3行も読みません。 ですので、CSVのデータを読む場合に最初の5行を飛ばすという方法か、カンマ区切りの行の最初の文字が数字の場合だけ読むという方法はありませんでしょうか。 Line Input #intFileNo, strTextLine strTextLine = Replace(strTextLine, """", "") str = Split(strTextLine, ",") こんな感じのコードで考えてます。 お分かりの方いましたらお願いします。

  • VB2010でプロジェクト内に置いたCSVについて

    いつも参考にさせていただいております。 当方会社でプログラムを組む為にVB2010にて基礎書籍で勉強中で、 多次元配列が終わって「CSVの読み書き」や「データベース」をやりはじめたところです。 色々自分なりにいじっていたところ・・・ プロジェクトを開く→CSVファイルをプロジェクト名までドラッグ  をすると、プロジェクト内にCSVファイルがコピーされ、内容も見ることができました。 通常CSVファイルで読み書きをする場合はフルパス指定などのコード記述をしますが、  (1)プロジェクト内にCSVファイルを置けば、簡単に記述できるのでは?    と思ったのですが、そのようなやり方はありますでしょうか?  (2)又、簡単に記述ができなくても何か利点がありますでしょうか? 私が持っている書籍やインターネットでは見つからなかったので、 そもそもそんな方法はないかもしれませんが、(1)、(2)の内容を ご存じの方いましたら御解答願います。 当方PC使用環境 OS:WindowsXP SP3 Microsoft Visual Basic 2010 Express

  • csvファイルのデータの間引きをしたい

    はじめまして。 csvファイルをもとにMSChartでグラフ表示するのですが、データ量が大きすぎ、描画に時間がかかってしまいます。 そこで、csvファイルの間引きを考えたのですが、うまい方法が見当たりません。 何かよい方法はございませんでしょうか? よろしくお願いいたします。 P.S. 何行かおきに変数に読み込むことを考えたのですが、Line Inputでは解決出来ませんでした。

  • VB6 「Line Input」でのリークについて

    VB6での「Line Input」命令使用時のメモリリークについて教えて下さい。 1分毎に3600行のCSVファイルを読み込むプログラムを作成しています。  (CSVファイルは1行500文字程度) 以下の【パターン1】は作成したプログラムの1部ですが、 (1)を3600回ループ時にパフォーマンスモニタでの「Private Bytes」が増加してしまいます。   (1ループ毎に増加せず、数十回ループする毎に増加します。) 試しに【パターン2】を作成し、CSVファイルはオープンのみ行い、 読み込みは行わずに、500文字の文字列が入った変数をコピーした場合は、 「Private Bytes」は増加しません。 基本的に違いは(1)と(2)の箇所だけなのですが、 「Line Input」命令の使用方法などで間違っている箇所があるのでしょうか? ご存知の方、教えて下さい。お願いします。 【パターン1】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim FP As Integer 'ファイル番号 (省略) : FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) Line Input #FP, CsvDataBuf(i)     ←(1) i = i + 1 Loop Close #FP : (省略) 【パターン2】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim tempBuf As String Dim FP As Integer 'ファイル番号 (省略) : tempBuf = "~500文字の文字列~" FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) CsvDataBuf(i) = tempBuf       ←(2) i = i + 1 Loop Close #FP : (省略)