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