関数のコピーペースト領域(ひな形コード)

20241119

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 = "";

 

}

 

 

// -------------------------------------------------------------------------------------

//        ここから下は、フォームやコントロール要素のイベント関数であり、自動生成される

//        フォームはダイアログと呼ばれていた時期がある

//        コントロール要素は、リストボックス、ツリービュー、グリッド、ボタン、コンテキストメニューなど