VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2004/07/23(Fri) 17:58
投稿者りっとっと
Eメール
URL
タイトルRe: また教えてほしいのですが

あまりいい方法が思い浮かびませんね。
ADOなどを使用する方法をお勧めいたします。
自作関数などですと、ファイルサイズが大きくなるとその分処理に時間がかかりますからね。
あと、逆引きに載っている方法が一番スマートだと思われますが、
一応前回のを改良したものをのせます。
.frmファイルの内容を全部載せますので、メモ帳を開きコピペして、"xxx.frm"として保存してください。あとは、新規プロジェクトで、保存したfrmファイルを追加し、スタートアップに設定して実行
してみてください。

'frmファイルの内容
VERSION 5.00
Begin VB.Form frmCSVSample
   Caption         =   "CSVファイルの読み込み修正サンプル"
   ClientHeight    =   2115
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   3870
   LinkTopic       =   "Form1"
   ScaleHeight     =   2115
   ScaleWidth      =   3870
   StartUpPosition =   3  'Windows の既定値
   Begin VB.TextBox txtKamoku
      Height          =   270
      Left            =   840
      TabIndex        =   4
      Top             =   120
      Width           =   2055
   End
   Begin VB.TextBox txtRireki
      Height          =   270
      Index           =   2
      Left            =   840
      TabIndex        =   3
      Top             =   1320
      Width           =   2055
   End
   Begin VB.TextBox txtRireki
      Height          =   270
      Index           =   1
      Left            =   840
      TabIndex        =   2
      Top             =   960
      Width           =   2055
   End
   Begin VB.TextBox txtRireki
      Height          =   270
      Index           =   0
      Left            =   840
      TabIndex        =   1
      Top             =   600
      Width           =   2055
   End
   Begin VB.CommandButton cmdHozon
      Caption         =   "保存"
      Height          =   375
      Left            =   2160
      TabIndex        =   0
      Top             =   1680
      Width           =   735
   End
   Begin VB.Label Label2
      Caption         =   "科目"
      Height          =   255
      Left            =   480
      TabIndex        =   8
      Top             =   120
      Width           =   375
   End
   Begin VB.Label Label1
      Caption         =   "3回目"
      Height          =   255
      Index           =   2
      Left            =   360
      TabIndex        =   7
      Top             =   1320
      Width           =   495
   End
   Begin VB.Label Label1
      Caption         =   "2回目"
      Height          =   255
      Index           =   1
      Left            =   360
      TabIndex        =   6
      Top             =   960
      Width           =   495
   End
   Begin VB.Label Label1
      Caption         =   "1回目"
      Height          =   255
      Index           =   0
      Left            =   360
      TabIndex        =   5
      Top             =   600
      Width           =   495
   End
End
Attribute VB_Name = "frmCSVSample"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Data() As String
Private Buf() As String
Private csvFileName As String
Private Cnt As Long
Private Cnt2 As Long
Private Cnt3 As Long

'保存ボタンが押されたらファイルに保存します
Private Sub cmdHozon_Click()
    Open csvFileName For Binary As #1
    '改行コードをCrLfにしています。環境などに応じて変更してください
    Put #1, , Join(Data, vbCrLf)
    Close #1
End Sub

Private Sub Form_Load()
    Dim rCnt As Long
    
    csvFileName = "c:\test.csv"
    OpenCSV
    '初期表示データを国語とします
    txtKamoku.Text = "国語"
    Call ChangeKamoku(txtKamoku.Text)
End Sub

'CSVファイルを開きます
Private Sub OpenCSV()
    Dim bin() As Byte
    Dim strData As String
    
    Open csvFileName For Binary As #1
    ReDim bin(LOF(1) - 1)
    Get #1, , bin
    Close #1
    strData = StrConv(bin, vbUnicode)
    strData = Replace(strData, vbCrLf, vbLf)
    strData = Replace(strData, vbCr, vbLf)
    Data = Split(strData, vbLf)
End Sub

'設定された科目の点数を表示
Private Function ChangeKamoku(Kamoku As String)
    For Cnt = 1 To 3
        txtRireki(Cnt - 1).Text = GetData(txtKamoku.Text, Cnt)
    Next
End Function

'カンマ区切りの最初の部分が科目名で履歴が左から1回目、2回目...という前提とします
Private Function GetData(Kamoku As String, Optional Rireki As Long = -1) As String
    For Cnt2 = 0 To UBound(Data)
        If Data(Cnt2) = "" Then Exit For
        Buf = Split(Data(Cnt2), ",")
        If Buf(0) = Kamoku Then
            GetData = Buf(Rireki)
            Exit Function
        End If
    Next
End Function

'点数を修正します
Private Function UpdateData(Kamoku As String, Rireki As Long, Tensu As String) As String
    For Cnt = 0 To UBound(Data)
        If Data(Cnt) <> "" Then
            Buf = Split(Data(Cnt), ",")
            If Buf(0) = Kamoku Then
                Buf(Rireki) = Tensu
                Data(Cnt) = Join(Buf, ",")
                Exit For
            End If
        End If
    Next
End Function

'エンターキーが押されたら表示する点数を変更
Private Sub txtKamoku_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        Call ChangeKamoku(txtKamoku.Text)
    End If
End Sub

'リアルタイムに修正
Private Sub txtRireki_Change(Index As Integer)
    Call UpdateData(txtKamoku.Text, Index + 1, txtRireki(Index).Text)
End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -