テキストファイル読み書き色々
                                                        玄関へお回り下さい。
1.テキストファイルを丸ごと読み書きする            (062)
2.テキストファイル(CSV形式)を変数毎に読み書きする

Excelで次のようなファイルを作成し、TXT形式(タブ区切り)(sample.txt) CSV(カンマ区切り)(sample.CSV)で保管して下さい
     
        1.テキストファイルを丸ごと読み書きする

宣言セクションに記入

Option Explicit   'SampleNo=062 WindowsXP VB6.0(SP5) 2002.05.14

Dim strYubin() As String
Dim strAddre() As String
Dim strNamae() As String
Dim lngDatN  As Long
Dim intFileNo As Integer


Private Sub Command1_Click()
'テキストファイルの内容を1行毎に読み込む
  '別途下記プロパティを設定して下さい
  'Text1.Text = ""
  'Text1.MultiLine = True
  'Text1.ScrollBars = vbBoth

  Dim strTextLine As String
  Dim strTxtDat  As String
  '使用可能なファイル番号を取得
  intFileNo = FreeFile
  'テキストファイルをオープン
  Open "sample.txt" For Input As #intFileNo
  ' ファイルの終端までループを繰り返します。
  Do While Not EOF(intFileNo)
    '1 行づつ変数に読み込みます。
    Line Input #intFileNo, strTextLine
    ' テキストボックスに表示します。
    strTxtDat = strTxtDat & strTextLine & vbCrLf
  Loop
  '一旦変数にすべて読み込みその後テキストボックスに
  '表示した方が高速に処理できる
  Text1.Text = strTxtDat
  'ファイルを閉じる
  Close #intFileNo
End Sub

表示結果
 

Private Sub Command2_Click()
  'テキストボックスの内容を丸ごと保存
  intFileNo = FreeFile
  Open "sample_01.txt" For Output As #intFileNo
  'テキストボックスの内容をそのまま保存
  Print #intFileNo, Text1.Text
  Close #intFileNo
End Sub

保存結果

 
      2.テキストファイル(CSV形式)を変数毎に読み書きする

Private Sub Command3_Click()
'CSV形式ファイルを変数毎に読み書きする
  lngDatN = 0
  '使用可能なファイルナンバーを取得
  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

  '4番目のデータを表示
  Text2.Text = 4
  Text3.Text = strYubin(4)
  Text4.Text = strAddre(4)
  Text5.Text = strNamae(4)
End Sub

表示結果
 

Private Sub Command4_Click()
'CSV 形式で保存
  Dim lngCount As Long
  intFileNo = FreeFile
  'シーケンシャル書込みモードで sample.csv をオープン
  Open "sample_01.csv" For Output As #intFileNo
  For lngCount = 1 To lngDatN
    Write #intFileNo, strYubin(lngCount), _
             strAddre(lngCount), strNamae(lngCount)
  Next lngCount
  Close #intFileNo
End Sub

保存結果
  Excelでそのまま読み込めます


レコードの表示切替
Private Sub Text2_KeyPress(KeyAscii As Integer)
'配列の内容をテキストボックスに表示
  Dim Rcno As Long
  If KeyAscii = vbKeyReturn Then
    KeyAscii = 0
    If Len(Text2.Text) > 0 Then
      Rcno = CLng(Text2.Text)
      Text3.Text = strYubin(Rcno)
      Text4.Text = strAddre(Rcno)
      Text5.Text = strNamae(Rcno)
    End If
  End If
End Sub


データを変更した場合書換
Private Sub Command5_Click()
'変更したデータを配列に読み込み
  Dim Rcno As Long
  If Len(Text2.Text) > 0 Then
    Rcno = CLng(Text2.Text)
    strYubin(Rcno) = Text3.Text
    strAddre(Rcno) = Text4.Text
    strNamae(Rcno) = Text5.Text
  End If
End Sub

全 体 図
 
読込んだデータをテキストボックスやリストボックスに表示する場合ここのStrCut()関数等を使ってText1.Text = Text1.Text & StrCut(strYubin(lngCount), 14) & StrCut(strAddre(lngCount), 44) & StrCut(strNamae(lngCount), 32) & vbCrLf のようにして表示されると表示幅が揃い、きれいに表示できます。書込んだCSVファイルは関連付起動で簡単にエクセルで表示できます。
Shell ("start.exe " & App.Path & "\sample.csv")




2002/05/14