読者です 読者をやめる 読者になる 読者になる

RRTの一括録音用予約ファイル生成プログラム作成

会社でdelphiは定期的に使ってはいるものの、プログラムって、既存資産のCut & Paste というのが多いので、(基本はファイル処理だから、パターン化される)、自宅で作ってみると、相当手間取ってしまう。
参考書はpdf化してしまっているのだが、検索ができるようにOCR処理をいれたものの使いにくいなあ。
pdfは順読みなら耐えられるけど、ランダムアクセス&しおりで飛ばすというは、まどろっこしい。
google先生になっちゃうなあ。
 スケジュールファイルを柔軟に汎用的にプログラム生成するって、作ってみると大変かもしれない。今は、1日2回電源断(PCを電源タイマー操作、PCのシャットダウンはrrt側でさすがにやらせる)。電源onの開始タイミング操作もおこなっているので、予約ファイルに書いてあっても、実際には録音していない時間帯もある。
 今は汎用性がほとんどない、自分専用のプロトタイプ状態ですね。

f:id:buriburipipi2:20170325080329j:plain

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,dateUtils;

type
  TForm1 = class(TForm)
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    DateTimePicker3: TDateTimePicker;
    Label1: TLabel;
    Label2: TLabel;
    DateTimePicker4: TDateTimePicker;
    Label3: TLabel;
    DateTimePicker5: TDateTimePicker;
    DateTimePicker6: TDateTimePicker;
    DateTimePicker7: TDateTimePicker;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure DateTimePicker1Change(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

  str_date :Tdate;
  end_date :Tdate;
  wk_datetime:Tdatetime;
var
  Hour_c:  Word;
  Min_c:  Word;
  Sec_c: Word;
  MSec_c: Word;
  Hour_w:  Word;
  Min_w:  Word;
  Sec_w: Word;
  MSec_w: Word;

  Hour_s: array[1..4] of Word;
  Min_s: array[1..4] of Word;
  Sec_s: array[1..4] of Word;
  MSec_s: array[1..4] of Word;
  Hour_e: array[1..4] of Word;
  Min_e: array[1..4] of Word;
  Sec_e: array[1..4] of Word;
  MSec_e: array[1..4] of Word;
  Year_s:Word;
  Month_s:Word;
  day_s:Word;
  Year_e:Word;
  Month_e:Word;
  day_e:Word;

//  Hour02s,Min02s,Sec02s,MSec02s:Word;
//  Hour01e,Min01e,Sec01e,MSec01e:Word;
//  Hour02e,Min02e,Sec02e,MSec02e:Word;
  add_min:Word;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  F:textfile;
  buf:array[0..5000] of char;
  wStr,OffStr:string;
  atEndFlag,PrintFlag,PrintFlag_next:boolean;
  base_point:integer;

begin
//   str_date:=Date;
//   datetimePicker1.Date:=str_date;
//   DateTimePicker1.Show;
   AssignFile(F,'d:\test\text.csv');
   System.SetTextBuf(F, Buf);
   ReWrite(F);

   end_date:=datetimePicker4.Date;
   if str_date > end_date then
   begin
      end_date:=str_date +1;
      datetimePicker4.Date:=end_date;
      DateTimePicker4.Show;

   end;
   DecodeDate(Str_date,Year_s,Month_s,day_s);
   DecodeDate(end_date,Year_e,Month_e,day_e);

   DecodeTime(DateTimePicker2.time,Hour_s[1],Min_s[1],Sec_s[1],MSec_s[1]);
   DecodeTime(DateTimePicker5.time,Hour_e[1],Min_e[1],Sec_e[1],MSec_e[1]);

   DecodeTime(DateTimePicker6.time,Hour_s[2],Min_s[2],Sec_s[2],MSec_s[2]);
   DecodeTime(DateTimePicker7.time,Hour_e[2],Min_e[2],Sec_e[2],MSec_e[2]);

   DecodeTime(DateTimePicker3.time,Hour_c,Min_c,Sec_c,MSec_c);
   add_min:= (Hour_c * 60) + Min_c;
//   wk_datetime:= str_date + DateTimePicker2.time;
   wk_dateTime := EncodeDateTime(Year_s, Month_s, Day_s, Hour_s[1], Min_s[1], 0, 0);

//   # 日時,分数,フォルダ,タイトル,電源断,
//   2014/10/01 06:00:00,45,c:\rokuon,福祉政策の課題('14)_01_,0,
   wStr:='# 日時,分数,フォルダ,タイトル,電源断,';
   Writeln(F,wStr);
   atEndFlag:=False;
   base_point:=1;
   PrintFlag:=True;
   PrintFlag_next:=True;

   while (not atEndFlag) do
   begin
     DecodeTime(wk_DateTime,Hour_w,Min_w,Sec_w,MSec_w);
     OffStr:='0';
     if printFlag then
     begin
       if (Hour_e[base_point] = Hour_w) and ( (Min_e[base_point] = Min_w)) then
       begin
         PrintFlag_next:=false;
         inc(base_point);
         OffStr:='1';
       end;
     end
     else
       if (Hour_s[base_point] = Hour_w) and ( (Min_s[base_point] = Min_w)) then
       begin
         PrintFlag_next:=True;
         PrintFlag:=True;
       end;
     wStr:= FormatDateTime('yyyy/MM/DD hh:mm:ss',wk_dateTime) + ',' +
           format('%d',[add_min]) + ',' +
           'c:\rokuon' +',' +
           'tbs' + ',' +
           OffStr + ',';
     if PrintFlag then
        Writeln(F,wStr);
     PrintFlag:=PrintFlag_next;
     wk_dateTime := IncMinute(Wk_dateTime, add_min);
     if Base_Point > 2 then
        Base_Point:=1;
     if Wk_DateTime > end_date then
        atEndFlag:=True;
   end;


   Flush(F);
   CloseFile(F);

end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
     str_date := datetimePicker1.Date;

end;

end.