関数のコピーペースト領域(ひな形コード)
2024年11月19日
6:43
G3011_pc_junk_cod_copy_paste
説明
グローバル領域
// 共用関数のコードは折りたたみ、見通しを良くする
// テキストファイル読み込み
public static int com_txt_tbl_red(string prm_fil_path,int prm_tbl_no,string[] prm_cst_tbl)
{
// 他のフォームでも呼び出しが必要だったため、ここに移設した
// 将来は、ライブラリ機能を調べて、そちらに移植すべきものかもしれない
// 最低でも、昔のインクルードのような機能は調べたい
// プログラム全体で共通する処理の場合、コピペして行くと、修正箇所が無限に発生するからである
int cst_tbl_max = prm_cst_tbl.Length;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
string txt_buf;
int cnt = 0;
if (File.Exists(prm_fil_path) == true)
{
using (StreamReader red = new StreamReader(prm_fil_path, enc))
{
while (true)
{
if (red.EndOfStream == true) break;
txt_buf = red.ReadLine();
// フリー書式に対応するために、ない場合は空欄
prm_cst_tbl[cnt] = "";
if(prm_tbl_no < txt_buf.Split(',').Length)
prm_cst_tbl[cnt] = txt_buf.Split(',')[prm_tbl_no];
++cnt;
if (cst_tbl_max <= cnt) break; //オーバーフロー
}
}
}
return (cnt);
}
// メッセージ
// namespace Goma_txt_db の直下 public partial class Form1 : Form
// のネストの内部に定義された関数は、private定義で、Form1の内部どこからでも利用出来る
// 手動で共用関数のような機能を追加してみた
public static void msg(String prm_msg)
{
//listBox1.Items.Add(prm_msg);
MessageBox.Show(prm_msg);
}
// ログファイル記録
public static void msg2(String prm_msg, String prm_msg2, String prm_msg3)
{
// プログラムの問題調査の為のモニタ関数
// ログファイルに記録される
// 起動先頭位置のファイルモニタの場合、パラメータ読込のエラー調査を
// するばあい、パスを外します C:ドライブにファイルが生成されます
//string fil_path = "999_err_msg.log";
string fil_path = Msg_path + "\\999_err_msg.log";
//string fil_path = Sub_nam_tbl[1] + "\\999_err_msg.log";
int yy_all, mm, dd, tim_h, tim_m;
string txt_buf;
DateTime now = DateTime.Now; // カレンダー取得
yy_all = now.Year;
mm = now.Month;
dd = now.Day;
tim_h = now.Hour;
tim_m = now.Minute;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamWriter wrt = new StreamWriter(fil_path, true, enc))
{
txt_buf = yy_all.ToString() + "/" + mm.ToString() + "/" + dd.ToString()
+ " " + tim_h.ToString() + ":" + tim_m.ToString()
+ ", (" + Msg_cnt.ToString() + ") ," + prm_msg + "," + prm_msg2 + "," + prm_msg3;
wrt.WriteLine(txt_buf);
// クローズは必要ないらしい、括弧の外に出た時点でクローズされる
// 書式を統一するか、検討する事
}
++Msg_cnt;
}
// ゲームカレンダーの再生
public static string cal_vana_get1(DateTime prm_time, int[] prm_vana_clk)
{
// vana_clk[10] 10件を定義します
string ans_cst;
int yy_all, mm, dd, th, tm, ts, yy;
long day_renban;
long gen_sec;
string youbi_cst = "";
string getu_cst = "";
long[] vday = new long[15];
int getu_th, getu_tm;
long vana_day_sec = 3456L;
long vana_th_sec = 144L;
double vana_sec;
yy_all = prm_time.Year;
mm = prm_time.Month;
dd = prm_time.Day;
th = prm_time.Hour;
tm = prm_time.Minute;
ts = prm_time.Second;
/////////////////////////////////////////////////
// 2015.8.4 00:00 1230.8.26 00:00 風曜日
// 三日月
// (24時間) 25日
// 日 3456sec (3600*24/25)
// 時 144sec
// 分 2.4sec
/////////////////////////////////////////////////
DateTime from_dt = new DateTime(2015, 8, 4);
DateTime to_dt = new DateTime(yy_all, mm, dd);
gen_sec = ((long)th * 3600L + (long)tm * 60L + (long)ts);
day_renban = (long)(to_dt - from_dt).TotalDays;
//msg2("day_renban", day_renban.ToString(), "");
///////////////////////////////////////////////////////
// 1232/8/26 (8/26 -> V日数 7*30+26-1=235L)
// 2015/8/24
// |----------------------|
// v[2] 年
// |------|
// 月
// |---|
///////////////////////////////////////////////////////
vday[0] = day_renban * 25L; // 起点からの日数
vday[1] = gen_sec / vana_day_sec; // 実日0時からの日数
vday[2] = vday[0] + vday[1]; // 合計日数
yy = (int)((vday[2] + 220L) / (long)(30 * 12)); // V年変換
//msg2(yy.ToString(), vday[2].ToString(), "");
vday[3] = (vday[2] + 220L) - (yy * 30 * 12); // V年からの日数
mm = (int)(vday[3] / 30) + 1; // V月変換
vday[4] = vday[3] - ((mm - 1) * 30); // 残り日数
dd = (int)vday[4] + 16;
if (30 < dd)
{
dd -= 30;
if (12 < mm) { mm = 1; ++yy; }
else { ++mm; }
}
//vday[5] = (gen_sec - (vday[1] * vana_day_sec)) - 0L; ;
//th = (int)(vday[5] / vana_th_sec);
//tm = (int)((vday[5] - ((long)th * vana_th_sec)) / 2.4);
vana_sec = (double)(gen_sec - (vday[1] * vana_day_sec)) - 0.0;
th = (int)(vana_sec / (double)vana_th_sec);
tm = (int)((vana_sec - (double)((long)th * vana_th_sec)) / 2.4);
//msg2(yy.ToString() + "/" + mm.ToString() + "/" + dd.ToString(), th.ToString() + ":" + tm.ToString(), "");
switch (vday[2] % 8)
{
case 0: youbi_cst = "風"; break;
case 1: youbi_cst = "氷"; break;
case 2: youbi_cst = "雷"; break;
case 3: youbi_cst = "光"; break;
case 4: youbi_cst = "闇"; break;
case 5: youbi_cst = "火"; break;
case 6: youbi_cst = "土"; break;
case 7: youbi_cst = "水"; break;
}
prm_vana_clk[0] = 0;
prm_vana_clk[1] = yy + 1230;
prm_vana_clk[2] = mm;
prm_vana_clk[3] = dd;
prm_vana_clk[4] = th;
prm_vana_clk[5] = tm;
prm_vana_clk[6] = 0;
prm_vana_clk[7] = (int)(((vday[2] / 7L)) % 12L); // 月齢コード
switch (prm_vana_clk[7])
{
case 0: getu_cst = "(o・・・・・) 三日月"; break; // 三日月
case 1: getu_cst = "(oo・・・・) 七日月"; break; // 七
case 2: getu_cst = "(ooo・・・) 上弦月"; break; // 上弦
case 3: getu_cst = "(oooo・・) 十日夜"; break; //
case 4: getu_cst = "(ooooo・) 十三夜"; break; // 十三
case 5: getu_cst = "(oooooo) 満月"; break; // 満月
case 6: getu_cst = "(・ooooo) 十六夜"; break; // 十六
case 7: getu_cst = "(・・oooo) 居待月"; break; // 居
case 8: getu_cst = "(・・・ooo) 下弦の月"; break; // 下弦
case 9: getu_cst = "(・・・・oo) 二十日余月"; break; // 20
case 10: getu_cst = "(・・・・・o) 二十六夜"; break; // 26
case 11: getu_cst = "(・・・・・・) 新月"; break; // 新月
}
///////////////////////////////////////////////////
// 2015.08.27 木曜 s-segawa 9586-3438
// 月変化残り計算が半日かかっても完成せず
// 実時間 00:00 でちょうど月変化するタイミングの
// カレンダーを計算の起点に変更することでやっと完成
///////////////////////////////////////////////////
getu_th = getu_tm = 0;
vday[6] = ((vday[2] / 7L) * 7L) + 7L; // 次の月変化ポイント計算
vday[7] = (vday[6] - vday[2]) * vana_day_sec; // 変化までの日数
vday[8] = vday[7] - (th * vana_th_sec) - tm * 2L; // 変化までのリアルタイム秒数
getu_th = (int)(vday[8] / 3600L);
getu_tm = (int)(((vday[8] - ((long)getu_th * 3600L))) / 60L);
//ans_cst = youbi_cst + " " + getu_cst + " " + getu_th.ToString("D2") + ":" + getu_tm.ToString("D2");
ans_cst = youbi_cst + " " + getu_cst;
return (ans_cst);
}
// フルパス取得
public static string get_fil_path(string prm_type)
{
string fil_path = "";
switch (prm_type)
{
case "フォルダ検索": fil_path = Prm_tbl[6] + "\\" + Prm_tbl[17]; break;
case "キーワード検索": fil_path = Sub_nam_tbl[20] + "\\" + Prm_tbl[17]; break;
}
return fil_path;
}
// 拡張子テーブルの存在検査
public static bool get_kak_find_flg(string prm_kak_cst)
{
bool ans_flg = false;
int y;
for(y=0;y< Kak_edit_tbl_kosu;y++)
{
if(prm_kak_cst == Kak_edit_tbl[y])
{
ans_flg = true; break;
}
}
return ans_flg;
}
// 拡張子から編集方法を判定する
public static string get_kak_edit_type(string prm_path)
{
string ans_edit_type = "";
string kak_cst = Path.GetExtension(prm_path); // 拡張子分離 どっと含む
int y;
for(y=0;y<Kak_edit_tbl_kosu;y++)
{
// 比較前に半角子文字に統一する
if(kak_cst.ToLower() == Kak_edit_tbl[y])
{
ans_edit_type = Kak_edit_type[y];
break;
}
}
return ans_edit_type;
}
フォーム初期化関数の直後
Goma_txt_dbにカスタマイズされた関数
private void com_cal_ken_main(int prm_key_kosu, string[] prm_key_lst)
{
// メイン画面のグリッドビューは禁止、データ更新のミスが怖い
}
private void com_cal_prm_set(DateTime prm_dt)
{
long day_lon = (prm_dt.Year * 10000) + (prm_dt.Month * 100) + prm_dt.Day;
string day_cst = day_lon.ToString();
Prm_tbl[41] = day_cst.Substring(0, 4);
Prm_tbl[42] = day_cst.Substring(4, 2);
Prm_tbl[43] = day_cst.Substring(6, 2);
Prm_tbl[40] = com_wareki_get(prm_dt.Year, prm_dt.Month, prm_dt.Day); // 和暦計算
}
// クリップボード表示
private void com_clip_bord_lst_dsp()
{
short y;
string fil_path = Sub_nam_tbl[11] + "\\000_クリップボード.txt";
if (File.Exists(fil_path) == false)
File.Copy(Sub_nam_tbl[7] + "\\000_原稿.txt", fil_path);
Clip_tbl_kosu = com_txt_tbl_red(fil_path, 0, Clip_nam); // 名称
com_txt_tbl_red(fil_path, 1, Clip_type); // タイプ
com_txt_tbl_red(fil_path, 2, Clip_tbl); // 目的物
listBox1.Items.Clear();
if (Clip_tbl_kosu == 0) return;
for (y = 0; y < Clip_tbl_kosu; y++)
{
listBox1.Items.Add(Clip_type[y]+" "+Clip_nam[y]);
}
}
// クリップボード文字列代入
// 2024.11.17 SAN (07:24) goma0099 -4487778-
// タイムスタンプは移動する
// 引き渡すパラメータは、目的物のみ
private void com_clip_bod_set(string prm_cst)
{
// 2024/11/06 (水曜日) goma0099
// グリッドタイプでも利用できるため、関数化する
string txt_buf;
//string fil_path = Sub_nam_tbl[11] + "\\" + get_txt + ".txt";
string fil_path;
//DialogResult dlg_ans;
string kak_cst;
string set_cst = prm_cst.Trim(); // 目的物、スペース削除
if (set_cst.Length <= 0) return;
else
{
if (0 < set_cst.Length)
{
// クリップボードの定義フォルダ
fil_path = Sub_nam_tbl[11] + "\\" + set_cst;
if (File.Exists(fil_path) == true)
{
kak_cst = Path.GetExtension(fil_path).ToLower();
if (kak_cst == ".txt" || kak_cst == ".TXT")
{
// クリップボード読込
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamReader red = new StreamReader(fil_path, enc))
{
txt_buf = red.ReadToEnd();
}
Clipboard.SetText(txt_buf);
this.WindowState = FormWindowState.Minimized;
}
else
{
com_doc_file_call(fil_path); // 文書を呼び出す
}
}
else
{
Clipboard.SetText(set_cst);
this.WindowState = FormWindowState.Minimized;
}
}
else
{
Clipboard.SetText(set_cst);
this.WindowState = FormWindowState.Minimized;
}
}
}
// フォームバーのタイトル表示
private void com_main_tit_dsp()
{
string[] type = new string[] { "-----------------", "メイン一覧", "フォルダツリー", "グリッドデータ", "" };
if (Prm_tbl[1].Length == 0) Prm_tbl[1] = "0"; // 未登録補正
int type_cod = int.Parse(Prm_tbl[1]);
int[] vana_clk = new int[10];
DateTime dt = DateTime.Now;
string tit_cst,getu_cst;
getu_cst = cal_vana_get1(dt, vana_clk);
tit_cst = "[" + Prm_tbl[41] + "] " + Prm_tbl[40] + "年 " + Prm_tbl[42]
+ "月 " + Prm_tbl[43] + "日 find [" + Prm_tbl[8] + "] sel [" + Prm_tbl[0] + "] sel_ans [" + Prm_tbl[8] + "] row_dat ["
+ Prm_tbl[15] + "/" + Prm_tbl[16] + "] ["
+ vana_clk[1].ToString() + "/" + vana_clk[2] + "/" + vana_clk[3]
+ " " + vana_clk[4].ToString() + ":" + vana_clk[5].ToString() + "] " + getu_cst + " [" + Prm_tbl[17] + "] ";
//+ "] path [" + Prm_tbl[5];
this.Text = tit_cst;
}
// 和暦の取得
private string com_wareki_get(int prm_yy_all, int prm_mm, int prm_dd)
{
string fil_path = Sub_nam_tbl[1] + "\\000_和暦変換.txt";
string[] wa_name = new string[50 + 1];
string[] yy_lst = new string[50 + 1];
string[] mm_lst = new string[50 + 1];
string[] dd_lst = new string[50 + 1];
//int lst_max = 50;
int lst_kosu, y;
int gen_day, chk_day; // 日連番
string wareki = "不明 0";
int yy_all, mm, dd;
lst_kosu = com_txt_tbl_red(fil_path, 0, wa_name);
lst_kosu = com_txt_tbl_red(fil_path, 1, yy_lst);
lst_kosu = com_txt_tbl_red(fil_path, 2, mm_lst);
lst_kosu = com_txt_tbl_red(fil_path, 3, dd_lst);
gen_day = (365 * prm_yy_all) + (31 * prm_mm) + prm_dd;
for (y = lst_kosu - 1; 0 <= y; y--)
{
yy_all = int.Parse(yy_lst[y]);
mm = int.Parse(mm_lst[y]);
dd = int.Parse(dd_lst[y]);
chk_day = (365 * yy_all) + (31 * mm) + dd;
if (chk_day <= gen_day)
{
wareki = wa_name[y] + " " + (prm_yy_all - yy_all + 1).ToString();
break;
}
}
return (wareki);
}
// パラメータ読み込み
private bool com_prm_red(string prm_path)
{
// 前回の操作状態を保存したテキストファイルからパラメータの読込を実行する
if (File.Exists(prm_path) == false) return false;
com_txt_tbl_red(prm_path, 0, Prm_nam_tbl);
com_txt_tbl_red(prm_path, 1, Prm_tbl);
Prm_nam_tbl[45] = "45コンピュータ名";
Prm_tbl[45] = Environment.MachineName;
Prm_nam_tbl[46] = "46ユーザ名";
Prm_tbl[46] = Environment.UserName;
com_cal_prm_set(DateTime.Now);
return (true);
}
// パラメータ書き込み
private void com_prm_wrt(string prm_path)
{
// 今回の操作状態のパラメータを次回の為に、テキストファイルに保存する
// 関数内部で定義された変数は、括弧の外に出たら全て廃棄される
// なので、同じ名称を何度でも利用できる
// 処理結果を外部と受け渡し、したい場合は、戻り値で取り出し、関数パラメータで指示する
// 戻り値はひとつしか持てないため、関数パラメータのアドレス指示を使ったり、グローバル変数を利用する
// 関数内部で変数の出自を明らかにするため
// 関数バラメータ変数の先頭には、必ず、prm_ を付ける
// 自動変数は、全て小文字で命名する
// グローバル変数は先頭に大文字を含めて、自動変数や関数パラメータと識別出来るようにしておく
// 大昔のコードのくせであり、今回のグローバル変数には Glo. が先頭に付けられるので、その後ろの
// 変数名を大文字にする必要はないのかもしれない?
int cnt = 0;
File.Delete(prm_path);
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamWriter wrt = new StreamWriter(prm_path, false, enc)) // ファイルを開く
{
for (cnt = 0; cnt < Prm_tbl_max; cnt++)
wrt.WriteLine(Prm_nam_tbl[cnt] + "," + Prm_tbl[cnt]);
}
}
private int com_get_edit_txt(string[] prm_lst, int prm_lst_tbl_max)
{
string txt_buf = richTextBox1.Text.TrimEnd(' ',' '); // 終端のスペース除外
string[] cst_tbl = new string[prm_lst_tbl_max + 1];
int x, cst_tbl_kosu;
int cnt;
// 終端のスペースは除外する
// 半角 全角 スペースで区切る
// スペースが連続する場合は、空欄が発生する
cst_tbl = txt_buf.Split(' ', ' ');
cst_tbl_kosu = cst_tbl.Length;
if (prm_lst_tbl_max < cst_tbl_kosu - 5)
{
msg("エディットボックスのキーテーブルがオーバーフローしました");
return (0);
}
// スペースの連続で空欄が発生した場合の処理
cnt = 0;
for (x = 0; x < cst_tbl_kosu; x++)
{
if (0 < cst_tbl[x].Length) { prm_lst[cnt] = cst_tbl[x]; ++cnt; }
}
return (cnt);
}
private int com_tree_click_double_click_set_dsp()
{
// フォルダツリーの選択処理
//Select_lst_ans = ""; // 新規連続中止
if (Prm_tbl[1] != "2") // 変化検出
{
}
///////////////////////////////////////////
// グリッドのデータ更新が必要です
///////////////////////////////////////////
// 開始タイトルを止めたい
Prm_tbl[1] = "2";
Prm_tbl[0] = "フォルダ検索";
com_main_tit_dsp(); // タイトル表示
com_grid_dsp_main(1);
int fil_kosu = com_fold_tree_sel(Prm_tbl[6]); // フォルダツリー選択表示
return (fil_kosu); // 直下ファイル件数
}
private bool com_tree_path_or_file_key_find(short prm_type,string prm_fold_name
,int prm_key_lst_kosu,string[] prm_key_lst)
{
// prm_type 0.フォルダ名とファイル名検索 1.テキストファイルの内部検索
// prm_fild_name
// prm_key_lst_kosu
// prm_key_lst[]
string cut_path;
int sta_path_len;
string[] cut_lst = new string[200 + 1]; // フォルダ分解テーブル
string fil_find_path;
int cut_lst_kosu,find_kosu;
int x;
string[] fil_lst = new string[1000 + 2]; // +2には意味がある 写真ファイル件数のエラーが止まった?
int fil_lst_tbl_max = 1000;
//int fil_lst_kosu;
// パス先頭から、ルートを除外する この場合 E:\ゴマ電子 ?
sta_path_len = Prm_tbl[2].Length;
cut_path = prm_fold_name.Substring(sta_path_len + 1);
// フォルダを分解し、それぞれにキーワード検索する
cut_lst = cut_path.Split('\\');
cut_lst_kosu = cut_lst.Length;
if (cut_lst_kosu == 0) return (false);
find_kosu = 0;
if(prm_type == 0) // バス名とファイル名検索
{
for (x = 0; x < cut_lst_kosu; x++)
if (com_tree_fold_file_cut_name_ken(cut_lst[x], prm_key_lst_kosu, prm_key_lst) == true) ++find_kosu;
if (0 < find_kosu) return (true); // 発見しました
// フォルダ名からはキーワードが見つからない場合
fil_find_path = Prm_tbl[2];
find_kosu = 0;
for (x = 0; x < cut_lst_kosu; x++)
{
fil_find_path += "\\" + cut_lst[x]; // パスの連結
// 網羅されたフォルダに対して配下のファイル一覧を調べて、キー検索する
// フォルダのファイル一覧取得
find_kosu = com_get_file_lst(3, fil_find_path, fil_lst_tbl_max, fil_lst, prm_key_lst_kosu, prm_key_lst);
}
}
if (prm_type == 1) // テキストファイルの内容からも検索
{
find_kosu = com_get_file_lst(4, prm_fold_name, fil_lst_tbl_max, fil_lst, prm_key_lst_kosu, prm_key_lst);
}
if (0 < find_kosu) return(true);
return (false);
}
// 対象の文字列 フォルダ名 ファイル名 テキスト行 をキーワード検索する
private bool com_tree_fold_file_cut_name_ken(string prm_cut_name,int prm_key_lst_kosu
,string[] prm_key_lst)
{
// キーワードが含まれるか検索する共通処理
if (prm_key_lst_kosu == 0) return false;
int[] find_lst = new int[prm_key_lst_kosu + 1]; // キーワード個数ぶんの整数テーブル
int find_kosu, sta, x;
for (x = 0; x < prm_key_lst_kosu; x++) find_lst[x] = 0; // 初期化
for (x = 0; x < prm_key_lst_kosu; x++)
{
if (prm_key_lst[x].Length == 0) continue;
// フォルダ名またはファイル名にキーワードが含まれるか?
sta = prm_cut_name.IndexOf(prm_key_lst[x]);
if (0 <= sta) ++find_lst[x];
}
find_kosu = 0; // 全てのキーワードが含まれたら、発見とする
for (x = 0; x < prm_key_lst_kosu; x++) if (0 < find_lst[x]) ++find_kosu;
if (find_kosu == prm_key_lst_kosu) return (true);
else return (false);
}
// テキスト形式のファイル内部をキーワード検索します
private bool com_tree_fold_file_cut_name_ken2(short prm_type
,string prm_path,string prm_fil_name,int prm_key_lst_kosu,string[] prm_key_lst)
{
// prm_type
// 3 ファイル名をキー検索
// 4 テキストファイル内部をキー検索
// キーワードが含まれるか検索する共通処理
if (prm_key_lst_kosu == 0) return false;
int[] find_lst = new int[prm_key_lst_kosu + 1]; // キーワード個数ぶんの整数テーブル
int find_kosu = 0;
int x, sta;
string txt_buf;
string fil_path = prm_path + "\\" + prm_fil_name;
if (prm_type != 3 && prm_type != 4) return false; // タイプ指定なし
for (x = 0; x < prm_key_lst_kosu; x++) find_lst[x] = 0; // 初期化
for (x = 0; x < prm_key_lst_kosu; x++)
{
if (prm_key_lst[x].Length == 0) continue;
switch(prm_type)
{
case 3:
// ファイル名にキーワードが含まれるか?
sta = prm_fil_name.IndexOf(prm_key_lst[x]);
if (0 <= sta) ++find_lst[x];
break;
case 4:
// テキストファイルの内部にキーワードが含まれるか?
switch (Path.GetExtension(prm_fil_name).ToLower())
{
case ".txt":
case ".csv":
case ".flotxt":
case ".mactxt":
if (File.Exists(fil_path) == false) break;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamReader red = new StreamReader(fil_path, enc))
{
if (red.EndOfStream == true) break;
txt_buf = red.ReadLine();
sta = txt_buf.IndexOf(prm_key_lst[x]);
if (0 <= sta) { ++find_lst[x]; break; }
}
break;
}
break;
}
}
find_kosu = 0; // 全てのキーワードが含まれたら、発見とする
for (x = 0; x < prm_key_lst_kosu; x++) if (0 < find_lst[x]) ++find_kosu;
if (find_kosu == prm_key_lst_kosu) return (true);
else return (false);
}
// フォルダ検索
private void com_tree_path_set(short prm_type,string prm_root_path, int prm_key_lst_kosu, string[] prm_key_lst)
{
// ツリービュー代入
TreeNode tn;
string[] fold_lst;
string[] cst_tbl;
int cst_kosu;
int root_cut_sta;
int fold_lst_kosu,y;
bool find_flg;
int root_path_len;
string cut_path;
Prm_tbl[0] = "フォルダ検索";
// ツリーを初期化する
treeView2.Nodes.Clear();
// 配下のフォルダ全てを取得する
fold_lst = System.IO.Directory.GetDirectories(prm_root_path, "*", System.IO.SearchOption.AllDirectories);
fold_lst_kosu = fold_lst.Length;
if (0 < prm_key_lst_kosu) // 絞り込み条件あり
{
// キーワード検索指示
for (y = 0; y < fold_lst_kosu; y++)
{
// パスまたはファイル名の中にキーワードが含まれるか
find_flg = com_tree_path_or_file_key_find(prm_type,fold_lst[y], prm_key_lst_kosu, prm_key_lst);
if (find_flg == false) fold_lst[y] = "";
}
}
// 階層の初期件数取得
cst_tbl = Prm_tbl[2].Split('\\'); // ツリー表示のルートパス
root_cut_sta = cst_tbl.Length;
for (y = 0; y < fold_lst_kosu; y++)
{
if (fold_lst[y].Length == 0) continue; // 除外されたリストをパス
root_path_len = Prm_tbl[2].Length; // 先頭パスを除外する
cut_path = fold_lst[y].Substring(root_path_len+1);
cst_tbl = cut_path.Split('\\'); // 分解
cst_kosu = cst_tbl.Length;
tn = com_tree_ken(cst_tbl, cst_kosu); // フォルダの階層をツリーに登録する
}
if (0 < prm_key_lst_kosu) treeView2.ExpandAll(); // フォルダを全て展開する
}
private TreeNode com_tree_ken(string[] prm_cst_tbl, int prm_cst_kosu)
{
// 配下のフォルダをツリーに展開するサブ処理です
// tn = tn.Nodes.Add(node_name, node_name);
// 同じ名前が使われているので、内部名称と表示名称が独立していると
// 予測し、表示情報に件数を付けるための調査をしましたが、間違いでした
// フルパスの構成に使われるのは、Textでした
// ネット検索すると、左側のバラメータは null が使われていました
// ★ null にすると、おかしくなった
// エディットキーの分割
string[] key_lst = new string[100 + 1];
int key_lst_max = 100;
int key_lst_kosu = com_get_edit_txt(key_lst, key_lst_max);
TreeNode ans_tn, tn;
int node_kosu, i;
bool find_flg;
string node_name;
int ken_no;
ans_tn = null; // 初期化しないと、未代入エラーが出る
// 親ノード検索
node_kosu = treeView2.GetNodeCount(false); // 親ノード件数
node_name = prm_cst_tbl[0]; //親ノード名称
find_flg = false;
for (i = 0; i < node_kosu; i++)
{
if (treeView2.Nodes[i].Name == node_name) // 親ノード名一致判定
{
find_flg = true;
break;
}
}
if (find_flg == true) tn = treeView2.Nodes[i]; // 親ノートハンドル取得
else
{
tn = treeView2.Nodes.Add(node_name, node_name); // 新規ノード追加
if(com_tree_fold_file_cut_name_ken(node_name, key_lst_kosu, key_lst) == true)
tn.ForeColor = Color_tbl[1];
//tn.ForeColor = Color_tbl[0]; // 色設定
}
// 配下を検索する
ken_no = 0; // フォルダの先頭位置づけ
while (true)
{
++ken_no; // 階層を進む
if (prm_cst_kosu <= ken_no) break; // オーバーフロー
node_name = prm_cst_tbl[ken_no]; // 配下ノード名取得
// キーワード検索がヒットするノードの色指定
node_kosu = tn.GetNodeCount(false); // 配下ノード件数取得
if (node_kosu == 0)
{
// 配下がひとつもないので新しく作成する
tn = tn.Nodes.Add(node_name, node_name); // 配下のハンドルにノードを追加する
if (com_tree_fold_file_cut_name_ken(node_name, key_lst_kosu, key_lst) == true)
tn.ForeColor = Color_tbl[1];
continue; // 配下のハンドルを取得して次へ進む
}
find_flg = false;
for (i = 0; i < node_kosu; i++) // 配下のノート名称を一致検索する
{
// 発見
if (tn.Nodes[i].Name == node_name) { find_flg = true; break; }
}
if (find_flg == true) tn = tn.Nodes[i]; // 発見したハンドルを取得する
else
{
tn = tn.Nodes.Add(node_name, node_name); // 配下を追加する
if (com_tree_fold_file_cut_name_ken(node_name, key_lst_kosu, key_lst) == true)
tn.ForeColor = Color_tbl[1];
}
}
ans_tn = tn;
return (ans_tn);
}
// 前回選択済みノードの展開処理 色設定
private void com_tree_select_open()
{
// 前回選択済みノードの展開処理 色設定
TreeNode tn = null;
string[] nam_lst;
int nam_lst_kosu;
int i, j, kai_kosu;
bool find_flg;
try
{
nam_lst = Prm_tbl[5].Split('\\'); // 前回保存パスを分解
nam_lst_kosu = nam_lst.Length;
for (i = 0; i < nam_lst_kosu; i++)
{
if (i == 0)
{
kai_kosu = treeView2.Nodes.Count;
find_flg = false;
for (j = 0; j < kai_kosu; j++)
{
if (treeView2.Nodes[j].Text == nam_lst[i])
{
tn = treeView2.Nodes[j]; // 名称一致
tn.Expand(); // 開く
find_flg = true;
break;
}
}
if (find_flg == false) break; // 親名称一致せず
if (tn == null) break;
}
else
{
kai_kosu = tn.Nodes.Count;
find_flg = false;
for (j = 0; j < kai_kosu; j++)
{
if (tn.Nodes[j].Text == nam_lst[i])
{
tn = tn.Nodes[j]; // 名称一致
tn.Expand(); // 開く
// 最終ブロックで名称一致の場合
if (i == nam_lst_kosu - 1) tn.ForeColor = Color_tbl[1];
// 色変更は、名称一致の代入の前ではなく後で処理する必要がある
// 第三者に説明出来るくらいに、習熟出来ると理想的である
find_flg = true;
break;
}
}
if (find_flg == false) break; // 親名称一致せず
}
if (i == nam_lst_kosu - 1 && find_flg == true)
{
// 最終ブロックで名称一致の場合
}
}
}
catch (Exception ex)
{
}
}
// ファイル一覧の取得処理 キー検索を追加する
private int com_get_file_lst(short prm_type,string prm_path,int prm_tbl_max,string[] prm_lst
, int prm_key_lst_kosu, string[] prm_key_lst)
{
// prm_type
// 0 ビュー用一覧取得
// 1 JPG 除外
// 2 JPGだけ表示
// 3 ファイル名キーワー検索 一致件数戻す
// 4 テキストファイル内部検索 一致件数戻す
// 指示されたパスの配下のファイル一覧を作成する
// 件数制限 1000件 上位の処理で指定あり
// 1.指定されたパスのファイル一覧を取得する
// 2.
// 3.
// 4.
string[] fil_lst;
string fil_name;
int fil_lst_kosu, y, jpg_cnt;
int lin = 0;
bool find_flg;
bool key_prm_umu = false;
try
{
if (0 < prm_key_lst_kosu && prm_key_lst != null) key_prm_umu = true; // キーワード検索あり
// 配下フォルダのファイルは含まない
fil_lst = System.IO.Directory.GetFiles(prm_path, "*.*", System.IO.SearchOption.TopDirectoryOnly);
fil_lst_kosu = fil_lst.Length;
if (fil_lst_kosu <= 0) return (0);
fil_lst_kosu = fil_lst.Length;
for (y = 0; y < fil_lst_kosu; y++)
{
// パスを除外し、ファイル名だけにする
fil_name = Path.GetFileName(fil_lst[y]);
fil_lst[y] = fil_name; // ファイル名だけを再度保存する
}
// prm_type = 2 JPG を残す
jpg_cnt = 0;
for (y = 0; y < fil_lst_kosu; y++)
{
if (Path.GetExtension(fil_lst[y].ToLower()) == ".jpg")
{
++jpg_cnt;
if (prm_type == 0 || prm_type == 1) fil_lst[y] = ""; // JPGを削除
}
else
{
if (prm_type == 2) fil_lst[y] = ""; // JPGではないファイルを削除
}
}
lin = 0;
// 件数のみ、ほしい場合のため、テーブルのパラメータにnullを指示すると前段で受け取り変数を準備する必要がありません
if (prm_lst != null)
{
// 最終のリスト一覧、移し替え
for (y = 0; y < fil_lst_kosu; y++)
{
if (fil_lst[y].Length == 0) continue; // 空欄リストは除外する
// キーワードの絞り込みがあるか判定する
if (key_prm_umu == true)
{
// キーテーブル件数があり、テーブルアドレス指定もある
find_flg = com_tree_fold_file_cut_name_ken2(prm_type, prm_path, fil_lst[y], prm_key_lst_kosu, prm_key_lst);
if (find_flg == true)
{
prm_lst[lin] = fil_lst[y];
++lin;
}
}
else
{
// キーワード絞り込みなし 無条件で代入する
prm_lst[lin] = fil_lst[y];
++lin;
}
if (prm_tbl_max < lin) break; //オーバーフロー
}
// リストビュー要求の場合、写真件数を後ろに追加する
if (prm_type == 0 && 0 < jpg_cnt && lin < prm_tbl_max)
{
prm_lst[lin] = "写真ファイル件数=" + jpg_cnt.ToString();
++lin;
}
}
else lin = fil_lst_kosu; // 件数のみ戻す
}
catch (Exception ex)
{
}
return (lin);
}
// レコードテキスト対象データ有無判定
private bool com_get_red_txt_fil_upd_chk()
{
string main_name = Prm_tbl[0];
string dat_path = Fil_nam_tbl[2];
bool find_flg = false;
string txt_buf;
msg2(main_name, Fil_nam_tbl[2], "");
if (File.Exists(dat_path) == false) return find_flg;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamReader red = new StreamReader(dat_path, enc))
{
while (true)
{
if (red.EndOfStream == true) break;
txt_buf = red.ReadLine();
if(-1 < txt_buf.IndexOf(main_name))
{
find_flg = true;
break;
}
}
}
return find_flg;
}
// フローデータのデフォルトファイル生成
private void com_flo_dat_default_wrt(string prm_fil_path)
{
int x;
// 初期化
Form4.Flo_moj_tbl[0] = "";
for (x = 0; x < Form4.Flo_dat_xtbl_max; x++) Form4.Flo_dat_tbl[0,x] = 0;
Form4.Flo_dat_kosu = 1;
// デフォルトバラメータ
Form4.Flo_dat_tbl[0, 0] = 1; // 識別データ
Form4.Flo_dat_tbl[0, 1] = 11; // フォントサイズ
Form4.Flo_dat_tbl[0, 2] = 3; // 文字色番号
Form4.Flo_dat_tbl[0, 3] = 16; // X移動単位
Form4.Flo_dat_tbl[0, 4] = 20; // Y移動単位
for (x = 0; x < Form4.Flo_lin_xtbl_max; x++) Form4.Flo_lin_tbl[0, x] = 0;
Form4.Flo_lin_kosu = 1;
Form4.Flo_lin_tbl[0, 0] = 100; // 識別データ
Form4.flo_dat_wrt(prm_fil_path);
}
// 選択されたフォルダのファイル一覧を表示する
private int com_fold_tree_sel(string prm_gen_path)
{
// キーワードが入力されていたら、絞り込みする?
// ファイル一覧取得
string fild_path = Prm_tbl[6]; // 現在フルパス
string[] fil_lst = new string[1000 + 2];
int fil_lst_tbl_max = 1000;
string cell_name;
int fil_lst_kosu = 0;
int y, lin;
string[] key_lst = new string[100 + 1];
int key_lst_max = 100;
int key_kosu;
dataGridView1.Rows.Clear(); // 画面消去0
// エディットキーの分割
key_kosu = com_get_edit_txt(key_lst, key_lst_max);
if (0 < key_kosu)
{
// フォルダ検索中の場合、ファイル名も絞り込みする
switch(Prm_tbl[11])
{
case "FOLD_KEN":
fil_lst_kosu = com_get_file_lst(3, fild_path, fil_lst_tbl_max, fil_lst, key_kosu, key_lst);
break;
case "KEY_KEN":
fil_lst_kosu = com_get_file_lst(4, fild_path, fil_lst_tbl_max, fil_lst, key_kosu, key_lst);
break;
}
}
else
{
// 現在フォルダのファイル一覧取得
fil_lst_kosu = com_get_file_lst(0, fild_path, fil_lst_tbl_max, fil_lst, 0, null);
if (fil_lst_kosu == 0) return (0);
}
// グリッド一覧にファイル名を代入
lin = 0;
cell_name = Grid_form_name[0];
for (y = 0; y < fil_lst_kosu; y++)
{
if (fil_lst[y] == "") continue;
dataGridView1.Rows.Add();
dataGridView1.Rows[lin].Cells[cell_name].Value = fil_lst[y];
if(lin == 0) Prm_tbl[17] = fil_lst[y]; // 先頭ファイルを対象とする
++lin;
}
return (lin); // 直下ファイルの件数
}
// 現在未使用であるが、今後ニーズがあるかもしれないので、コードは残しておく
private void com_tree_node_color_set()
{
// 現在未使用であるが、今後ニーズがあるかもしれないので、コードは残しておく
int i;
//TreeNode tn;
string gen_name;
for (i = 0; i < Grid_nam_kosu; i++)
{
gen_name = treeView1.Nodes[i].Text;
if (gen_name == Grid_nam[i]) treeView1.Nodes[i].ForeColor = Color_tbl[1]; // 色指定
else treeView1.Nodes[i].ForeColor = Color_tbl[0]; // 色指定
}
}
// グリッド表示メイン
private void com_grid_dsp_main(short prm_type)
{
// prm_type 0:レコード定義 1:グリッドデータ入力
Prm_tbl[47] = prm_type.ToString();
// グリッド表示メイン
int main_cod = int.Parse(Prm_tbl[1]);
string main_name = Prm_tbl[0];
com_grid_form_red(prm_type,dataGridView1); // フォーム読込
if(prm_type == 0)
{
com_grid_dat_red(0);
}
else
{
switch(main_cod)
{
case 1: // グリッド一覧
com_grid_dat_red(1); // データ展開
break;
case 2: // フォルダツリー
break;
}
}
}
// グリッドビューのファイル一覧で、テキストファイルがクリックされたとき
private void com_grid_on_txt_view()
{
// その内容を、テキスト内容のカラムに展開する
string fil_path, cell_name, txt_buf;
int lin, lin_max;
int gen_column_no = int.Parse(Prm_tbl[15]);
string main_mod_cst = Prm_tbl[1];
string sel_txt_name = Prm_tbl[17];
string[] cst_tbl = new string[20 + 1];
bool type_chk = false;
if (Prm_tbl[0] == "フォルダ検索") type_chk = true;
if (Prm_tbl[0] == "キーワード検索") type_chk = true;
if (type_chk == false) return;
if (sel_txt_name == null) return; // ファイル名空白
if (gen_column_no != 0) return; // 0列ではない
if(sel_txt_name.IndexOf(".") == -1) return; // ドットを含まない、ファイル名でない
cst_tbl = sel_txt_name.Split('.');
if (cst_tbl[0] == null) return;
if (cst_tbl[1] == null) return;
if (cst_tbl[1] != "txt" && cst_tbl[1] != "TXT") return;
// テキストパスの連結
fil_path = Prm_tbl[6] + "\\" + sel_txt_name;
if(Prm_tbl[0] == "キーワード検索")
fil_path = Sub_nam_tbl[20] + "\\" + sel_txt_name;
//dataGridView1.ReadOnly = false;
lin_max = dataGridView1.RowCount;
// 前回ビューデータをクリアする
cell_name = Grid_form_name[1]; // 代入先column名称
for (lin = 0; lin < lin_max; lin++)
dataGridView1.Rows[lin].Cells[cell_name].Value = "";
lin = 0;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamReader red = new StreamReader(fil_path, enc))
{
while (red.EndOfStream == false)
{
txt_buf = red.ReadLine();
if (lin_max <= lin + 1) dataGridView1.Rows.Add();
dataGridView1.Rows[lin].Cells[cell_name].Value = txt_buf;
++lin;
}
}
//dataGridView1.ReadOnly = true;
}
// グリッドの書式を読込している GFM_タイトル.txt がフォーム定義
public static void com_grid_form_red(short prm_type,DataGridView prm_grid)
{
// prm_type 0:レコード定義 1:グリッドデータ入力
// グリッドの書式を読込している GFM_タイトル.txt がフォーム定義
// GFM_タイトル.txt の編集は GFM_GFM.txt を使って行う
// 書式はテキスト形式ANSIで保存されている
string fil_path;
int x;
int main_cod = int.Parse(Prm_tbl[1]);
string grid_tit = "";
//int grid_edit_mod = 0;
//if (Prm_tbl[47] == "1") grid_edit_mod = 1;
prm_grid.Rows.Clear(); // 画面消去
prm_grid.Columns.Clear();
// メインモードでグリッドフォームを自動変更する
if (main_cod == 1) grid_tit = Prm_tbl[0]; // 選択されたタイトル
if (main_cod == 2) grid_tit = "フォルダ検索"; // 強制タイトル
if (grid_tit.Length == 0) return; // タイトルが無効です
if(prm_type == 0)
{
// グリッドフォームを編集するモード
fil_path = Sub_nam_tbl[5] + "\\rectxt.rectxt";
if (File.Exists(fil_path) == false) return;
}
else
{
// 通常のデータを編集するモード
fil_path = Sub_nam_tbl[5] + "\\" + grid_tit + ".rectxt";
if (File.Exists(fil_path) == false) return;
}
Grid_form_kosu = com_txt_tbl_red(fil_path, 0, Grid_form_name);
if (Grid_form_kosu == 0) return;
com_txt_tbl_red(fil_path, 1, Grid_form_len);
com_txt_tbl_red(fil_path, 2, Grid_form_ime);
com_txt_tbl_red(fil_path, 3, Grid_form_edit_mod); // 1:編集禁止
com_txt_tbl_red(fil_path, 4, Grid_form_dsp_mod); // 通貨など
com_txt_tbl_red(fil_path, 5, Grid_form_cell);
com_txt_tbl_red(fil_path, 6, Grid_form_tiptxt);
prm_grid.ColumnCount = Grid_form_kosu;
for (x = 0; x < Grid_form_kosu; x++)
{
prm_grid.Columns[x].HeaderText = Grid_form_name[x];
prm_grid.Columns[x].Name = Grid_form_name[x];
prm_grid.Columns[x].Width = 8 * int.Parse(Grid_form_len[x]);
// 編集禁止
if (Grid_form_ime[x] == "なし") prm_grid.Columns[x].ReadOnly = true;
if(Grid_form_dsp_mod[x] == "通貨")
{
prm_grid.Columns[x].DefaultCellStyle.Format = "c";
//msg(Grid_form_dsp_mod[i]);
}
// カラム単位での並べ替えを禁止する
prm_grid.Columns[x].SortMode = DataGridViewColumnSortMode.NotSortable;
prm_grid.Columns[x].ToolTipText = Grid_form_tiptxt[x];
}
// ネット検索で探した、カラムヘッダーの色変更、★ しかし変化しない
prm_grid.ColumnHeadersDefaultCellStyle.BackColor = Color.Cyan;
}
private string com_grid_dat_path_set()
{
string def_path = Sub_nam_tbl[9] + "\\PATH_" + Prm_tbl[0] + ".txt";
string txt_buf;
string[] cut_lst = new string[20 + 1];
int cut_lst_kosu,y;
string ans_cst;
string root_path = "";
string sub_type = "";
string fil_type = "";
string plus_type = "";
string sta_name = "";
string sub_name = "";
string fil_name = "";
string plus_name = "";
//msg2(def_path, "", "");
if (File.Exists(def_path) == false)
{
msg2("パス定義が存在しません", def_path, "");
return ("");
}
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamReader red = new StreamReader(def_path, enc))
{
while (true)
{
if (red.EndOfStream == true) break;
txt_buf = red.ReadLine();
cut_lst = txt_buf.Split(',');
cut_lst_kosu = cut_lst.Length;
for(y=0;y<cut_lst_kosu;y++)
{
if (cut_lst[y] == "データパス") root_path = cut_lst[1];
if (cut_lst[y] == "パス書式") sub_type = cut_lst[1];
if (cut_lst[y] == "ファイル書式") fil_type = cut_lst[1];
if (cut_lst[y] == "区切り") plus_type = cut_lst[1];
if (cut_lst[y] == "ファイル先頭") sta_name = cut_lst[1];
}
}
}
if (root_path.Length == 0) return("");
if (sub_type.Length == 0) return ("");
if (fil_type.Length == 0) return ("");
if (plus_type.Length == 0) return ("");
if (sta_name.Length == 0) return ("");
plus_name = "-";
if(plus_name == "アンダー") plus_name = "_";
if (sub_type == "マ") sub_name = "MST"; // マスター属性を追加します
if (sub_type == "年") sub_name = Prm_tbl[41];
if (sub_type == "月") sub_name = Prm_tbl[41] + plus_name + Prm_tbl[42];
if (sub_type == "日")
sub_name = Prm_tbl[41] + plus_name + Prm_tbl[42] + plus_name + Prm_tbl[43];
if (sub_name == "") return ("");
// マスター属性を追加します
if (fil_type == "マ") fil_name = sta_name + ".txt";
if (fil_type == "年") fil_name= sta_name + plus_name + Prm_tbl[41]+".txt";
if (fil_type == "月") fil_name = sta_name + plus_name + Prm_tbl[41]
+plus_name+ Prm_tbl[42]+".txt";
if (fil_type == "日") fil_name = sta_name + plus_name + Prm_tbl[41]
+ plus_name + Prm_tbl[42]+plus_name + Prm_tbl[43] + ".txt";
if (fil_name == "") return ("");
ans_cst = root_path + "\\" + sub_name;
Directory.CreateDirectory(ans_cst);
ans_cst += "\\" + fil_name;
//msg2(ans_cst,"","");
return (ans_cst);
}
private void com_grid_dat_red(short prm_type)
{
// prm_type 0:レコード定義 1:グリッドデータ入力
// グリッド形式で保存されたデータを読込している
//msg("com_grid_dat_red()");
dataGridView1.Rows.Clear(); // 画面消去
string main_cst = Prm_tbl[0]; // メインタイトル
string dat_fil_path;
string[] cst_tbl = new string[200 + 1];
int cst_kosu, x,y,dsp_cod;
string txt_buf;
string cell_name;
string main_name = Prm_tbl[0];
if (prm_type == 0)
{
// データベース定義書式の編集
dat_fil_path = Sub_nam_tbl[5]+"\\"+ main_name + ".rectxt";
}
else
{
dat_fil_path = com_grid_dat_path_set();
// 普通のデータ処理
//t_fil_path = Sub_nam_tbl[1] + "\\" + grid_tit + ".txt";
}
Prm_tbl[18] = dat_fil_path; // グリッド表示したデータテキスト
// データがそんざいしなくても進むか? ダメ Prm_tbl[18] をさきに処理する
if (File.Exists(dat_fil_path) == false) return;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamReader red = new StreamReader(dat_fil_path, enc))
{
y = 0;
while (true)
{
if (red.EndOfStream == true) break;
txt_buf = red.ReadLine();
dataGridView1.Rows.Add();
cst_tbl = txt_buf.Split(',');
cst_kosu = cst_tbl.Length; // 分解配列件数
if (cst_kosu == 0) continue;
for (x = 0; x < Grid_form_kosu; x++)
{
cell_name = Grid_form_name[x];
// ★ カラム方向に未入力のデータがある場合、パスしないとエラーになる
if (cst_tbl[x] == "") continue;
dsp_cod = com_grid_cell_dsp_cod(Grid_form_dsp_mod[x]);
switch(dsp_cod)
{
case 1: // 小数
dataGridView1.Rows[y].Cells[cell_name].Value = double.Parse(cst_tbl[x]);
break;
case 2: // 通貨
dataGridView1.Rows[y].Cells[cell_name].Value = int.Parse(cst_tbl[x]);
break;
default:
dataGridView1.Rows[y].Cells[cell_name].Value = cst_tbl[x];
break;
}
}
++y;
}
}
}
private int com_grid_cell_dsp_cod(string prm_dsp_mod)
{
int ans_cod = 0;
if (prm_dsp_mod == "小数") ans_cod = 1;
if (prm_dsp_mod == "通貨") ans_cod = 2;
if (prm_dsp_mod == "CLP") ans_cod = 3;
return (ans_cod);
}
// グリッド形式ファイル書き込み
private void com_grid_dat_wrt()
{
string dat_path = Prm_tbl[18];
if (dat_path.Length == 0) return; // グリッド対象のファイルなし
if(Path.GetExtension(dat_path).ToLower() == ".rectxt")
{
// レコード書式が対象になった場合
if(com_get_red_txt_fil_upd_chk() == true)
{
msg("レコード書式は変更出来ません 既存データが破壊されます");
return;
}
}
//if (File.Exists(dat_path) == false) return; // ファイルがなくても書き込みする
int lin_kosu = dataGridView1.Rows.Count-1;
if (lin_kosu == 0) return;
int column_kosu = dataGridView1.Columns.Count;
string txt_buf;
string cell_name;
int dsp_cod;
int x, y, find_cnt, lin_end;
double dbl_dat;
int int_dat;
short wrt_cnt = 0;
DateTime dt = DateTime.Now;
// 有効行数を確認します
lin_end = 0;
for(y = 0; y < lin_kosu; y++)
{
find_cnt = 0;
for (x = 0; x < column_kosu; x++)
{
cell_name = Grid_form_name[x];
dsp_cod = com_grid_cell_dsp_cod(Grid_form_dsp_mod[x]);
// ★ カラム方向に未入力のデータがある場合、パスしないとエラーになる
if (dataGridView1.Rows[y].Cells[cell_name].Value == null) continue;
switch(dsp_cod)
{
case 0: // 文字
if ((string)dataGridView1.Rows[y].Cells[cell_name].Value != "") ++find_cnt;
break;
case 1: // 小数
if ((double)dataGridView1.Rows[y].Cells[cell_name].Value != 0.0) ++find_cnt;
break;
case 2: // 通貨
if ((int)dataGridView1.Rows[y].Cells[cell_name].Value != 0) ++find_cnt;
break;
}
}
if (0 < find_cnt) lin_end = y+1;
}
if (lin_end == 0) return; // 有効なデータがありません
// 処理をシンプルにする為、グリッドテーブル全体を書き込みします
File.Delete(dat_path);
Encoding enc = Encoding.GetEncoding("Shift_JIS");
using (StreamWriter wrt = new StreamWriter(dat_path, false, enc)) // 前回を無視してゼロ行から保存
{
for (y = 0; y < lin_end; y++)
{
txt_buf = "";
for(x=0; x<column_kosu; x++)
{
cell_name = Grid_form_name[x];
dsp_cod = com_grid_cell_dsp_cod(Grid_form_dsp_mod[x]);
if (0 < x) txt_buf += ","; // 先にカンマを代入する必要がある
// ★ カラム方向に未入力のデータがある場合、パスしないとエラーになる
if (dataGridView1.Rows[y].Cells[cell_name].Value == null) continue;
switch (dsp_cod)
{
case 0: // 文字
txt_buf += (string)dataGridView1.Rows[y].Cells[cell_name].Value;
break;
case 1: // 小数
dbl_dat = (double)dataGridView1.Rows[y].Cells[cell_name].Value;
txt_buf += dbl_dat.ToString();
break;
case 2: // 通貨
int_dat = (int)dataGridView1.Rows[y].Cells[cell_name].Value;
txt_buf += int_dat.ToString();
break;
}
}
wrt.WriteLine(txt_buf);
++wrt_cnt;
}
}
if(0 < wrt_cnt)
{
// グリッド 保存履歴作成
using (StreamWriter wrt = new StreamWriter(Fil_nam_tbl[2], false, enc)) // 前回を無視してゼロ行から保存
{
txt_buf = Prm_tbl[0] + "," + dat_path + ","
+ dt.Year.ToString("D4") + ","+ dt.Month.ToString("D2") + "," + dt.Day.ToString("D2") + ","
+ dt.Hour.ToString("D2") + "," + dt.Minute.ToString("D2");
wrt.WriteLine(txt_buf);
}
}
}
private void com_grid_dat_wrt2()
{
// グリッド形式のデータを保存している
Encoding enc = Encoding.GetEncoding("Shift_JIS");
string main_cst = Prm_tbl[0]; // メインタイトル
string fil_path;
int lin, x;
int lin_kosu;
string cell_name, txt_buf;
if (main_cst == "請求書明細")
{
fil_path = Sub_nam_tbl[1] + "\\請求書明細.txt";
File.Delete(fil_path);
StreamWriter wrt = new StreamWriter(fil_path, false, enc); // ファイルを開く
lin_kosu = dataGridView1.Rows.Count;
for (lin = 0; lin < lin_kosu; lin++)
{
txt_buf = "";
for (x = 0; x < Grid_form_kosu; x++)
{
cell_name = Grid_form_name[x];
txt_buf += (string)dataGridView1.Rows[lin].Cells[cell_name].Value;
if (x < Grid_form_kosu - 1) txt_buf += ",";
}
wrt.WriteLine(txt_buf);
}
wrt.Close(); // ファイルを閉じる
}
}
private string com_cell_get_abc(string prm_cell_name)
{
// エクセルのセル指定 AB50 とかを ABに分解している
int len, i;
string m;
byte[] byte_tbl = new byte[10];
string ans_cst = "";
len = prm_cell_name.Length;
for (i = 0; i < len; i++)
{
m = prm_cell_name.Substring(i, 1);
byte_tbl = Encoding.ASCII.GetBytes(m);
if ('A' <= byte_tbl[0] && byte_tbl[0] <= 'Z') ans_cst += m;
}
return (ans_cst);
}
private string com_cell_get_123(string prm_cell_name)
{
// エクセルのセル指定 AB50 とかを 50に分解している
int len, i;
string m;
byte[] byte_tbl = new byte[10];
string ans_cst = "";
len = prm_cell_name.Length;
for (i = 0; i < len; i++)
{
m = prm_cell_name.Substring(i, 1);
byte_tbl = Encoding.ASCII.GetBytes(m);
if ('0' <= byte_tbl[0] && byte_tbl[0] <= '9') ans_cst += m;
}
return (ans_cst);
}
private void com_excel_cnv_wrt()
{
// 請求書明細をエクセル変換するサンプルコードである
// Fil_nam_tbl[20]
// Sub_nam_tbl[21]
// エクセル変換実行
//Fil_nam_tbl[0].Format("%s\\000_EXCEL変換ファイル.txt", Sys_prg_cst_tbl[1]);
//Fil_nam_tbl[1].Format("%s\\000_EXCEL変換セル.txt", Sys_prg_cst_tbl[1]);
Encoding enc = Encoding.GetEncoding("Shift_JIS");
string fil_cnv_path = Sub_nam_tbl[1] + "\\000_EXCEL変換ファイル.txt";
string cell_cnv_path = Sub_nam_tbl[1] + "\\000_EXCEL変換セル.txt";
string txt_buf;
int lin, lin_kosu, x;
string cell_name, cell_cell;
string cell_abc;
int cell_123;
File.Delete(fil_cnv_path);
File.Delete(cell_cnv_path);
StreamWriter wrt = new StreamWriter(fil_cnv_path, false, enc); // ファイルを開く
wrt.WriteLine("入力出力,出力");
txt_buf = Sub_nam_tbl[1] + "\\" + "モバイル納品書.xlsx," + Sub_nam_tbl[1] + "\\" + "2022-04-30-モバイル納品書.xlsx";
wrt.WriteLine(txt_buf);
wrt.Close(); // ファイルを閉じる
//セル代入,U6,テスト文字
//セル代入, U7,1580
StreamWriter wrt2 = new StreamWriter(cell_cnv_path, false, enc); // ファイルを開く
lin_kosu = dataGridView1.Rows.Count;
for (lin = 0; lin < lin_kosu; lin++)
{
for (x = 0; x < Grid_form_kosu; x++)
{
cell_name = Grid_form_name[x];
cell_cell = Grid_form_cell[x];
cell_abc = com_cell_get_abc(cell_cell);
cell_123 = int.Parse(com_cell_get_123(cell_cell));
cell_123 += lin;
txt_buf = "セル代入,"
+ cell_abc + cell_123.ToString() + ","
+ dataGridView1.Rows[lin].Cells[cell_name].Value
+ ","
+ ","
+ ",";
wrt2.WriteLine(txt_buf);
}
}
wrt2.Close(); // ファイルを閉じる
}
private void com_hash_key_main(int prm_key_kosu, string[] prm_key_lst)
{
string[] fil_lst;
int fil_lst_kosu, x, y, lin;
string[] cst_tbl;
string fil_nam;
string cell_name;
Prm_tbl[0] = "キーワード検索";
com_grid_form_red(1,dataGridView1); // フォーム読込
// Sub_nam_tbl[10] にルートフォルダのパスが代入されている
// 配下のファイルを全て配列に取得する
fil_lst = System.IO.Directory.GetFiles(Sub_nam_tbl[20], "*.txt", System.IO.SearchOption.AllDirectories);
fil_lst_kosu = fil_lst.Length;
// パスを除外し、ファイル名だけにする
for (y = 0; y < fil_lst_kosu; y++)
{
cst_tbl = fil_lst[y].Split('\\'); // フォルダをバラバラに分割し配列に代入する
fil_nam = cst_tbl[cst_tbl.Length - 1]; // 最後の要素にファイル名が残る
fil_lst[y] = fil_nam; // ファイル名だけを再度保存する
}
for (x = 0; x < prm_key_kosu; x++) // キーの組み合わせループ
{
for (y = 0; y < fil_lst_kosu; y++) // ファイル名ループ
{
if (fil_lst[y].Length == 0) continue; // ファイル名が空の場合パスする
// ファイル名にキーが含まれていなければ検出し、空にする
if (fil_lst[y].IndexOf(prm_key_lst[x]) == -1) fil_lst[y] = "";
}
}
lin = 0;
for (y = 0; y < fil_lst_kosu; y++)
{
if (fil_lst[y].Length == 0) continue;
dataGridView1.Rows.Add();
cell_name = Grid_form_name[0];
dataGridView1.Rows[lin].Cells[cell_name].Value = fil_lst[y];
++lin;
}
}
// 文書リンク
private void com_doc_add_main()
{
// 新しい文書リンク処理
// 名称が空欄の場合、ノード名を使う
Prm_tbl[0] = "フォルダ検索";
string[] key_lst = new string[100 + 1];
int key_lst_max = 100;
int key_kosu = com_get_edit_txt(key_lst, key_lst_max);
if (1 < key_kosu) { msg("スペースで区切られたタイトルは使えません"); return; }
// 名称指示がない場合、ノード名を採用する
if (key_kosu == 0) { key_kosu = 1; key_lst[0] = Prm_tbl[7]; }
Prm_tbl[10] = key_lst[0];
Form2 form2 = new Form2("<<文書リンク>>",key_lst[0]); // 下位フォーム呼び出し準備
form2.ShowDialog(); // 下位フォーム呼び出し実行
if (Select_lst_ans.Length == 0)
{
msg("中止されました");
return; // キャンセル
}
com_doc_add_main2(Prm_tbl[10], Select_lst_ans);
}
// 文書リンク2
private void com_doc_add_main2(string prm_key_cst,string prm_kak_cst)
{
string genko_path;
// 選択された文書のフルパスを構成する
string new_fil_path = Prm_tbl[6] + "\\" + prm_key_cst + prm_kak_cst;
if (File.Exists(new_fil_path) == true)
{
com_doc_file_call(new_fil_path); // すぐ文書を開く
//msg("すでに存在する文書です 中止します");
return;
}
// フローはレコード形式なので、新規ファイル生成関数が必要となる
switch (prm_kak_cst)
{
case ".flotxt":
// 原稿はなく、初期レコードを生成する方式
com_flo_dat_default_wrt(new_fil_path);
break;
default:
genko_path = com_doc_genko_ken(prm_key_cst, prm_kak_cst);
if (genko_path.Length == 0 || File.Exists(genko_path) != true)
{
msg("原稿ファイルがありません 中止します [ " + genko_path + " ]");
return;
}
// 新しい文書
File.Copy(genko_path, new_fil_path, true);
break;
}
richTextBox1.Text = "";
com_doc_file_call(new_fil_path); // すぐ文書を開く
// コンテキストメニューの階層に登録しないのは、文書メンバーを
// テキストで編集したい為です。
// treeView2.ExpandAll();
}
private void com_doc_file_call(string prm_file_path)
{
string get_file_path = prm_file_path.Replace("\r", "").Replace("\n", "");
string txt_path = "";
string txt_buf;
int call_cnt = 0;
Encoding enc = Encoding.GetEncoding("Shift_JIS");
short y;
char[] cha_tbl = get_file_path.ToCharArray();
string ans_cst;
// 生成時の処理を簡略化したため、コロン、カンマ、ドットの3種類を全てアンダーバーに変換しています
// これは使えない
// cut_lst = prm_file_path.Split(':', '\\', '.');
// 下記の処理、複雑になったがフォルダ名にアンダーバーやドットが含まれる場合があるので
// 身の処理が必要でした。
// 復元の時、先頭ブロックはコロンで接続します、終端ブロックはドットで接続します
for (y=0;y<cha_tbl.Length;y++)
{
if (cha_tbl[y] == ':') cha_tbl[y] = '_';
if (cha_tbl[y] == '\\') cha_tbl[y] = '_';
if (cha_tbl[y] == '.') cha_tbl[y] = '_';
}
ans_cst = new string(cha_tbl);
txt_path = Sub_nam_tbl[10] + "\\" + ans_cst + ".txt"; // ルート代入
if (File.Exists(txt_path) == true)
{
using (StreamReader red = new StreamReader(txt_path, enc))
{
txt_buf = red.ReadLine();
}
call_cnt = int.Parse(txt_buf);
++call_cnt; // 回数加算
File.Delete(txt_path);
using (StreamWriter wrt = new StreamWriter(txt_path, false, enc)) // 頻度ファイル更新
{
wrt.WriteLine(call_cnt.ToString());
}
}
else
{
using (StreamWriter wrt = new StreamWriter(txt_path, false, enc)) // 頻度ファイル新規生成
{
wrt.WriteLine("1");
}
}
// 拡張子判定
switch(Path.GetExtension(get_file_path).ToLower())
{
case ".txt":
case ".rectxt":
System.Diagnostics.Process.Start("NOTEPAD.EXE", get_file_path);
break;
case ".flotxt":
// 下位フォーム呼び出し準備
Form4 form4 = new Form4(get_file_path,"");
form4.ShowDialog(); // 下位フォーム呼び出し実行
break;
case ".mactxt":
// 下位フォーム呼び出し準備
Form5 form5 = new Form5(get_file_path, Prm_tbl[17]);
form5.ShowDialog(); // 下位フォーム呼び出し実行
break;
default:
System.Diagnostics.Process.Start("EXPLORER.EXE", get_file_path);
break;
}
}
private string com_doc_genko_ken(string prm_key_cst,string prm_kak_cst)
{
string[] sub_lst;
int sub_lst_max, x;
string ken_path, tmp_path, chk_path, genko_path;
// 原稿を検索する
// フォルダルートの作成 下層から逆順に検索し原稿ファイルを見つける
// そうすることで、配下のフォルダは共通する原稿を利用できる
string genko_fil_nam = "000_原稿" + Select_lst_ans;
genko_path = "";
ken_path = Prm_tbl[6]; // 選択されたフルパス
while (true)
{
if (ken_path == Prm_tbl[2]) break; // ルートに到着
sub_lst = ken_path.Split('\\'); // 経路分解
sub_lst_max = sub_lst.Length;
tmp_path = "";
for (x = 0; x < sub_lst_max; x++)
{
if (x == sub_lst_max - 1) ken_path = tmp_path; // 階層をひとつ減らしたパスの保存
if (0 < x) tmp_path += "\\";
tmp_path += sub_lst[x];
}
// 原稿を判定する
chk_path = tmp_path + "\\" + genko_fil_nam;
//msg(chk_path);
if (File.Exists(chk_path) == true) { genko_path = chk_path; break; }
}
if (genko_path.Length == 0)
{
// フォルダを検索して見つからない場合
chk_path = Sub_nam_tbl[7] + "\\" + genko_fil_nam;
if (File.Exists(chk_path) == true) genko_path = chk_path;
}
return genko_path;
}
private void com_fold_add_main()
{
// 開始タイトルを止めたいが ここではない
Prm_tbl[0] = "フォルダ検索";
// エディットボックスの文字を使う
// 文書リンク
//string[] key_lst = new string[100 + 1];
//int key_lst_max = 100;
//int key_kosu = com_get_edit_txt(key_lst, key_lst_max);
if (Prm_tbl[10].Length == 0) { msg("名称がありません"); return; }
//msg(Prm_tbl[10]);
string new_path = Prm_tbl[6] + "\\" + Prm_tbl[10];
if (Directory.Exists(new_path) == true) { msg("同じフォルダ名があります 中止します"); return; }
Directory.CreateDirectory(new_path);
TreeNode tn = treeView2.SelectedNode; // クリックされたハンドル取得
tn.Nodes.Add(Prm_tbl[10], Prm_tbl[10]);
richTextBox1.Text = "";
}
// -------------------------------------------------------------------------------------
// ここから下は、フォームやコントロール要素のイベント関数であり、自動生成される
// フォームはダイアログと呼ばれていた時期がある
// コントロール要素は、リストボックス、ツリービュー、グリッド、ボタン、コンテキストメニューなど