/// ----------------------------------------------------------------------------------------- /// <summary> /// 指定文字列の全角チェック(文字数チェックなし)</summary> /// <param name="pstrTarget"> /// チェック文字列</param> /// <returns> /// 指定文字列の全角チェックを行います</returns> /// ----------------------------------------------------------------------------------------- public static bool IsWideString(string pstrTarget) { int lintPostLenB = 0; // 文字長(バイト) try { // 文字数取得 int lintPostLen = pstrTarget.Length; // バイト数取得 lintPostLenB = Ans.AnsLenB(pstrTarget); // 1.半角混入チェック if ((lintPostLen * 2) != lintPostLenB) { MessageBox.Show("半角文字が入力されています。", "入力確認", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); // 半角ありエラー } // チェックOK return(true); } catch { // チェックNG return(false); } }
//************************************************************************************* /// <summary> 機能 : GENGO.INIの取得</summary> /// <remark> 機能説明 : GENGO.INIの取得</remark> //************************************************************************************* public clsHidukeLib() { int wkIntValue; for (int LoopCount = 0; LoopCount < 10; LoopCount++) { GengoInfo[LoopCount].FullName = Ans.AnsMidB(GENGO_GengoString, LoopCount * 27 + 2, 4); GengoInfo[LoopCount].AlphabetName = Ans.AnsMidB(GENGO_GengoString, LoopCount * 27 + 6, 1); GengoInfo[LoopCount].OmissionName = Ans.AnsMidB(GENGO_GengoString, LoopCount * 27 + 7, 2); if (int.TryParse(Ans.AnsMidB(GENGO_GengoString, LoopCount * 27 + 9, 8), out wkIntValue) == true) { GengoInfo[LoopCount].FromDate = wkIntValue; } if (int.TryParse(Ans.AnsMidB(GENGO_GengoString, LoopCount * 27 + 17, 8), out wkIntValue) == true) { GengoInfo[LoopCount].ToDate = wkIntValue; } if (int.TryParse(Ans.AnsMidB(GENGO_GengoString, LoopCount * 27 + 25, 4), out wkIntValue) == true) { GengoInfo[LoopCount].CountYear = wkIntValue; } } GengoInfo[10].FullName = "ERR "; GengoInfo[10].AlphabetName = "E"; GengoInfo[10].OmissionName = "ER"; GengoInfo[10].FromDate = 0; GengoInfo[10].ToDate = 99999999; GengoInfo[10].CountYear = 9999; }
/// ----------------------------------------------------------------------------------------- /// <summary> /// 指定文字列の郵便番号(半角)チェック</summary> /// <param name="pstrPostNo"> /// チェック文字列</param> /// <param name="pintMaxLenB"> /// 全バイト数</param> /// <returns> /// 指定文字列の郵便番号チェックを行います</returns> /// ----------------------------------------------------------------------------------------- public static bool IsPostNo(string pstrPostNo, int pintMaxLenB) { int lintPostLenB = 0; // 文字長(バイト) try { int lintPostLen = pstrPostNo.Length; // 1.文字長オーバ if (lintPostLen > pintMaxLenB) { MessageBox.Show("入力文字数がオーバしています。", "入力確認", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } // 2.全角混入チェック lintPostLenB = Ans.AnsLenB(pstrPostNo); // バイト数取得 if (lintPostLen != lintPostLenB) { MessageBox.Show("全角文字が入力されています。", "入力確認", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } // 3.指定文字チェック string lstrWK = ""; // 文字取得用 for (int lintLoop = 0; lintLoop < lintPostLenB; lintLoop++) { lstrWK = Ans.AnsMidB(pstrPostNo, lintLoop, 1); // 1文字取得 switch (lstrWK) { case "-": case " ": break; default: // 数値でない場合エラー if (IsIntNumber(lstrWK) == false) { MessageBox.Show("不正な文字が入力されています。", "入力確認", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); // チェックNG } break; } } // チェックOK return(true); } catch { // チェックNG return(false); } }
/// ----------------------------------------------------------------------------------------- /// <summary> /// 指定文字列のバイトチェック</summary> /// <param name="pstrChk"> /// チェック文字列</param> /// <param name="pintLenB">チェック文字数</param> /// <returns> /// 指定文字列のバイト数日付チェックを行います</returns> /// ----------------------------------------------------------------------------------------- public static bool IsLenB(string pstrChk, int pintLenB) { try { // 文字長(バイト)>指定バイト数の場合、エラー if (Ans.AnsLenB(pstrChk) > pintLenB) { MessageBox.Show("入力文字数がオーバしています。", "入力確認", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } // チェックOK return(true); } catch { return(false); } }
/// ----------------------------------------------------------------------------------------- /// <summary> /// 指定した文字列を指定バイト数にて分割します。</summary> /// <param name="pstrMoji"> /// 指定文字列(半角混在可)</param> /// <param name="pintLengthB"> /// 指定バイト文字数</param> /// <param name="pblnDelNewLine"> /// 改行コード分割フラグ(TRUE:分割あり、False:分割しない)</param> /// <returns> /// 分割配列にて戻します。分解できなかった場合は配列数1で空白文字を返します。</returns> /// ----------------------------------------------------------------------------------------- public static string[] StringBukatuB(string pstrMoji, int pintLengthB, bool pblnDelNewLine) { List <string> lstrRet = new List <string>(); // 戻値用 string[] lstrBunkatuWK; // 改行分割文字列WK string lstrEditText; int lintCutByteLen; // 切り取り文字バイト数 //--------------------------------------------------------------------------------------- // ■ 戻値文字列クリア //--------------------------------------------------------------------------------------- lstrRet.Clear(); //--------------------------------------------------------------------------------------- // ■ 該当文字を代入 //--------------------------------------------------------------------------------------- lstrEditText = pstrMoji; //--------------------------------------------------------------------------------------- // ■ 文字長が0の場合、1文字空白を戻します //--------------------------------------------------------------------------------------- if (lstrEditText.Length == 0) { return(new string[1] { " " }); } //--------------------------------------------------------------------------------------- // ■ 改行コードがある場合、一旦改行コードにて分割します ※引数に分割指定がある場合のみ //--------------------------------------------------------------------------------------- if (pblnDelNewLine == true) { lstrBunkatuWK = lstrEditText.Replace("\r\n", "\n").Split('\n'); // 改行コードは[\n]で統一 } else { lstrBunkatuWK = new string[1]; lstrBunkatuWK[0] = lstrEditText; } //--------------------------------------------------------------------------------------- // ■ 改行分割後文字列を、指定文字列で分割します //--------------------------------------------------------------------------------------- for (int lintIndex = lstrBunkatuWK.GetLowerBound(0); lintIndex <= lstrBunkatuWK.GetUpperBound(0); lintIndex++) { while (lstrBunkatuWK[lintIndex].Length > 0) { // 文字列追加:指定バイトで分割 lstrRet.Add(Ans.AnsLeftC(lstrBunkatuWK[lintIndex], pintLengthB, out lintCutByteLen)); // 文字列再設定 if (Ans.AnsLenB(lstrBunkatuWK[lintIndex]) <= lintCutByteLen) { lstrBunkatuWK[lintIndex] = ""; } else { lstrBunkatuWK[lintIndex] = Ans.AnsMidB(lstrBunkatuWK[lintIndex], lintCutByteLen); } } } return(lstrRet.ToArray()); }
//************************************************************************************* /// <summary> 機能 : 日付の変換</summary> /// <param name="pstrinDate">(I)入力日付(有効日付であれば和暦西暦両方可) </param> /// <param name="pintretFormatType">(I) 返す日付のフォーマット 0:西暦 1:和暦 2:和暦略 3:和暦英略 4:年月日付き和暦</param> /// <param name="pstrseparateChar">(I) 区切り文字</param> /// <param name="pstrDefDate">(I) 基準日(ブランクの場合、システム日付)</param> /// <remark> 機能説明 : 日付の変換</remark> //************************************************************************************* public string ConvDate(string pstrinDate, int pintretFormatType, string pstrseparateChar, string pstrDefDate) { StringBuilder WkStr = new StringBuilder(); // 変換用 string lstrInDateValue; // 対象日付 // デフォルト値 string lstrDEF_Reki; // デフォルト歴No(1~9、0) string lstrDefDateValue; // 基準日 string lstrReki; // 対象和暦No // WK変数 int lintYYYY; // 年WK string lstrGengoR; // 元号略取得用 int lintGengoIndex; // 元号配列該当NO string lstrYMDWK; // 年月日WK Boolean lblnWarekiFlg; // 和暦判定フラグ(true:和暦、false:西暦) DateTime ldteRet; // 日付チェック用戻値 int lintwkWarekiYear; // 和暦年用 int lintwkWarekiMD; // 和暦月日用 int lintwkSeirekiYear; // 西暦年用 int lintwkAddYear; // 開始年用 string lstrwkMM; // 月用 string lstrwkDD; // 日用 int lintwkIntValue; // int型変換WK int lintSelectGengoCount; // 元号配列No string ReturnValue; // 戻値設定用 try { //------------------------------------------------------------------------------ // ■ 基準日/基準歴No(1~9,0) セット //------------------------------------------------------------------------------ if (pstrDefDate.Length == 0) { lstrDefDateValue = DateTime.Today.ToString("yyyyMMdd"); } else { lstrDefDateValue = pstrDefDate; } lstrDEF_Reki = "0"; int.TryParse(lstrDefDateValue, out lintwkIntValue); // 1.数値変換 for (int LoopCount = 0; LoopCount < 7; LoopCount++) // 0~6までの配列、7以降は年代配列 { //入力年度に該当する元号を取得 if (lintwkIntValue >= GengoInfo[LoopCount].FromDate && lintwkIntValue <= GengoInfo[LoopCount].ToDate) { int lintReki = LoopCount + 1; lstrDEF_Reki = lintReki.ToString(); break; } } //------------------------------------------------------------------------------ // ■ 空白であれば基準日設定 //------------------------------------------------------------------------------ if (pstrinDate != "") { lstrInDateValue = pstrinDate.ToUpper(); } else { lstrInDateValue = lstrDefDateValue; } //------------------------------------------------------------------------------ // ■ 区切り文字の削除 //------------------------------------------------------------------------------ lstrInDateValue = lstrInDateValue.Replace(" ", ""); lstrInDateValue = lstrInDateValue.Replace("/", ""); lstrInDateValue = lstrInDateValue.Replace("-", ""); lstrInDateValue = lstrInDateValue.Replace(".", ""); //------------------------------------------------------------------------------ // ■ 文字長0は、EXIT //------------------------------------------------------------------------------ if (lstrInDateValue.Length == 0) { return(""); } //------------------------------------------------------------------------------ // ■ 文字の場合、「HYYMMDD」形式のみ許可 // [9YYMMDD]形式へ //------------------------------------------------------------------------------ if (int.TryParse(lstrInDateValue, out lintwkIntValue) == false) { // 文字分割 lstrGengoR = lstrInDateValue.Substring(0, 1); // 1文字目 lstrYMDWK = Ans.AnsMidB(lstrInDateValue, 1); // 2文字目以降 // 1文字目はアルファベットのみ if (Char.IsLetter(lstrGengoR, 0) == false) { return(""); } // 年月日部は6桁 if (lstrYMDWK.Length != 6) { return(""); } // 年月日部は数値 if (int.TryParse(lstrYMDWK, out lintwkIntValue) == false) { return(""); } // 元号略→元号NOへ変換、変換できない場合エラー lintGengoIndex = GetGengo(lstrGengoR); if (lintGengoIndex == 0) { return(""); } // 元号No+年月日へ変換 [9YYMMDD]形式へ WkStr.Remove(0, WkStr.Length); WkStr.Append(lintGengoIndex.ToString("0")); WkStr.Append(lstrYMDWK); lstrInDateValue = WkStr.ToString(); } //------------------------------------------------------------------------------ // ■ 数値(和暦)の場合:デフォルト年月日をプラスし(00YYMMDD形式へ) // 西暦:YYYYMMDD形式 // 和暦:00YYMMDD形式/9YYMMDD形式へ変換 //------------------------------------------------------------------------------ else { WkStr.Remove(0, WkStr.Length); //-------------------------------------------------------------------------- // 桁数により変換 //-------------------------------------------------------------------------- switch (lstrInDateValue.Length) { //---------------------------------------------------------------------- // ◇ 8桁の場合 //---------------------------------------------------------------------- case 8: // 西暦の為、無処理 break; //---------------------------------------------------------------------- // ◇ 7桁の場合 //---------------------------------------------------------------------- case 7: // 和暦記号+年月日の為無処理 break; //---------------------------------------------------------------------- // ◇ 6,5桁の場合 //---------------------------------------------------------------------- case 6: case 5: // [00YYMMDD]形式 WkStr.Append(lstrInDateValue.PadLeft(8, '0')); lstrInDateValue = WkStr.ToString(); break; //---------------------------------------------------------------------- // ◇ 数値3,4桁は月日入力扱い 基準日の年 付加 //---------------------------------------------------------------------- case 4: case 3: // 基準日[YYYY]+MMDD 形式 WkStr.Append(lstrDefDateValue.Substring(0, 4)); WkStr.Append(lstrInDateValue.PadLeft(4, '0')); lstrInDateValue = WkStr.ToString(); break; //---------------------------------------------------------------------- // ◇ 数値1,2桁は日入力扱い 基準日の年月 付加 //---------------------------------------------------------------------- case 2: case 1: // 基準日[YYYYMM]+DD 形式 WkStr.Append(lstrDefDateValue.Substring(0, 6)); WkStr.Append(lstrInDateValue.PadLeft(2, '0')); lstrInDateValue = WkStr.ToString(); break; //---------------------------------------------------------------------- // ◇ 以外はエラー //---------------------------------------------------------------------- default: return(""); } } //----------------------------------------------------------------------------- // ■ 7桁入力の場合(和暦記号+年月日)の場合で西暦年代の場合、変換 // 和暦記号が[8:1800年代][9:1900年代][0:2000年代] //----------------------------------------------------------------------------- if (lstrInDateValue.Length == 7) { WkStr.Remove(0, WkStr.Length); switch (lstrInDateValue.Substring(0, 1)) { case "8": // [8:1800年代] WkStr.Append("18"); WkStr.Append(lstrInDateValue.Substring(1)); // [18YYMMDD]へ lstrInDateValue = WkStr.ToString(); break; case "9": // [9:1900年代] WkStr.Append("19"); WkStr.Append(lstrInDateValue.Substring(1)); // [19YYMMDD]へ lstrInDateValue = WkStr.ToString(); break; case "0": // [0:2000年代] WkStr.Append("20"); WkStr.Append(lstrInDateValue.Substring(1)); // [20YYMMDD]へ lstrInDateValue = WkStr.ToString(); break; } } //----------------------------------------------------------------------------- // ■ 元号NOとと年月へ分割 //----------------------------------------------------------------------------- lstrReki = ""; // 対象歴クリア switch (lstrInDateValue.Length) { case 7: // [9YYMMDD]形式→歴+[00YYMMDD]へ分割 lstrReki = Ans.AnsLeftB(lstrInDateValue, 1); // 対象歴 WkStr.Remove(0, WkStr.Length); // [00YYMMDD]形式 WkStr.Append("00"); WkStr.Append(Ans.AnsMidB(lstrInDateValue, 1)); lstrInDateValue = WkStr.ToString(); break; default: // 以外、8桁の場合 int.TryParse(Ans.AnsMidB(lstrInDateValue, 0, 4), out lintYYYY); if (lintYYYY < 100) { // 和暦入力 lstrReki = lstrDEF_Reki; // デフォルト歴セット } else { // 西暦入力 lstrReki = ""; // ブランク } break; } //----------------------------------------------------------------------------- // ■ 元号NOにより、該当年号配列NOインデックス取得 //----------------------------------------------------------------------------- lblnWarekiFlg = false; // 和暦判定フラグ(false:西暦) lintSelectGengoCount = -1; switch (lstrReki) { //------------------------------------------------------------------------- // ◇ 和暦の場合 //------------------------------------------------------------------------- case "1": case "2": case "3": case "4": case "5": case "6": case "7": lblnWarekiFlg = true; // 和暦判定フラグ(和暦) int.TryParse(lstrReki, out lintGengoIndex); // 数値変換 for (int LoopCount = (lintGengoIndex - 1); LoopCount < 7; LoopCount++) { //和暦日付を年と月日に分割 lintwkWarekiYear = int.Parse(lstrInDateValue.Substring(0, 4)); // 00YY lintwkWarekiMD = int.Parse(lstrInDateValue.Substring(4)); // MMDD // 和暦年が、範囲( 和暦年 < 年数 AND 和暦年 > 1) if (lintwkWarekiYear < GengoInfo[LoopCount].CountYear && lintwkWarekiYear > 1) { lintSelectGengoCount = LoopCount; break; } // 最終年であれば日付チェック ( 和暦年=年数 AND 和暦月日<= 終了月日 ) else if (lintwkWarekiYear == GengoInfo[LoopCount].CountYear && lintwkWarekiMD <= GengoInfo[LoopCount].ToDate % 10000) { lintSelectGengoCount = LoopCount; break; } // 初年であれば日付チェック ( 和暦年=1 AND 和暦月日>= 開始月日 ) else if (lintwkWarekiYear == 1 && lintwkWarekiMD >= GengoInfo[LoopCount].FromDate % 10000) { lintSelectGengoCount = LoopCount; break; } // 初年かつ開始日付以前なら前の元号を設定 ( 和暦年=1 AND 和暦月日< 開始日付 ) else if (lintwkWarekiYear == 1 && lintwkWarekiMD < GengoInfo[LoopCount].FromDate % 10000) { //「大正」より処理 if (LoopCount > 0) { lintSelectGengoCount = LoopCount - 1; break; } } //範囲外であれば次の元号に変換して再処理 else { // 和暦年-年数 + 1 int wkWarekiDiff = lintwkWarekiYear - GengoInfo[LoopCount].CountYear + 1; WkStr.Remove(0, WkStr.Length); WkStr.Append(wkWarekiDiff.ToString("0000")); // 次年[00YY] WkStr.Append(lintwkWarekiMD.ToString("0000")); // 月日 lstrInDateValue = WkStr.ToString(); } } break; //------------------------------------------------------------------------- // ◇ 西暦の場合 //------------------------------------------------------------------------- default: lblnWarekiFlg = false; // 和暦判定フラグ(西暦) int.TryParse(lstrInDateValue, out lintwkIntValue); // 1.数値変換 for (int LoopCount = 0; LoopCount < 7; LoopCount++) // 0~6までの配列、7以降は年代配列 { //入力年度に該当する元号を取得 if (lintwkIntValue >= GengoInfo[LoopCount].FromDate && lintwkIntValue <= GengoInfo[LoopCount].ToDate) { lintSelectGengoCount = LoopCount; break; } } break; } //----------------------------------------------------------------------------- // ■ 元号配列に該当情報がない場合、日付と判断しないエラー //----------------------------------------------------------------------------- if (lintSelectGengoCount == -1) { return(""); } //----------------------------------------------------------------------------- // ■ 西暦年/和暦年/月/日 に分割 //----------------------------------------------------------------------------- lintwkAddYear = int.Parse(GengoInfo[lintSelectGengoCount].FromDate.ToString("00000000").Substring(0, 4)); // 西暦の場合 if (lblnWarekiFlg == false) { lintwkSeirekiYear = int.Parse(lstrInDateValue.Substring(0, 4)); lintwkWarekiYear = lintwkSeirekiYear - lintwkAddYear + 1; lstrwkMM = lstrInDateValue.Substring(4, 2); lstrwkDD = lstrInDateValue.Substring(6, 2); } // 和暦の場合 else { lintwkWarekiYear = int.Parse(lstrInDateValue.Substring(0, 4)); lintwkSeirekiYear = lintwkAddYear + lintwkWarekiYear - 1; lstrwkMM = lstrInDateValue.Substring(4, 2); lstrwkDD = lstrInDateValue.Substring(6, 2); } //----------------------------------------------------------------------------- // ■ バリデイトチェック //----------------------------------------------------------------------------- if (DateTime.TryParse(lintwkSeirekiYear.ToString() + "/" + lstrwkMM.ToString() + "/" + lstrwkDD.ToString(), out ldteRet) == false) { // 日付エラー return(""); } //----------------------------------------------------------------------------- // ■ 指定出力形式にフォーマット //----------------------------------------------------------------------------- ReturnValue = ""; switch (pintretFormatType) { case 0: //西暦 WkStr.Remove(0, WkStr.Length); WkStr.Append(lintwkSeirekiYear.ToString("0000")); //区切りの有無 if (pstrseparateChar != "") { WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkMM); WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkDD); } else { WkStr.Append(lstrwkMM); WkStr.Append(lstrwkDD); } ReturnValue = WkStr.ToString(); break; case 1: //和暦(平成~) WkStr.Remove(0, WkStr.Length); WkStr.Append(GengoInfo[lintSelectGengoCount].FullName); WkStr.Append(lintwkWarekiYear.ToString("00")); //区切りの有無 if (pstrseparateChar != "") { WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkMM); WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkDD); } else { WkStr.Append(lstrwkMM); WkStr.Append(lstrwkDD); } ReturnValue = WkStr.ToString(); break; case 2: //和暦(平~) WkStr.Remove(0, WkStr.Length); WkStr.Append(GengoInfo[lintSelectGengoCount].OmissionName); WkStr.Append(lintwkWarekiYear.ToString("00")); //区切りの有無 if (pstrseparateChar != "") { WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkMM); WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkDD); } else { WkStr.Append(lstrwkMM); WkStr.Append(lstrwkDD); } ReturnValue = WkStr.ToString(); break; case 3: //和暦(H~) WkStr.Remove(0, WkStr.Length); WkStr.Append(GengoInfo[lintSelectGengoCount].AlphabetName); WkStr.Append(lintwkWarekiYear.ToString("00")); //区切りの有無 if (pstrseparateChar != "") { WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkMM); WkStr.Append(pstrseparateChar); WkStr.Append(lstrwkDD); } else { WkStr.Append(lstrwkMM); WkStr.Append(lstrwkDD); } ReturnValue = WkStr.ToString(); break; case 4: //和暦(平成YY年MM月DD日) WkStr.Remove(0, WkStr.Length); WkStr.Append(GengoInfo[lintSelectGengoCount].FullName); // 平成 WkStr.Append(lintwkWarekiYear.ToString("00")); // YY WkStr.Append("年"); WkStr.Append(lstrwkMM); WkStr.Append("月"); WkStr.Append(lstrwkDD); WkStr.Append("日"); ReturnValue = WkStr.ToString(); break; default: ReturnValue = ""; break; } return(ReturnValue); } catch { return(""); } }