どうも!リョクちゃです。
テキストファイルについては、読み込みから書き込みまでを以前の記事で紹介してきました。
今回は、小規模なアプリケーションにおけるデータ管理の考え方として、
テキストファイルを使ったデータ管理について、
筆者の考えを紹介してみたく思ったので記事にします。
ちなみにテキストファイルの操作については、下の記事をご参考ください。
前回の記事はこちら
目次
テキストファイルは総称
テキストファイルについては、
ファイルの拡張子に.txtとつくファイルを一般的にテキストファイルと呼んでいます。
各OSによって
- Windowsであればメモ帳で作成ができます。
- LinuxだとLeafPad等で作成することもできます。
- Macだと標準インストールされているテキストエディットで作ることができます。
デフォルトでは、rtf形式になりますが標準テキストにフォーマットを変更することで、txt形式で保存することができます。
また、テキストファイルは.txtで表すといいましたが、
筆者としては、
総称として読ばれる名称だと考えています。
例えば、.csvの拡張子を持つファイルはCSVファイルといわれます。
これも元をたどればテキストファイルです。
同様に設定ファイルのiniファイルも
テキストファイルです。
したがって、下のようなイメージが考えられます。
実は、これらみんな元はテキストファイルです。
これら拡張子なんかはまとめてテキストファイルと呼ぶようにしています。
でないと、プログラムを開発する際に、相手先と一向に話が進まないといったこともあるので……こうした経験から総称で呼ぶようにしています。
また、ファイル形式についてわからないといった方も
当然いるのでわかりやすいようにといった意味もあります。
テキストファイルの使い方・使われ方
アプリケーションによっては、テキストファイルを使って
アプリケーションの設定を書き込んでおくファイルや
プログラムのログを書きだしておくファイルに使われたりします。
だいたい、下のような使われ方が多いです。
- 設定ファイル
- プログラムログファイル
- データ保存用
などが一般出来ではないかと思います。
その中で、設定ファイルについては、iniファイルで残すといったことを以前に紹介しました。
プログラムログについては、一般的にファイルの拡張子を.logにして保存をします。
※これについては別記事で紹介していきます。
データ保存用については、.txtや.csvそして.tsvで残されることが多いです。
もちろん.xlsxや.xlsで保存する場合もありますが、
これはExcel独自のファイル形式になるので今回は省いて考えます。
(※扱い方も特殊なので……また、別途紹介の場を設けます。)
使い方の中でもデータ保存用について、
今回はデータ管理の考え方なのでメインに触れていきます。
データ管理にテキストファイルを使う
アプリケーションによっては、センサや計測装置から取得したデータを
保存するアプリケーションもあるかと思います。
もしくはこれから作る可能性が出てくるかもしれません。
ここではセンサや計測装置といったハードウェアから取得されるデータと挙げましたが、
データの中には、これ以外にも例として、
- 学校在籍生徒のデータ
- 都道府県ごとの収穫物収穫量
- 時間別通行量
- 年齢別好きな食べ物
ようなデータがあります。
(偏った見方はありますが、基本的にデータだらけです。)
これらデータを基本的には紙媒体を使用して記録を私たちはしています。
ですが、最近ではペーパーレスの取り組みなどが顕著になってきたのではないでしょうか。
そうした時、考えつくのがアプリで管理していったらいいじゃないか?ではないでしょうか。
だいたいはアプリによってデジタル的に管理するといった意見が多いかと思います。
もう少し深く考えると、アプリで管理するにはどうやって管理したらよいか?
といった疑念が生じるかと思います。
(アプリを作成する側は抱かれるのではないでしょうか?)
一般的にアプリで管理していくには、
- サーバ+ミドルソフトウェア(データベース)を活用したデータ管理
- クラウド+ミドルソフトウェア(データベース)を活用したデータ管理
- アプリケーションを導入したパソコン上でデータを管理
が挙げられます。
最初の2つは、大規模なデータを残す場合に活用されます。
サーバとクラウドで管理する方法が違いますが考え方は同じです。
データをサーバで管理するかクラウドでするかの違いです。
大きくは、コストやスペース、保守・カスタマイズ性などの比較パラメータがあります。
これらパラメータに基づいて、何が良いか見極めていきます。
※ ここでは詳しく紹介はしません。
一方で、アプリケーションを導入したパソコン上で管理する最もコストがかからずできる方法として、筆者もよく使うテキストファイルにおけるデータ管理です。
ただし、これはあくまで小規模なデータを扱うアプリケーション且つ
アプリを導入したパソコン上でしかデータを管理しない場合にのみ使える考え方です。
ですので、大規模データを扱う場合は、
当然サーバもしくはクラウドでデータ管理をするためのアプリケーションを開発します。
じゃあ、小規模なデータを扱うアプリや
パソコン上でしかデータ管理しないってどんなのがあるの?
これには、偏ってしまいますが、
- 何らかの部品のOK/NG判定のデータ
- インターネットへの接続環境がない場所でのデータ取得・管理
- 点検リスト
といったものを挙げておきます。
その中で、部品のOK/NGのような場合をイメージしたアプリケーションを簡易的に作成してみたので貼っておきます。
イメージだけでもつかんでもらえたらなと思います。
まず下のようなフォーム画面を作成しました。
アプリケーションの動作例
- スタートボタンを押すと1秒おきに計測データが取得され、判定(OK/NG)を行います。
- ストップボタンを押すと計測データと判定結果をテキストファイルに出力します。
- 保存されているデータを表示ボタンを押すことで、
当日分の検査データがボタン上の領域に表示されます。
このような動作をします。
実際に実行した例を下に表示します。
このようなアプリケーションの場合は、
テキストファイルでのデータ管理でも問題ないかと思います。
ちなみにコードはこちら、簡易的に書いています。
イメージつかみ程度で参考にしていただけたら嬉しいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
Public Class TestTextFile ' データ保存フォルダパス Private Const SAVE_DIR As String = "./Save" ' データ保存ファイル名 Private Const SAVE_FILE As String = "testData.txt" ' データ保存変数 Private saveDataAry As List(Of String) = Nothing ' 乱数変数 Private random As Random = Nothing ''' <summary> ''' スタートボタン押されたら ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' テキストファイルに保存するデータ配列変数の初期化 saveDataAry = New List(Of String) ' 乱数変数インスタンス化 random = New Random(1000) ' タイマースタート Me.Timer1.Enabled = True Me.Timer1.Interval = 1000 Me.Timer1.Start() End Sub ''' <summary> ''' 指定秒ごとに処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ' 0以上100未満の乱数を生成 Dim data As Integer = random.Next(100) ' 0以上2未満の乱数を生成 Dim judgeData As Integer = random.Next(0, 2) ' OK or NGに置き換え Dim strJudge As String If judgeData = 0 Then strJudge = "OK" If judgeData = 1 Then strJudge = "NG" ' 配列変数へ格納 saveDataAry.Add(Now.ToString("yyyy/MM/dd HH:mm:ss") & "," & CStr(data) & "," & strJudge) End Sub ''' <summary> ''' ストップボタン押したら ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' タイマー停止 Me.Timer1.Stop() Me.Timer1.Enabled = False ' フォルダチェック If System.IO.Directory.Exists(SAVE_DIR) = False Then System.IO.Directory.CreateDirectory(SAVE_DIR) End If ' ファイル名作成 Dim writeFile As String = SAVE_DIR + "/" + Now.ToString("yyyyMMdd") + "_" + SAVE_FILE ' ファイルへ書き込む文字列作成 Dim strText As New System.Text.StringBuilder For Each text As String In saveDataAry strText.Append(text + vbCrLf) Next text ' ファイルの書き込み Dim sw As New System.IO.StreamWriter(writeFile, True, System.Text.Encoding.UTF8) sw.Write(strText.ToString) ' オブジェクト解放 If sw IsNot Nothing Then sw.Close() sw.Dispose() sw = Nothing GC.Collect() End If End Sub ''' <summary> ''' 保存されたデータを表示ボタンを押したら ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click If Me.Timer1.Enabled = False Then ' 当日分のテキストファイルをチェック ' ファイル名作成 Dim readFile As String = SAVE_DIR + "/" + Now.ToString("yyyyMMdd") + "_" + SAVE_FILE If System.IO.File.Exists(readFile) Then ' テキストファイルを読み取る Dim sr As New System.IO.StreamReader(readFile) ' データテーブル変数作成 Dim dTable As New DataTable dTable.Columns.Add("DATA_1") dTable.Columns.Add("DATA_2") dTable.Columns.Add("DATA_3") While sr.Peek >= 0 If sr.ReadLine <> "" Then Dim line As String() = sr.ReadLine.Split(","c) dTable.Rows.Add() dTable.Rows(dTable.Rows.Count - 1).Item("DATA_1") = line(0) dTable.Rows(dTable.Rows.Count - 1).Item("DATA_2") = line(1) dTable.Rows(dTable.Rows.Count - 1).Item("DATA_3") = line(2) End If End While ' オブジェクト解放 If sr IsNot Nothing Then sr.Close() sr.Dispose() sr = Nothing GC.Collect() End If ' 履歴表示 Me.DataGridView1.DataSource = dTable End If End If End Sub End Class |
まとめ
テキストファイルでデータ管理をする場合は、
小規模なデータであまり重要性が高くないデータを管理
どうしてもデータベースのコストが出せない場合
などではないでしょうか。
テキストファイルでデータ管理の運用をする場合は、
当たり前のことですがバックアップやミラーリングをして、
必ずテキストファイルの複製を用意しておきましょう。
筆者は、テキストファイルで管理をしていく場合が多いので、
良ければ手段としてテキストファイルでデータ管理をしていくことを
アイデアとして持ってもらえたらなと思います。
ご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。