2.CSV ファイルの読み書き色々 |
1.CSV ファイルを変数毎に読み書きする 2.CSV ファイルを行毎に読み書きする 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:なし その他 : : |
1.CSV ファイルを変数毎に読み書きする |
使用するデータは、下記のようなものをメモ帳で作成しておいて下さい。 527-0000,八日市市 東沖野,VBレスキュー 527-0001,甲賀郡 甲西町,ホーム甲西店 527-0002,近江八幡市 鷹飼町,不動産販売 527-0003,八日市市 本町,××八日市店 527-0004,近江八幡サティ店,カメラの店 527-0005,愛知郡 愛知川町,ハウジング 527-0006,八日市市 五智町,エンジニアリング 527-0007,八日市市 札の辻,ママセンター 527-0008,八日市市 東沖,○●建設(株) 527-0009,近江八幡市 鷹飼町,ドコモショップ Option Explicit 'SampleNo:062 2002.05.14 @ 2007.01.19 Private strYubin() As String Private strAddre() As String Private strNamae() As String Private lngDatN As Long Private intFileNo As Integer Private Sub Command1_Click() 'CSV形式ファイルを変数毎に読み書きする lngDatN = -1 '使用可能なファイルナンバーを取得 intFileNo = FreeFile 'シーケンシャル入力モードで sample.csv をオープン Open "sample.csv" For Input As #intFileNo 'EOF(intFileNo)が True になるまで実行 Do Until EOF(intFileNo) lngDatN = lngDatN + 1 '件数をカウント '変数を1個づつ追加宣言 ReDim Preserve strYubin(lngDatN) As String ReDim Preserve strAddre(lngDatN) As String ReDim Preserve strNamae(lngDatN) As String 'データを各変数に読込 Input #intFileNo, strYubin(lngDatN), strAddre(lngDatN), strNamae(lngDatN) Loop 'ファイルを閉じる Close #intFileNo Dim i As Long For i = 0 To UBound(strYubin) Debug.Print strYubin(i), strAddre(i), strNamae(i) Next i End Sub 上記出力結果 527-0000 八日市市 東沖野 VBレスキュー 527-0001 甲賀郡 甲西町 ホーム甲西店 527-0002 近江八幡市 鷹飼町 不動産販売 527-0003 八日市市 本町 ××八日市店 527-0004 近江八幡サティ店 カメラの店 527-0005 愛知郡 愛知川町 ハウジング 527-0006 八日市市 五智町 エンジニアリング 527-0007 八日市市 札の辻 ママセンター 527-0008 八日市市 東沖 ○●建設(株) 527-0009 近江八幡市 鷹飼町 ドコモショップ Private Sub Command2_Click() 'CSV 形式で保存 Dim lngCount As Long intFileNo = FreeFile 'シーケンシャル書込みモードで sample01.csv をオープン Open "sample01.csv" For Output As #intFileNo For lngCount = 0 To lngDatN Write #intFileNo, strYubin(lngCount), strAddre(lngCount), strNamae(lngCount) Next lngCount Close #intFileNo End Sub 上記保存結果 "527-0000","八日市市 東沖野","VBレスキュー" "527-0001","甲賀郡 甲西町","ホーム甲西店" "527-0002","近江八幡市 鷹飼町","不動産販売" "527-0003","八日市市 本町","××八日市店" "527-0004","近江八幡サティ店","カメラの店" "527-0005","愛知郡 愛知川町","ハウジング" "527-0006","八日市市 五智町","エンジニアリング" "527-0007","八日市市 札の辻","ママセンター" "527-0008","八日市市 東沖","○●建設(株)" "527-0009","近江八幡市 鷹飼町","ドコモショップ" 個々のデータを文字列型として扱っているので各データは、"" で括られます。 上記の保存したデータを使って表示しても問題なく読み込み表示できます。 又、Input # ステートメントを使用してファイルから変数へデータを正しく読み込むことができるように、データをファイルに書き込む場合は、Print # ステートメントではなく、必ず Write # ステートメントを使用してください。 Write # ステートメントを使用すると、ファイルにデータを書き込むときに各データ項目の間に正しくカンマ (,) が挿入されます。 |
2.CSV ファイルを行毎に読み書きする |
Private Sub Command1_Click() 'CSV ファイルを読み込み MSFlexGrid に表示 Dim intFileNo As Integer 'ファイルNo Dim TextLine As String Dim CellsData As Variant Dim i As Long Text1.Text = "" intFileNo = FreeFile Open "sample01.csv" For Input As #intFileNo Do Until EOF(intFileNo) 'EOF(intFileNo)が True になるまで実行 Line Input #intFileNo, TextLine '1行全体を変数に読み込む '文字列中の "" も取り除かれるので注意(別途追加設定が必要) TextLine = Replace(TextLine, Chr$(34), "") ' "" を取り除く CellsData = Split(TextLine, ",") 'カンマ区切りで列データを分割 For i = LBound(CellsData) To UBound(CellsData) Text1.Text = Text1.Text & CellsData(i) & vbTab Next i Text1.Text = Text1.Text & vbCrLf Loop Close #intFileNo End Sub 通常、Line Input # ステートメントを使用して読み込んだデータは、Print # ステートメントを使用して書き込みます。 又、データや使用目的によっても色々読み書きの方法が異なりますので、下記サンプル等も参考に目的に合わせて作り直して下さい。MSFlexgridを使ってのCSVファイル読み書き色々 ダブルクォーテーションを含む文字列の読込表示 不特定の列数のCSVファイルの取込 CSV ファイルをシーケンシャル入力モードで開き MSHFlexGrid に表示 MSFlexGrid/MSHFlexGrid の表示データをファイルに保存方法色々 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
CSV ( Comma Separated Values ) カンマ区切り ファイル CSV形式ファイルを変数毎に読み書きする |