プログラミング初級1
文字数カウント・プログラム(ステップ7)


ファイル名のフォルダ設定と、行頭末の空白を取る


いよいよ最終ステップです。 さらに使いやすくするために、今回はファイル名の入力時に、フォルダ名を入力しなくても マイ ドキュメントのフォルダにするように工夫します。
ただし、マイ ドキュメントのフォルダにない場合は、今回は考えていません。
また、行頭や行末に不要な空白(スペース)が入っている場合があります。 今回は、そういう空白を取った文字数を計算します。




ステップ7の仕様


  1. 「ファイル名を入力してください」を表示して、ファイル名の入力を受け付ける。
  2. マイ ドキュメントのフォルダにある入力された名前のファイルをオープンする。
  3. ファイルの最後になるまで、以下の処理を繰り返す。
      (1) ファイルから1行読み込む。
      (2) 読み込んだ行の行頭末の空白を取る。
      (3) 文字数の計算(合計)をする。
  4. ファイルの全文字数を、メッセージボックスで表示する。
  5. ファイルを閉じる。



ステップ7のプログラム・ソース



  1. Sub Count7()
  2. '文字数カウント・プログラム
  3. '最終ステップ:ファイル名のフォルダ設定と、デバッグ行のコメント化
  4. Dim file_nm As String 'ファイル名用変数を宣言
  5. Dim gyo As String '読み込んだ行を入れておく変数を宣言
  6. Dim moji_su As Long '1行の文字数用変数を宣言
  7. Dim gokei As Long 'ファイルの文字数用変数を宣言
  8. Dim gyo_no As Integer '行番号用変数を宣言
  9. file_nm = "" 'ファイル名用変数の初期化
  10. gokei = 0 '合計用変数の初期化
  11. gyo_no = 0 '行番号用変数の初期化
  12. file_nm = InputBox("ファイル名を入力してください")
  13. file_nm = "C:\My Documents\" & file_nm & ".txt" 'フォルダ名とファイル名をくっ付ける
  14. Open file_nm For Input As #1 'ファイルのオープン
  15. Do Until EOF(1) 'ループ:条件EOF(1)になるまで、ここからの処理を繰り返す
  16. Line Input #1, gyo 'ファイルから1行読み込む
  17. gyo = Trim(gyo) '読み込んだ行の行頭末の空白を取る
  18. moji_su = Len(gyo) '空白を取った行の長さ(文字数)を '変数 moji_su へ入れる
  19. gokei = gokei + moji_su '合計用変数 gokei に文字数を加算する
  20. gyo_no = gyo_no + 1 '行番号を1アップ
  21. 'Debug.Print gyo_no & "行目は 「" & gyo & "」" '読み込んだ行の中身を表示する
  22. 'Debug.Print "文字数は " & moji_su '行の文字数を表示する
  23. Loop 'ループ:ここまでの処理を繰り返す
  24. MsgBox "ファイルの文字数は " & gokei '合計用変数 gokei の値を表示する
  25. Close #1 'ファイルのクローズ
  26. End Sub




解       説


ステップ6と、違うところだけ説明します。

  1. 13行目で、フォルダ名とファイル名をくっ付けます。
    「くっ付ける」と言えば、& でしたね。(笑)
    フォルダ名は、自由に変えてください。「マイ ドキュメント」ではなく、フロッピーディスクにしたい。 と言うのなら、file_nm = "A:\" & file_nm & ".txt にしてください。
    ただし、旧 PC-98 シリーズは、file_nm = "C:\" & file_nm & ".txt にしてください。


  2. 17行目は、読み込んだ行の行頭末の空白を取ります。
    仕様の 2. の (2) にあたります。
    行頭や行末の空白を取るには、RTrim, LTrim, Trim 関数を使います。
    LTrim は、行頭の空白を取ります。
    RTrim は、行末の空白を取ります。
    Trim は、行頭と行末の空白を取ります。
    行中の空白を取る関数は、ありません。
    構文は、
    文字列型変数名 = RTrim(文字列または変数名)
    文字列型変数名 = LTrim(文字列または変数名)
    文字列型変数名 = Trim(文字列または変数名)
    です。ここでは、右辺の gyo の行頭と行末の空白を取って、左辺の gyo に入れ直しています。 このように、右辺と左辺で、同じ変数を使うことは、プログラムでは通常に行われています。
    「気持ちが悪い」と言う人は、右辺と左辺で、違う変数を使ってください。 でも、そうやっていくと、どんどん変数が増えてしまうんですよね。(^^;


  3. 21〜22行目のデバッグ行は、コメントにしてしまいました。
    デバッグ行は、あくまで開発用ですので、プログラムのテストが済んだら、忘れずにコメントにしてください。 行の先頭に ' をつけるだけです。
    コメントにせずに削除しても構いません。 でも、後でメンテする時に、コメントにされたデバッグ行が案外役に立つのです。





ステップ7実行前の準備


ステップ4で使用したのと同じファイル mojisu2.txt を使います。 もしまだ準備していない方がいましたら、ステップ4を見て準備してください。
ファイルの中身は、こうなっています。(行頭末に空白あり)
 1:これは、文字数カウントのテストです。
 2:abcdefg
 3:1234567890
 4:あいうえお
 5:あ い う え お
 6:Alphabet と 漢字をまぜます。
 7:これは、最終行です。 Bye !




実       行


    動作確認してみましょう。

  1. カーソルの位置を確認してから、F5キーを押してください。


  2. 「ファイル名を入力してください」を表示して、ファイル名の入力を受け付けます。
    イメージ


  3. ファイル名を入力します。
    mojisu2 と入力して、OKをクリックします。.txt も省略してくださいね。 でないと、エラーになります。
    イメージ


  4. ファイルの文字数が、メッセージボックスで表示されます。

    イメージ


  5. イミディエイト・ウィンドウを見てください。

    イメージ

    何もありませんね?


    「ファイル名を入力してください」のメッセージだけでは、「マイドキュメント」のフォルダを使うとか、 .txt は省略するとかがわかりませんね。
    余裕のある人は、ちょっとメッセージを変えてみてください。




入れ替え


前回との違いがあまりないので、今回も入れ替えは1回だけ。
ソースの行の順番をでたらめにしたやつを、ここに書いておきます。 正しい順番に並べ替えてください。もちろん、正解を見ずにね。 それで正しいと思ったやつをコピーして、エラーが出ないかどうか試してみてください。




gokei = gokei + moji_su     '合計用変数 gokei に文字数を加算する
moji_su = Len(gyo)          '読み込んだ行の長さ(文字数)を
                            '変数 moji_su へ入れる
Dim gyo_no  As Integer      '行番号用変数を宣言
gyo_no = gyo_no + 1         '行番号を1アップ
Close #1                    'ファイルのクローズ
Line Input #1, gyo          'ファイルから1行読み込む
Loop                        'ループ:ここまでの処理を繰り返す
End Sub
gyo_no = 0                  '行番号用変数の初期化
'文字数カウント・プログラム
gyo = Trim(gyo)             '読み込んだ行の行頭末の空白を取る
Open file_nm For Input As #1  'ファイルのオープン
Dim gyo     As String       '読み込んだ行を入れておく変数を宣言
'             および文字数の合計を表示する。
Sub Count7()
'Debug.Print "文字数は " & moji_su   '行の文字数を表示する
file_nm = InputBox("ファイル名を入力してください")
gokei = 0                   '合計用変数の初期化
Dim moji_su As Long         '1行の文字数用変数を宣言
'ステップ7:ファイル名を入力して、文字数を表示する。
file_nm = "C:\My Documents\" & file_nm & ".txt" 'フォルダ名とファイル名をくっ付ける
MsgBox "ファイルの文字数は " & gokei    '合計用変数 gokei の値を表示する
Dim file_nm As String       'ファイル名用変数を宣言
Do Until EOF(1)   'ループ:条件EOF(1)になるまで、ここからの処理を繰り返す
'Debug.Print gyo_no & "行目は 「" & gyo & "」"  '読み込んだ行の中身を表示する
Dim gokei   As Long         'ファイルの文字数用変数を宣言
file_nm = ""                'ファイル名用変数の初期化




戻る

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル