【課題】
以下の内容を満たすタスクを作成してみましょう。
■1. 事前準備
以下のzipファイルをダウンロードし、任意の場所に解凍してください。
https://www.sct.co.jp/download/automate/Sample_Task/00009425/00009425.zip
■2. 内容(クリックして展開してください)
--------------------------------------------------------------------------------------------------
zipファイルを解凍すると、テキストファイルが3種、Excelファイルが1種含まれています。
このテキストファイルの中から、メンテナンスの具体的な日時が書いてある部分を抽出し、「日付」「開始時刻」「終了時刻」「どのファイルに書いてあったか」をExcelに転記したいものとします。
メンテナンス日は複数書いてある場合もあります。その際は全てExcelに転記します。
つまり、完成系は以下のような形を想定します。
「メンテナンス実施日」「開始時刻」「終了時刻」「ファイル名(フルパスでなくても構わない)」の順に並べます。
その後、Excelを別名保存します。
(例:「20201201_メンテ予定日.xlsx」など)
--------------------------------------------------------------------------------------------------
■2. 前提
・メンテナンス日付が書いてある行数は固定ではありません
・メンテナンス日付が書いてある箇所は、必ず一定のフォーマットで書かれており、例外は無いものとします
・「メンテナンス日付が書かれていない」ということは起こりえないものとします
・メンテナンス日付のフォーマットと同じフォーマットで、関係のない文章が書かれることは無いものとします
・ソートされている必要はないものとします(=正しい内容が過不足なく転記されていればデータの順序は問いません)
■3. 処理を作成する上での禁則事項
・テキストを事前に手動で編集することは禁止とします
・メンテナンス日付とは関係のない日付や時間が転記されてはならないものとします(例:お知らせ日や、電話受付可能時刻が転記されたら失敗です)
■4.ヒント
(ヒントを見る際は、クリックして展開してください。)
ヒント1
まず、今回は様々な変数が必要になりそうです。日付や時刻を格納する変数の他、カウントするための変数など用途は様々です。
作り方によっては8つほど変数を利用する場合もあります。変数の数が多くなり、かつ用途も似ている場合は明確に名前で区別できるよう命名規則にご注意ください。
変数が足りないと感じたら必要に応じて新しい変数を宣言しましょう。
ヒント2
テキストファイルを順繰りにループするには、「Loop - ファイル」が利用できますが、今回は「ファイル システム - 情報の取得」で一度データセット化する手もあります。
そうすれば、特別な関数を使わずとも「データセット名.Filename」でパスを含まないファイル名を直接取得できます。
ヒント3
テキストの確認や修正をするのに、メモ帳などのアプリをわざわざ操作させる必要はありません。
「ファイル システム - ファイルからの読込み」アクションを使用すれば、テキストの中身を変数に格納できます。
ヒント4
メンテナンス日付が書かれている部分のフォーマットの法則性には気が付きますでしょうか?
ただ単に「~」や「:」、「月」「日」の文字列を含むかどうか、だけでは他の行もヒットしてしまいます。
先頭に「・」があり、そのあと「(数字)月(数字)日 (数字):(数字) ~ (数字):(数字)」というパターンを汎用的に表せられればよさそうです。
ヒント5
一定のパターンの文字列に合致するかどうかは、「正規表現」を使えば対応できます。
今回の例では最低限、「\d+」(一文字以上の数字の羅列)が使えれば対応できます。それ以外は空白を含め固定文字列です。
ヒント6
メンテナンス日が書かれている部分のパターンを表す正規表現が書けたら、次に考えることは「メンテナンス日が何回そのテキストに書かれているか」です。
「テキスト - 検索」アクションの「詳細」を開くと、パターンに合致する文字列の個数を取得する部分がありそうです。
ヒント7
「開始日付」と「終了日付」は同じフォーマットです。そのため、一意の正規表現では取得できません。
ただし、抜き出した1文のうち、「開始日付」は1回目、「終了日付」は2回目に来るという法則があるので、「次のインスタンスから開始」で制御できそうです。
ヒント8
Excelで1行ずつずらして書くには、データを書くたびに変数を1つ増やせば対応できます。
■5. 解説及び処理構築例
以下のページをご覧ください。
https://automate.sct.co.jp/knowledge/12050/