G3014_スマホ日誌データの変換
2025年2月17日
9:54
G3014_pc_and_note_data_conversion
解説
テストにはプロジェクトを使います
新しいイベント関数が生成されます
取得済みのフラグが必要です
パラメータを編集する前に、必ずプログラムを終了します
前回変換日付から、本日の手前までループを作成します
private void but_cal_conv_Click(object sender, EventArgs e)
{
DateTime dt_now = DateTime.Now;
DateTime dt;
int yy_all, mm, dd;
int now_days,days;
string fil_path;
string fil_name;
listBox1.Items.Clear();
yy_all = dt_now.Year;
mm = dt_now.Month;
dd = dt_now.Day;
now_days = (yy_all * 365) + (mm * 31) + dd;
// 未登録の場合本日を代入します
if (Prm_tbl[53] == "") Prm_tbl[53] = dt_now.ToString("yyyy/MM/dd");
dt = DateTime.Parse(Prm_tbl[53]);
while (true)
{
dt = dt.AddDays(1);
yy_all = dt.Year;
mm = dt.Month;
dd = dt.Day;
days = (yy_all * 365) + (mm * 31) + dd;
if (now_days <= days) break;
//if (0 <= DateTime.Compare(dt, dt_now)) break;
fil_name = "\\note-" + yy_all.ToString("D4") + "-" + mm.ToString("D2") + "-" + dd.ToString("D2") + ".txt";
fil_path = Prm_tbl[52] + fil_name;
if (File.Exists(fil_path) == false) continue;
listBox1.Items.Add(dt.ToString("yyyy/MM/dd"));
}
}
カレンダー更新処理を調査します
今回のデータ変換の流れ
// スマホカレンダー記録データPC変換
private void but_cal_conv_Click(object sender, EventArgs e)
{
DateTime dt_now = DateTime.Now;
DateTime dt;
int yy_all, mm, dd;
int now_days,days;
string fil_path;
string fil_path_cpy;
string fil_name;
string txt_buf;
string[] fld_tbl = new string[30];
int x, y;
string cell_name;
int th, tm;
string folder_path = Sub_nam_tbl[1] + "\\and_note";
// ディレクトリの生成
if (Directory.Exists(folder_path) == false) Directory.CreateDirectory(folder_path);
if(Directory.Exists(Prm_tbl[52]) == false)
{
msg("Prm_tbl[52] スマホバックアップフォルダが不正です");
msg2("but_cal_conv_Click()", "Prm_tbl[52] スマホバックアップフォルダが不正です","");
return;
}
Prm_tbl[0] = "カレンダー";
listBox1.Items.Clear(); // 画面消去
yy_all = dt_now.Year;
mm = dt_now.Month;
dd = dt_now.Day;
now_days = (yy_all * 365) + (mm * 31) + dd;
// 未登録の場合本日を代入します
if (Prm_tbl[53] == "") Prm_tbl[53] = dt_now.ToString("yyyy/MM/dd");
dt = DateTime.Parse(Prm_tbl[53]);
while (true)
{
dt = dt.AddDays(1);
yy_all = dt.Year;
mm = dt.Month;
dd = dt.Day;
days = (yy_all * 365) + (mm * 31) + dd;
if (now_days <= days) break;
//if (0 <= DateTime.Compare(dt, dt_now)) break;
fil_name = "\\note-" + yy_all.ToString("D4") + "-" + mm.ToString("D2") + "-" + dd.ToString("D2") + ".txt";
fil_path = Prm_tbl[52] + fil_name;
if (File.Exists(fil_path) == false) continue;
// 変換済みであることを、コピーファイルで証明します
fil_path_cpy = folder_path + fil_name;
if (File.Exists(fil_path_cpy) == true) continue; // 変換済みの場合処理しません
com_cal_prm_set(dt);
com_main_tit_dsp(); // フォームタイトル表示
dataGridView1.Rows.Clear(); // 画面消去
com_grid_dsp_main(1);
y = dataGridView1.RowCount-1;
dataGridView1.Rows.Add(); // 理由は不明ですが、ここを追加すると正常になりました
// テキストファイル読み込み
System.Text.Encoding.GetEncoding("utf-8");
using (StreamReader red = new StreamReader(fil_path))
{
while (red.EndOfStream == false)
{
txt_buf = red.ReadLine();
if (txt_buf == null) continue;
if (txt_buf == "") continue;
fld_tbl = txt_buf.Split(',');
if (fld_tbl.Length < 6) continue;
dataGridView1.Rows.Add();
++y;
if (int.TryParse(fld_tbl[3], out th) == false) th = 0;
if (int.TryParse(fld_tbl[4], out tm) == false) tm = 0;
if(0 < th || 0 < tm)
{
cell_name = Grid_form_name[0]; // 開始
dataGridView1.Rows[y].Cells[cell_name].Value = th.ToString("D2") + tm.ToString("D2");
}
cell_name = Grid_form_name[4]; // 記事
dataGridView1.Rows[y].Cells[cell_name].Value = fld_tbl[6];
if (fld_tbl.Length < 11+1) continue;
if (int.TryParse(fld_tbl[8], out th) == false) th = 0;
if (int.TryParse(fld_tbl[9], out tm) == false) tm = 0;
if (0 < th || 0 < tm)
{
cell_name = Grid_form_name[1]; // 終了
dataGridView1.Rows[y].Cells[cell_name].Value = th.ToString("D2") + tm.ToString("D2");
}
cell_name = Grid_form_name[3]; // 結果
dataGridView1.Rows[y].Cells[cell_name].Value = fld_tbl[11];
}
}
// 展開されたグリッドデータの保存
com_grid_dat_wrt();
File.Copy(fil_path, fil_path_cpy); // 変換済みのためのファイルコピー
Prm_tbl[53] = yy_all.ToString("D4") + "/" + mm.ToString("D2") + "/" + dd.ToString("D2");
// バグ修正のためのテスト前には、必ずカレンダーフォルダのバックアップを実行します
}
}
変換結果の確認
このように変換されました
スマホでは画面の制約で表示が限られますがパソコンに取り込みすれば1か月を1画面に表示することも可能です