//──────────────────────────────────────── public void Write( string text_Csv, string filepathabsolute,//絶対ファイルパス bool isSuccessfulDialogPopup ) { try { System.IO.File.WriteAllText(filepathabsolute, text_Csv, Global.ENCODING_CSV); if (isSuccessfulDialogPopup) { Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("ファイルに書き込みました。"); s.Append(Environment.NewLine); s.Append("["); s.Append(filepathabsolute); s.Append("]"); MessageBox.Show(s.ToString(), "▲実行結果!(L02)"); } } catch (Exception ex) { // 異常時は必ずポップアップが出る。 MessageBox.Show( ex.Message, "▲エラー201!(" + Info_Table.Name_Library + ") " + this.GetType().Name + "#Write" ); } }
//──────────────────────────────────────── /// <summary> /// /// </summary> /// <param name="contents">CSVテキスト</param> /// <param name="csvAbs">絶対ファイルパス</param> /// <param name="isSuccessfulDialogPopup"></param> public void Write( string contents, string csvAbs, bool isSuccessfulDialogPopup, Encoding encodingCsv ) { try { System.IO.File.WriteAllText(csvAbs, contents, encodingCsv); if (isSuccessfulDialogPopup) { Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("ファイルに書き込みました。"); s.Append(Environment.NewLine); s.Append("["); s.Append(csvAbs); s.Append("]"); MessageBox.Show(s.ToString(), "▲実行結果!(L02)"); } } catch (Exception ex) { // 異常時は必ずポップアップが出る。 MessageBox.Show( ex.Message, "▲エラー201!(" + Info_Table.Name_Library + ") " + this.GetType().Name + "#Write" ); } }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── /// <summary> /// 再帰関数です。 /// </summary> /// <param name="result">.luaファイルのパスが追加されます。</param> /// <param name="folderpath"></param> public void SearchLua(List <string> result, string folderpath, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Actorslist.Name_Library, this, "SearchLua", log_Reports); if (log_Reports.Successful) { if (!Directory.Exists(folderpath)) { System.Console.WriteLine("SearchLua エラー"); goto gt_Error_Folder; } string[] filepaths = Directory.GetFileSystemEntries(folderpath); foreach (string filepath in filepaths) { if (Directory.Exists(filepath)) { //System.Console.WriteLine("dir=[" + filepath + "]"); this.SearchLua(result, filepath, log_Reports); } else { Match m1 = this.Regex.Match(filepath); if (m1.Success) { result.Add(filepath); //System.Console.WriteLine("file=[" + filepath + "]"); } } } } goto gt_EndMethod; #region 異常系 //──────────────────────────────────────── gt_Error_Folder: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー13001!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("存在するフォルダーを指定してください。"); s.Append(Environment.NewLine); s.Append(" folderpath=["); s.Append(folderpath); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion gt_EndMethod: log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── /// <summary> /// 例えば ("access",”from”)と指定すれば、 /// 指定リストの要素の中で <~ access=”from,to”> といった属性を持つものはヒットする。 /// /// 選択アイテムをリストから除外するなら bRemove=true にします。 /// </summary> /// <param name="sName"></param> /// <param name="sExpectedValue"></param> /// <param name="request_Items"></param> /// <param name="log_Reports"></param> /// <returns></returns> private static List <Expression_Node_String> SelectItemsByPmAsCsv_Full_( List <Expression_Node_String> ecList_Item, string sPmName, bool bUnconditional,//無条件一致なら真 string sExpectedValue, bool bRemove, EnumHitcount hits, Log_Reports log_Reports ) { Log_Method pg_Method = new Log_MethodImpl(0); pg_Method.BeginMethod(Info_Controls.Name_Library, "Util_E_NodeImpl", "SelectItemsByAttrAsCsv_Full_", log_Reports); // // //Util_E_NodeImpl dammy_This = new Util_E_NodeImpl(); List <Expression_Node_String> ecList_Result = new List <Expression_Node_String>(); for (int nI = 0; nI < ecList_Item.Count; nI++) { Expression_Node_String ec_Item = ecList_Item[nI]; if (log_Reports.Successful) { Expression_Node_String ec_AttrValue; bool bHit = ec_Item.TrySelectAttribute(out ec_AttrValue, sPmName, EnumHitcount.One_Or_Zero, log_Reports); if (bHit) { string sAttrValue = ec_AttrValue.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); CsvTo_ListImpl to = new CsvTo_ListImpl(); List <string> sList_Value = to.Read(sAttrValue); bool bHit10 = false; if (bUnconditional) { //if(""!=sAttrValue) //{ bHit = true; //} } else if (sList_Value.Contains(sExpectedValue)) { bHit10 = true; } if (bHit10) { ecList_Result.Add(ec_Item); if (bRemove) { // 削除 ecList_Item.RemoveAt(nI); nI--; } if (EnumHitcount.First_Exist == hits || EnumHitcount.First_Exist_Or_Zero == hits) { // 最初の1件で削除は終了。複数件ヒットするかどうかは判定しない。 break; } } } } } //ystem.Console.WriteLine(Info_Forms.LibraryName + ":Util_E_NodeImpl.GetItemsByAttrAsCsv: 直後 list_E_Result.Count=[" + list_E_Result.Count + "]"); if (EnumHitcount.One == hits) { // 必ず1件だけヒットする想定。 if (ecList_Result.Count != 1) { goto gt_Error_NotOne; } } else if (EnumHitcount.First_Exist == hits) { // 必ずヒットする。複数件あれば、最初の1件だけ取得。 if (0 == ecList_Result.Count) { goto gt_Error_NoHit; } else if (1 < ecList_Result.Count) { ecList_Result.RemoveRange(1, ecList_Result.Count - 1); } } else if (EnumHitcount.First_Exist_Or_Zero == hits) { // ヒットすれば最初の1件だけ、ヒットしなければ0件の想定。 if (1 < ecList_Result.Count) { ecList_Result.RemoveRange(1, ecList_Result.Count - 1); } } else { } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_NoHit: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー102!", pg_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("必ず、1件以上ヒットする指定でしたが、["); s.Append(ecList_Result.Count); s.Append("]件ヒットしました。"); s.Newline(); s.Newline(); s.AppendI(1, "ヒット件数=["); s.Append(ecList_Result.Count); s.Append("]"); s.Newline(); s.AppendI(1, "items.Count=["); s.Append(ecList_Item.Count); s.Append("]"); s.Newline(); s.AppendI(1, "sPmName=["); s.Append(sPmName); s.Append("]"); s.Newline(); s.AppendI(1, "無条件一致か?=["); s.Append(bUnconditional); s.Append("]"); s.Newline(); s.AppendI(1, "sExpectedValue=["); s.Append(sExpectedValue); s.Append("]"); s.Newline(); s.AppendI(1, "bRemove=["); s.Append(bRemove); s.Append("]"); s.Newline(); s.AppendI(1, "request_Items=["); s.Append(hits); s.Append("]"); s.Newline(); s.Append("┌────────┐処理後に残った内容 要素数=["); s.Append(ecList_Item.Count); s.Append("]"); s.Newline(); foreach (Expression_Node_String e_Item2 in ecList_Item) { string sAttrNameValue; bool bHit = e_Item2.TrySelectAttribute(out sAttrNameValue, sPmName, EnumHitcount.One_Or_Zero, log_Reports); s.AppendI(1, "・「E■["); s.Append(e_Item2.Cur_Configuration.Name); s.Append("] name=”["); s.Append(sAttrNameValue); s.Append("] 値=”["); s.Append(e_Item2.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]”」"); s.Newline(); e_Item2.ToText_Snapshot(s); } s.Append("└────────┘"); s.Newline(); // ヒント if (1 < ecList_Item.Count) { Expression_Node_String parent_Expr = ecList_Item[0].Parent_Expression; if (null != parent_Expr) { s.Append("┌────────┐先頭要素の親"); s.Newline(); parent_Expr.ToText_Snapshot(s); s.Append("└────────┘"); s.Newline(); } } r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_NotOne: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー101!", pg_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("必ず、1件のみ取得する指定でしたが、["); s.Append(ecList_Result.Count); s.Append("]件取得しました。"); s.Newline(); s.Newline(); s.AppendI(1, "sPmName=["); s.Append(sPmName); s.Append("]"); s.Newline(); s.AppendI(1, "無条件一致か?=["); s.Append(bUnconditional); s.Append("]"); s.Newline(); s.AppendI(1, "sExpectedValue=["); s.Append(sExpectedValue); s.Append("]"); s.Newline(); s.AppendI(1, "bRemove=["); s.Append(bRemove); s.Append("]"); s.Newline(); // ヒント r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: pg_Method.EndMethod(log_Reports); return(ecList_Result); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── public static EnumTypeFielddef TypefieldFromString( string name_Typefield, bool isRequired, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "FielddefImpl", "TypefieldFromString", log_Reports); EnumTypeFielddef result; switch (name_Typefield) { case FielddefImpl.S_STRING: { result = EnumTypeFielddef.String; } break; case FielddefImpl.S_INT: { result = EnumTypeFielddef.Int; } break; case FielddefImpl.S_BOOL: { result = EnumTypeFielddef.Bool; } break; default: { //文字列型にしておく。 result = EnumTypeFielddef.String; if (isRequired) { //エラー goto gt_Error_Unspported; } } break; } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_Unspported: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー471!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定された文字列["); s.Append(name_Typefield); s.Append("]は、サポートされていないデータベースの列の型でした。"); s.Newline(); s.Append("サポートされている型は、["); s.Append(FielddefImpl.S_STRING); s.Append("],["); s.Append(FielddefImpl.S_INT); s.Append("],["); s.Append(FielddefImpl.S_BOOL); s.Append("]のいずれかです。"); s.Newline(); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── /// <summary> /// <f-cell>→M /// </summary> /// <param name="outputValueStr"></param> /// <param name="nKeyExpected"></param> /// <param name="nFcell"></param> /// <param name="moApplication"></param> /// <param name="log_Reports"></param> public void Translate( string sOutputValue, Expression_Node_String ec_KeyExpected, Expression_Node_String ec_SfCell,//Sf:cell;相当と想定。 MemoryApplication moApplication, Log_Reports log_Reports ) { Log_Method pg_Method = new Log_MethodImpl(0); pg_Method.BeginMethod(Info_Controls.Name_Library, this, "EToM2", log_Reports); // // string sName_Fnc; ec_SfCell.TrySelectAttribute(out sName_Fnc, PmNames.S_NAME.Name_Pm, EnumHitcount.One, log_Reports); if (NamesFnc.S_CELL != sName_Fnc) { // エラー。 goto gt_Error_NotSfcell; } string sSelectedFldName; if (log_Reports.Successful) { bool bHit = ec_SfCell.TrySelectAttribute( out sSelectedFldName, PmNames.S_SELECT.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports ); //if (!bHit) //{ // // 【追加 2012-07-10】 // // Sf:cell; の子要素arg1 には、name="select" のものがある。本来これは属性連結しておいて欲しい。 // List<Expression_Node_String> list_Arg1 = e_SfCell.SelectDirectchildByNodename(NamesNode.S_ARG1, false, EnumHitcount.Unconstraint, log_Reports); // d_InMethod.WriteDebug_ToConsole(1, "sSelectedFldNameが属性になかった。子要素arg1(" + list_Arg1 .Count+ "個)から探す。"); // if (0<d_InMethod.NDebugLevel && list_Arg1.Count<=0) // { // Log_TextIndented s = new Log_TextIndentedImpl(); // e_SfCell.ToText_Snapshot(s); // d_InMethod.WriteDebug_ToConsole(1, s.ToString()); // } // EUtil_NodeImpl.SelectItemsByAttrAsCsv(list_Arg1, PmNames.NAME.SAttrName, ValuesAttr.S_SELECT, false, EnumHitcount.First_Exist, log_Reports); // if (log_Reports.Successful) // { // sSelectedFldName = list_Arg1[0].Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); // } //} } else { sSelectedFldName = ""; } Expression_Node_String ec_KeyFldName1 = null; if (log_Reports.Successful) { Expression_Node_String ec_Where = null; // // 「E■where」は子要素。 // // 再検索。 ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String ec_Child, ref bool bRemove, ref bool bBreak) { string sValue; ec_Child.TrySelectAttribute(out sValue, PmNames.S_NAME.Name_Pm, EnumHitcount.One, log_Reports); if (NamesNode.S_FNC == ec_Child.Cur_Configuration.Name && NamesFnc.S_WHERE == sValue) { ec_Where = ec_Child; if (pg_Method.CanDebug(2)) { pg_Method.WriteDebug_ToConsole("子「E■[" + ec_Child.Cur_Configuration.Name + "]」。子要素数=[" + ec_Where.List_Expression_Child.Count + "]"); } ec_Where.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Item, ref bool bRemove2, ref bool bBreak2) { if (NamesNode.S_FNC == e_Item.Cur_Configuration.Name) { Expression_Node_String ec_Field; bool bHit3 = e_Item.TrySelectAttribute(out ec_Field, PmNames.S_FIELD.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports); if (bHit3) { //「E■f-cell」/「E■@where」/「E■fnc field=”★”」。 ec_KeyFldName1 = ec_Field; if (pg_Method.CanDebug(2)) { pg_Method.WriteDebug_ToConsole("「E■f-cell」/「E■a-where」/「E■fnc field=”[" + ec_KeyFldName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports) + "]”」。"); } } else { throw new Exception("ここは通らない?"); } } else { // #エラー System.Console.WriteLine(Info_Controls.Name_Library + ":" + this.GetType().Name + "#EToM: 「E■fnc」がありませんでした。"); } }); } else { if (pg_Method.CanDebug(2)) { pg_Method.WriteDebug_ToConsole("(無視) 子「E■[" + ec_Child.Cur_Configuration.Name + "]」。"); } } }); if (null == ec_Where) { // #エラー System.Console.WriteLine(Info_Controls.Name_Library + ":" + this.GetType().Name + "#EToM: 「E■f-cell」に、子「E■where」が無かった? そういう場合(無条件)もある。"); } } else { ec_KeyFldName1 = null; } // // from // Expression_Node_String ec_TableName1;//ソース情報利用 if (log_Reports.Successful) { // Sf:cell; に from が指定されていない? bool bHit = ec_SfCell.TrySelectAttribute( out ec_TableName1, PmNames.S_FROM.Name_Pm, EnumHitcount.One, log_Reports ); //if (null == e_TableName1) //{ // d_InMethod.WriteDebug_ToConsole(1, "e_TableName1が属性になかった。子要素arg1から探す。"); // // 【追加 2012-07-10】 // // Sf:cell; の子要素arg1 には、name=”from” のものがある。本来これは属性連結しておいて欲しい。 // List<Expression_Node_String> list_Arg1 = e_SfCell.SelectDirectchildByNodename(NamesNode.S_ARG1, false, EnumHitcount.Unconstraint, log_Reports); // EUtil_NodeImpl.SelectItemsByAttrAsCsv(list_Arg1, PmNames.NAME.SAttrName, ValuesAttr.S_FROM, false, EnumHitcount.First_Exist, log_Reports); // if (log_Reports.Successful) // { // e_TableName1 = list_Arg1[0]; // } //} } else { ec_TableName1 = null; } // // required // bool bExpectedValueRequired = false; if (log_Reports.Successful) { string sRequired1; bool bHit = ec_SfCell.TrySelectAttribute(out sRequired1, PmNames.S_REQUIRED.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports); if (bHit) { // 【旧仕様】 bool bParseSuccessful = bool.TryParse(sRequired1, out bExpectedValueRequired); } else { // 【新仕様】 // // 新仕様では、「E■f-cell/@E■where/E■prm name=”required”」。 // { Expression_Node_String ec_Where; bool bHit1 = ec_SfCell.TrySelectAttribute(out ec_Where, PmNames.S_WHERE.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports); if (bHit1) { throw new Exception("こーこは通らない?"); } } } } else { } // e_TableName を取得してから引数エラーチェック。 if (null == ec_KeyExpected) { // エラー goto gt_Error_NullKeyExpected; } // ────────── Table_Humaninput o_Table; if (log_Reports.Successful) { o_Table = moApplication.MemoryTables.GetTable_HumaninputByName(ec_TableName1, true, log_Reports); // エラー時には、エラーメッセージを出させます。 if (null == o_Table) { // // エラー中断。 goto gt_Error_NotFoundTable; } else { // // 正常時 // //.WriteLine("(" + Info_Forms .LibraryName+ ")" + this.GetType().NFcName + "#...: (1)テーブル検索終了 refOTable=[" + refOTable.SourceFilePath + "]"); } } else { o_Table = null; } string err_SKeyFldName; string err_SSelectedFldName; // field=""。 Fielddefinition o_KeyFldDef; if (log_Reports.Successful) { // // 検索のキーとなるフィールドの定義を調べます。 // List <string> sList_KeyFldName; { sList_KeyFldName = new List <string>(); string sKeyFldName = ec_KeyFldName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); if ("" == sKeyFldName.Trim()) { // エラー err_SKeyFldName = sKeyFldName; goto gt_Error_EmptyKeyField; } sList_KeyFldName.Add(sKeyFldName); if (sList_KeyFldName.Count < 1) { // エラー err_SKeyFldName = sKeyFldName; goto gt_Error_ZeroKeyField; } } RecordFielddefinition recordFielddefinition; bool bHit = o_Table.TryGetFieldDefinitionByName( out recordFielddefinition, sList_KeyFldName, true, log_Reports ); if (!log_Reports.Successful || !bHit) { goto gt_EndMethod; } o_KeyFldDef = recordFielddefinition.ValueAt(0); } else { o_KeyFldDef = null; } RecordFielddefinition recordFielddefinition_Selected; if (log_Reports.Successful) { // 選択対象のフィールドの定義を調べます。 List <string> sList_SelectedFldName; { sList_SelectedFldName = new CsvTo_ListImpl().Read(sSelectedFldName); foreach (string sName in sList_SelectedFldName) { if ("" == sName.Trim()) { // エラー err_SSelectedFldName = sSelectedFldName; goto gt_Error_EmptySelectField; } } if (sList_SelectedFldName.Count < 1) { // エラー err_SSelectedFldName = sSelectedFldName; goto gt_Error_ZeroSelectField; } } bool bHit = o_Table.TryGetFieldDefinitionByName( out recordFielddefinition_Selected, sList_SelectedFldName, false, log_Reports ); if (!log_Reports.Successful || !bHit) { goto gt_EndMethod; } } else { recordFielddefinition_Selected = null; } if (log_Reports.Successful) { if (null == o_KeyFldDef) { // // エラー中断。 goto gt_Error_NotFoundKeyFldDefinition; } } if (log_Reports.Successful) { if (recordFielddefinition_Selected.Count < 1) { // // エラー中断。 goto gt_Error_NotFoundSelectFldDefinition; } } if (log_Reports.Successful) { List <DataRow> dst_Row = new List <DataRow>(); string sKeyFieldName = ec_KeyFldName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); string sExpectedValue = ec_KeyExpected.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); Configuration_Node cf_WrittenPlace_Query = ec_SfCell.Cur_Configuration; SelectPerformerImpl sp = new SelectPerformerImpl(); sp.Select( out dst_Row, sKeyFieldName, sExpectedValue, bExpectedValueRequired, o_KeyFldDef, o_Table.DataTable, cf_WrittenPlace_Query, log_Reports ); if (0 < dst_Row.Count) { //.WriteLine("(" + Info_Forms .LibraryName+ ")" + this.GetType().NFcName + "#...: (6a)該当 recordSet.Count=[" + recordSet.Count + "]"); foreach (DataRow row in dst_Row) { ToMemory_CellImpl updater = new ToMemory_CellImpl(); recordFielddefinition_Selected.ForEach(delegate(Fielddefinition fielddefinition_Selected, ref bool isBreak2, Log_Reports log_Reports2) { updater.ToMemory_ToSelectedField( sOutputValue, ec_SfCell, row, fielddefinition_Selected, log_Reports ); }, log_Reports); } } else { // エラー。 goto gt_Error_NotFoundRecord; } } goto gt_EndMethod; // // gt_Error_NotSfcell: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー909!", pg_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("Sf:cell;でないExpression_Node_Stringが指定されました。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); if (null != ec_SfCell) { ec_SfCell.ToText_Snapshot(s); } r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; // // gt_Error_NullKeyExpected: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー906!", pg_Method); StringBuilder s = new StringBuilder(); s.Append("引数e_KeyExpectedにヌルが指定されました。 e_KeyExpected=["); s.Append(ec_KeyExpected); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" this.TableName=["); s.Append(ec_TableName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_EmptyKeyField: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー903!", pg_Method); StringBuilder s = new StringBuilder(); s.Append("fieldで指定されたキーフィールドの名前が空文字列でした。 err_SKeyFldName=["); s.Append(err_SKeyFldName); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" this.TableName=["); s.Append(ec_TableName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_ZeroKeyField: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー902!", pg_Method); StringBuilder s = new StringBuilder(); s.Append("fieldで指定されたキーフィールドの個数が0個でした。 err_SKeyFldName=["); s.Append(err_SKeyFldName); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" this.TableName=["); s.Append(ec_TableName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_EmptySelectField: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー904!", pg_Method); StringBuilder s = new StringBuilder(); s.Append("selectで指定されたフィールドの名前に空文字列がありました。 err_SSelectedFldName=["); s.Append(err_SSelectedFldName); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" this.TableName=["); s.Append(ec_TableName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_ZeroSelectField: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー901!", pg_Method); StringBuilder s = new StringBuilder(); s.Append("selectで指定されたフィールドの個数が0個でした。 err_SSelectedFldName=["); s.Append(err_SSelectedFldName); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" this.TableName=["); s.Append(ec_TableName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; // エラー。 gt_Error_NotFoundTable: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー1011!", pg_Method); StringBuilder s = new StringBuilder(); s.Append(" ヌル=refTable"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" this.TableName=["); s.Append(ec_TableName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_NotFoundKeyFldDefinition: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー478!", pg_Method); StringBuilder t = new StringBuilder(); t.Append(" キーフィールドの定義を取得できませんでした。"); t.Append(Environment.NewLine); t.Append("「E■["); t.Append(ec_KeyFldName1.Cur_Configuration.Name); t.Append("]」、キーフィールド名=["); t.Append(ec_KeyFldName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); t.Append("]"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); // ヒント t.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = t.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_NotFoundSelectFldDefinition: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー479!", pg_Method); StringBuilder t = new StringBuilder(); t.Append(" 取得データが入っているはずのフィールドの定義を取得できませんでした。"); t.Append(Environment.NewLine); t.Append(" 指定されたフィールド名=["); t.Append(sSelectedFldName); t.Append("]"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); // ヒント t.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = t.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; gt_Error_NotFoundRecord: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー344!", pg_Method); string sDebugExceptedKey = ec_KeyExpected.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("【失敗】"); s.Newline(); s.Newline(); s.Append("["); s.Append(o_Table.Name); s.Append("](テーブル)には、"); s.Append(Environment.NewLine); s.Append("["); s.Append(ec_KeyFldName1.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); s.Append("]フィールドに"); s.Append("["); s.Append(sDebugExceptedKey); s.Append("]が入っているレコードは、見つかりませんでした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append("この入力したデータは、入力が確定されず、無視されています。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append("もしかして?"); s.Append(Environment.NewLine); s.Append(" ・ツールの不便さにより、手入力で"); s.Append(Environment.NewLine); s.Append(" 指定のテーブルに ID付きのレコードの空欄を"); s.Append(Environment.NewLine); s.Append(" 予め 作っておかなければならなかった、といった決まりごとはありませんか?"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" ・それとも、それ以外の理由?"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append("────────以下はプログラマー用の情報。"); s.Append(Environment.NewLine); // ヒント s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration)); r.Message = s.ToString(); //essageBox.Show(r.SMsg(log_Reports), Info_Forms.LibraryName + ":" + this.GetType().Name ); log_Reports.EndCreateReport(); } goto gt_EndMethod; // // gt_EndMethod: pg_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── protected void Execute6_Sub( Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static); log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute6_Sub", log_Reports); string sName_Fnc; this.TrySelectAttribute(out sName_Fnc, PmNames.S_NAME.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports); if (log_Reports.CanStopwatch) { log_Method.Log_Stopwatch.Message = "Nアクション[" + sName_Fnc + "]実行"; log_Method.Log_Stopwatch.Begin(); } //ScriptVariableフォルダー string pm_Folder_Source; this.TrySelectAttribute(out pm_Folder_Source, Expression_Node_Function47Impl.PM_FOLDER_SOURCE, EnumHitcount.One_Or_Zero, log_Reports); //書出し先ファイル Expression_Node_String fileExport_Expr; this.TrySelectAttribute(out fileExport_Expr, Expression_Node_Function47Impl.PM_FILE_EXPORT, EnumHitcount.One_Or_Zero, log_Reports); //書出し先フィールド Expression_Node_String fieldExport_Expr; this.TrySelectAttribute(out fieldExport_Expr, Expression_Node_Function47Impl.PM_FIELD_EXPORT, EnumHitcount.One, log_Reports); //フィルター指定 string pm_Filter; this.TrySelectAttribute(out pm_Filter, Expression_Node_Function47Impl.PM_FILTER, EnumHitcount.One_Or_Zero, log_Reports); pm_Filter = pm_Filter.Trim(); //サブフォルダー検索 string pm_Is_Search_Subfolder; this.TrySelectAttribute(out pm_Is_Search_Subfolder, Expression_Node_Function47Impl.PM_IS_SEARCH_SUBFOLDER, EnumHitcount.One_Or_Zero, log_Reports); //ポップアップ指定 string str_Popup; this.TrySelectAttribute(out str_Popup, Expression_Node_Function47Impl.PM_POPUP, EnumHitcount.One_Or_Zero, log_Reports); str_Popup = str_Popup.Trim(); //ディレクトリー階層を走査したい。 Filesystemreport filesystemreporter = new FilesystemreportImpl(); if (log_Reports.Successful) { Filesystemrunner runner = new FilesystemrunnerImpl(); //log_Method.WriteDebug_ToConsole("初回 pm_Folder_Source=[" + pm_Folder_Source + "] pm_Filter=[" + pm_Filter + "] pm_Is_Search_Subfolder=[" + pm_Is_Search_Subfolder + "]"); runner.Run( filesystemreporter, pm_Folder_Source, pm_Filter, pm_Is_Search_Subfolder, log_Reports ); } // 検索結果をCSVテーブルの形にして出力。 if (log_Reports.Successful) { StringBuilder sb = new StringBuilder(); sb.Append("NO,"); sb.Append(fieldExport_Expr.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports));// "FILE" sb.Append(",END"); sb.Append(Environment.NewLine); sb.Append("int,string,END"); sb.Append(Environment.NewLine); sb.Append("-1,ファイルパス,END"); sb.Append(Environment.NewLine); int field_No = 0; filesystemreporter.ForEach(delegate(string filesystementry, ref bool isBreak2, Log_Reports log_Reports2) { //連番 sb.Append(field_No); sb.Append(","); sb.Append(filesystementry); sb.Append(",END"); sb.Append(Environment.NewLine); field_No++; }, log_Reports); sb.Append("EOF,,"); sb.Append(Environment.NewLine); try { string sFile_Export2 = fileExport_Expr.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); System.IO.File.WriteAllText( sFile_Export2, sb.ToString(), Global.ENCODING_CSV ); if (str_Popup != S_BLOCK) { Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("ファイルに書き込みました。"); s.Newline(); s.Append("["); s.Append(sFile_Export2); s.Append("]"); s.Newline(); s.Newline(); s.Append("検索した場所:"); s.Newline(); s.Append("["); s.Append(pm_Folder_Source); s.Append("]"); s.Newline(); s.Newline(); s.Append("検索オプション(Pm:filter;):"); s.Newline(); s.Append("["); s.Append(pm_Filter); s.Append("]"); s.Newline(); MessageBox.Show(s.ToString(), "▲実行結果!(L02)"); } } catch (Exception ex) { // 異常時は必ずポップアップが出る。 MessageBox.Show( ex.Message, "▲エラー201!(" + log_Method.Fullname + ")#Write" ); } } log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── /// <summary> /// フィールドがなかった場合に、警告を作成してくれます。 /// </summary> /// <param name="fieldName"></param> /// <param name="c"></param> /// <param name="log_Reports"></param> /// <param name="dataSourceHintName"></param> /// <returns></returns> public static Value_Humaninput GetFieldvalue( string name_Field, DataRow row, bool isNoHitIsError, Log_Reports log_Reports, string nodeConfigtree_Datasource ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "Utility_Row", "GetFieldvalue", log_Reports); Value_Humaninput result; // ArgumentException予防 if (!row.Table.Columns.Contains(name_Field)) { // 該当なしの場合 result = null; if (isNoHitIsError) { // 指定のフィールドが、該当なしの場合エラーになる設定なら goto gt_Error_NotFoundField; } // 該当なしの場合エラーにならない設定なら、フィールドがなくても無視します。 // 正常 goto gt_EndMethod; } Exception err_Excp; try { // bug: 列名には、大文字・小文字の区別はないようです。 result = (Value_Humaninput)row[name_Field]; } catch (Exception e) { result = null; err_Excp = e; goto gt_Error_Exception; } if (isNoHitIsError && null == result) { goto gt_Error_Null; } // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_NotFoundField: // エラー。指定のフィールドが見つからなかった。 if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー603!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定のフィールド["); s.Append(name_Field); s.Append("]は、データソース["); s.Append(nodeConfigtree_Datasource); s.Append("]にはありませんでした。"); s.Append(Environment.NewLine); s.Append("テーブル名=["); s.Append(row.Table.TableName); s.Append("]"); s.Append(Environment.NewLine); //sB.Append("エラー型:"); //sB.Append(err_Excp.GetType().Name); //sB.Append(Environment.NewLine); //sB.Append("エラーメッセージ:"); //sB.Append(err_Excp.Message); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Exception: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー601!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定のフィールド["); s.Append(name_Field); s.Append("]の読取りに失敗しました。"); s.Append(Environment.NewLine); s.Append("テーブル名=["); s.Append(row.Table.TableName); s.Append("]"); s.Append(Environment.NewLine); s.Append("データソースヒント名:"); s.Append(nodeConfigtree_Datasource); s.Append(Environment.NewLine); s.Append("メッセージ:"); s.Append(err_Excp.Message); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Null: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー602!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("▲エラー4101!(" + Info_Table.Name_Library + ")"); s.Newline(); s.Append("指定のフィールド["); s.Append(name_Field); s.Append("]は、ヌルでした。"); s.Append(Environment.NewLine); s.Append("データソースヒント名:"); s.Append(nodeConfigtree_Datasource); s.Append(Environment.NewLine); s.Append("テーブル名=["); s.Append(row.Table.TableName); s.Append("]"); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── /// <summary> /// TODO:「,」「"」に対応したい。 /// /// /// 縦と横が逆のテーブル。 /// /// CSVを読取り、テーブルにして返します。 /// /// /// SRS仕様の実装状況 /// ここでは、先頭行を[0]行目と数えるものとします。 /// (1)CSVの[0]行目は列名です。 /// (2)CSVの[1]行目は型名です。 /// (3)CSVの[2]行目はコメントです。 /// /// (4)データ・テーブル部で、0列目に「EOF」と入っていれば終了。大文字・小文字は区別せず。 /// それ以降に、コメントのようなデータが入力されていることがあるが、フィールドの型に一致しないことがあるので無視。 /// TODO EOF以降の行も、コメントとして残したい。 /// /// (5)列名にENDがある場合、その手前までの列が有効データです。 /// END以降の列は無視します。 /// TODO END以降の行も、コメントとして残したい。 /// /// (6)int型として指定されているフィールドのデータ・テーブル部に空欄があった場合、DBNull(データベース用のヌル)とします。 /// </summary> /// <param name="csvText"></param> /// <returns>列名情報も含むテーブル。列の型は文字列型とします。</returns> public Table_Humaninput Read( string string_Csv, Request_ReadsTable forTable_Request, Format_Table forTable_Format, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Table.Name_Library, this, "Read", log_Reports); // // // // CsvLineParserImpl csvParser = new CsvLineParserImpl(); Table_Humaninput xenonTable = new Table_HumaninputImpl( forTable_Request.Name_PutToTable, forTable_Request.Expression_Filepath, forTable_Request.Expression_Filepath.Conf); xenonTable.Tableunit = forTable_Request.Tableunit; xenonTable.Typedata = forTable_Request.Typedata; xenonTable.IsDatebackupActivated = forTable_Request.IsDatebackupActivated; xenonTable.Format_Table_Humaninput = forTable_Format; // // 一旦、テーブルを全て読み込みます。 // List <List <string> > lines = new List <List <string> >(); { // CSVテキストを読み込み、型とデータのバッファーを作成します。 System.IO.StringReader reader = new System.IO.StringReader(string_Csv); while (-1 < reader.Peek()) { string sLine = reader.ReadLine(); List <string> tokens = new List <string>(); string[] sFields; sFields = csvParser.UnescapeLineToFieldList(sLine, this.charSeparator).ToArray(); int nColumnIndex = 0; foreach (string sToken in sFields) { if (nColumnIndex == 0 && ( ToCsv_Table_RowColRegularImpl_.S_EOL == sToken.Trim().ToUpper() || ToCsv_Table_RowColRegularImpl_.S_END == sToken.Trim().ToUpper() ) ) { // 1列目にENDがある場合、その手前までの列が有効データです。 // END以降の行は無視します。 goto row_end; } tokens.Add(sToken); nColumnIndex++; } lines.Add(tokens); } row_end: // ストリームを閉じます。 reader.Close(); } // // 型定義部 // // (※NO,ID,EXPL,NAME など、フィールドの定義を持つテーブル) // RecordFielddef recordFielddef = new RecordFielddefImpl(); // // データ・テーブル部 // List <List <string> > rows = new List <List <string> >(); // // まず、0列目、1列目、2列目のデータを読み取ります。 // int nRowIndex = 0; foreach (List <string> tokens in lines) { Fielddef fieldDefinition = null; int nColumnIndex = 0; foreach (string sToken in tokens) { if (0 == nColumnIndex) { // // 0列目は、フィールド名です。 // string sFieldName = sToken;//.Trim().ToUpper(); // テーブルのフィールドを追加します。型の既定値は文字列型とします。 fieldDefinition = new FielddefImpl(sFieldName, EnumTypeFielddef.String); recordFielddef.Add(fieldDefinition); } else if (1 == nColumnIndex) { // // 1列目は、フィールドの型名です。 // nColumnIndex = 1; string sFieldTypeNameLower = sToken.Trim().ToLower(); // テーブルのフィールドを追加します。型の既定値は文字列型とします。 // TODO int型とboolean型にも対応したい。 if (FielddefImpl.S_STRING.Equals(sFieldTypeNameLower)) { fieldDefinition.Type_Field = EnumTypeFielddef.String; } else if (FielddefImpl.S_INT.Equals(sFieldTypeNameLower)) { fieldDefinition.Type_Field = EnumTypeFielddef.Int; } else if (FielddefImpl.S_BOOL.Equals(sFieldTypeNameLower)) { fieldDefinition.Type_Field = EnumTypeFielddef.Bool; } else { // 型が未定義の列は、文字列型として読み取ります。 // TODO: 警告。(エラーではない) Log_TextIndented t = new Log_TextIndentedImpl(); t.Append("▲エラー45!(" + Info_Table.Name_Library + ")"); t.Newline(); t.Append("型の名前を記入してください。"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); t.Append("※縦と横がひっくり返っているテーブルと指定されています。"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); t.Append("1列目(先頭を0とする)に、型の名前は必須です。"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); t.Append("["); t.Append(fieldDefinition.Name_Humaninput); t.Append("]フィールド (["); t.Append(nRowIndex); t.Append("]行目)に、"); t.Append(Environment.NewLine); t.Append("型名が["); t.Append(sFieldTypeNameLower); t.Append("]と入っています。この名前には、未対応です。"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); t.Append("文字列型として続行します。"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); t.Append("テーブル名=["); t.Append(forTable_Request.Name_PutToTable); t.Append("]"); t.Append(Environment.NewLine); t.Append("ファイル・パス=["); t.Append(forTable_Request.Expression_Filepath.Humaninput); t.Append("]"); t.Append(Environment.NewLine); t.Append(Environment.NewLine); string sWarning = t.ToString(); MessageBox.Show(sWarning, "▲警告!(L02)"); fieldDefinition.Type_Field = EnumTypeFielddef.String; } } else if (2 == nColumnIndex) { // // 2列目は、フィールドのコメントとします。 // nColumnIndex = 2; { fieldDefinition.Comment = sToken; } } else { // // 3列目から右側は、データ・テーブル部。 // if (0 == nRowIndex) { // // 先頭行 // // // 「EOF」というトークンが出てくるまで。 // if (ToCsv_Table_RowColRegularImpl_.S_EOF == sToken.Trim().ToUpper()) { goto column_end; } List <string> record = new List <string>(); // 1番目のフィールド_データを追加。 record.Add(sToken); rows.Add(record); } else { // // 2番目以降のフィールド_データを追加。 // // // 先頭の3つのレコード分、切り詰めます。 // int nDataIndex = nColumnIndex - 3; if (nDataIndex < rows.Count) { List <string> record = rows[nDataIndex]; record.Add(sToken); } else { // 無視 } } } nColumnIndex++; }//c column_end: nRowIndex++; } //essageBox.Show("CSV読取終わり1 rows.Count=[" + rows.Count + "]", "TableCsvLibデバッグ"); // テーブル作成。テーブルのフィールド型定義と、データ本体をセットします。 xenonTable.CreateTable(recordFielddef, log_Reports); if (log_Reports.Successful) { xenonTable.AddRecordList(rows, recordFielddef, log_Reports); //essageBox.Show("CSV読取後のテーブル作成終わり", "TableCsvLibデバッグ"); } goto gt_EndMethod; // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(xenonTable); }
//──────────────────────────────────────── private List <List <string> > ToModel( Table_Humaninput table, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "ToModel", log_Reports); Fielddef err_FldDef; // 「フィールド定義部」「データ部」両方含むテーブル。 List <List <string> > rsltTable = new List <List <string> >(); // フィールド名をカンマ区切りで出力します。最後にENDを付加します。 // フィールド定義部 //List<Fielddef> list_FieldDefinition = table.List_Fielddef; // データ・テーブル部 DataTable dataTable = table.DataTable; // 「END,END,END...」行を除く、行数。 int nHorizontalCountExceptEnd = table.RecordFielddef.Count; //essageBox.Show("「END,END,END...」行を除く、行数=[" + horizontalCountExceptEnd + "]", this.GetType().Name + "#Textize_rowColReversed: (Table)"); bool bAllIntFields = table.Format_Table_Humaninput.IsAllintfieldsActivated; DataRow dataRow; string sCellValue; // // フィールド名の行 // { List <string> sList_FieldNameRow = new List <string>(); table.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak2, Log_Reports log_Reports2) { if (this.O_ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { sList_FieldNameRow.Add(fielddefinition.Name_Humaninput); } }, log_Reports); rsltTable.Add(sList_FieldNameRow); } // // 型名の行 // if (bAllIntFields) { // // 全部 int型フィールドなので、型名を記述しない場合。 // } else { // // 型名を記述する場合。 // List <string> sList_FieldTypeRow = new List <string>(); table.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak2, Log_Reports log_Reports2) { if (this.O_ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { switch (fielddefinition.Type_Field) { case EnumTypeFielddef.String: { sList_FieldTypeRow.Add(FielddefImpl.S_STRING); } break; case EnumTypeFielddef.Int: { sList_FieldTypeRow.Add(FielddefImpl.S_INT); } break; case EnumTypeFielddef.Bool: { sList_FieldTypeRow.Add(FielddefImpl.S_BOOL); } break; default: { // TODO エラー対応。 // 未定義の型があった場合、そのまま出力します。 // C#のメッセージになるかと思います。 sList_FieldTypeRow.Add(fielddefinition.ToString_Type()); } break; } } }, log_Reports); } // // コメント行 // { List <string> sList_FieldNameRow = new List <string>(); table.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak2, Log_Reports log_Reports2) { if (this.O_ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { sList_FieldNameRow.Add(fielddefinition.Comment); } }, log_Reports); rsltTable.Add(sList_FieldNameRow); } // // データ部(フィールド定義部の次の行から始まるテーブル) // { // 「列定義」「EOF」列を除く、「データ部」だけの列数。 int nDataCount = dataTable.Rows.Count; for (int nR = 0; nR < nDataCount; nR++) { dataRow = dataTable.Rows[nR]; object[] itemArray = dataRow.ItemArray;//ItemArrayは1回の呼び出しが重い。 List <string> sList_DtRow = new List <string>(); int indexColumn = 0; table.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak2, Log_Reports log_Reports2) { if (this.O_ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { if (itemArray[indexColumn] is Cell) { sCellValue = ((Cell)itemArray[indexColumn]).Text; } else { // (11)エラー err_FldDef = fielddefinition; isBreak2 = true; goto gt_Error_UndefinedFieldType; } sList_DtRow.Add(sCellValue); } goto gt_EndInnermethod; // #region 異常系 //──────────────────────────────────────── gt_Error_UndefinedFieldType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー455!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("(プログラム内部エラー)未定義のフィールド型=["); s.Append(err_FldDef.ToString_Type()); s.Append("]"); s.Newline(); // ヒント r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndInnermethod; //──────────────────────────────────────── #endregion // gt_EndInnermethod: indexColumn++; }, log_Reports); rsltTable.Add(sList_DtRow); } } goto gt_EndMethod; // gt_EndMethod: log_Method.EndMethod(log_Reports); return(rsltTable); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── /// <summary> /// 「"」や「,」には対応していない。 /// </summary> /// <param name="table"></param> /// <param name="log_Reports"></param> /// <returns></returns> public string ToCsvText( Table_Humaninput table, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "ToCsvText", log_Reports); string sResult = ""; // // // (0) // // if (null == table) { // エラー goto gt_Error_NullTable; } // // // テーブルは、次の処理が一番重い。 // // object[] dataRowItems = dataRow.ItemArray; // // 行から列一覧を取得する処理は、最大で、行数と同じ値までにしたい。 // // // // // (1) // // List <List <string> > rsltTable = this.ToModel(table, log_Reports); if (!log_Reports.Successful) { // 既エラー。 goto gt_EndMethod; } sResult = this.ToText(rsltTable, table); goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_NullTable: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー452!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("(プログラム内部エラー)tableがヌルでした。"); s.Newline(); // ヒント r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(sResult); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── /// <summary> /// DataRow → Dictionary /// </summary> /// <param name="row"></param> /// <param name="log_Reports"></param> public void Add(DataRow row, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "Add", log_Reports); Dictionary <string, Value_Humaninput> record = new Dictionary <string, Value_Humaninput>(); int nFieldCount = row.ItemArray.Length; for (int nFieldIndex = 0; nFieldIndex < nFieldCount; nFieldIndex++) { // フィールド名 string sFieldName = xenonTable.RecordFielddefinition.ValueAt(nFieldIndex).Name_Trimupper; // 値 Value_Humaninput oValue; if (row[nFieldIndex] is DBNull) { //// デバッグ //if (true) //{ //Log_TextIndented txt = new Log_TextIndentedImpl(); // txt.Append(InfxenonTable.LibraryName + ":" + this.GetType().Name + "#Add:【ヌル】"); // txt.Append(" field=[" + sFieldName + "]"); // ystem.Console.WriteLine(txt.ToString()); //} String sConfigStack = xenonTable.Expression_Filepath_ConfigStack.Execute4_OnExpressionString( EnumHitcount.Unconstraint, log_Reports); if (!log_Reports.Successful) { // 既エラー。 goto gt_EndMethod; } EnumTypeFielddefinition typeField = xenonTable.RecordFielddefinition.ValueAt(nFieldIndex).Type_Field; switch (typeField) { case EnumTypeFielddefinition.String: oValue = new String_HumaninputImpl(sConfigStack); break; case EnumTypeFielddefinition.Int: oValue = new Int_HumaninputImpl(sConfigStack); break; case EnumTypeFielddefinition.Bool: oValue = new Bool_HumaninputImpl(sConfigStack); break; default: // エラー。 goto gt_Error_UndefinedType; } } else { oValue = (Value_Humaninput)row[nFieldIndex]; //// デバッグ //if (true) //{ //Log_TextIndented txt = new Log_TextIndentedImpl(); // txt.Append(InfxenonTable.LibraryName + ":" + this.GetType().Name + "#Add:【○】"); // txt.Append(" 値=[" + oValue.HumanInputString + "]"); // ystem.Console.WriteLine(txt.ToString()); //} } record.Add(sFieldName, oValue); } this.List_Field.Add(record); // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_UndefinedType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー293!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 未定義の型です。プログラムのミスの可能性があります。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return; }
//──────────────────────────────────────── /// <summary> /// コンストラクター。 /// </summary> /// <param name="sName_Pm"></param> /// <param name="log_Reports"></param> public PmNameImpl_(string sName_Pm) { Log_Method pg_Method = new Log_MethodImpl(0); Log_Reports log_Reports_ThisMethod = new Log_ReportsImpl(pg_Method); pg_Method.BeginMethod(Info_Middle.Name_Library, this, "PmNameImpl_", log_Reports_ThisMethod); if (sName_Pm.StartsWith(PmNames.S_PM) && sName_Pm.EndsWith(PmNames.S_SEMICOLON)) { // "Pm:"で始まり、";"で終わる。 this.name_Pm = sName_Pm; this.name_Attribute = sName_Pm.Substring(3, sName_Pm.Length - 4); if ("" == this.name_Attribute) { // エラー。 goto gt_Error_Format; } } else { // エラー。 goto gt_Error_Format; } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_Format: if (log_Reports_ThisMethod.CanCreateReport) { Log_RecordReports r = log_Reports_ThisMethod.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー36!", pg_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("pm引数フォーマットエラー 入力=["); s.Append(sName_Pm); s.Append("] Attr部=["); s.Append(this.Name_Attribute); s.Append("] pm部=["); s.Append(this.Name_Pm); s.Append("]"); s.Newline(); s.Append("[" + PmNames.S_PM + "]で始まり、「;」で終わらなければなりません。また、名前は空文字列であってはいけません。"); s.Newline(); s.Newline(); r.Message = s.ToString(); log_Reports_ThisMethod.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: pg_Method.EndMethod(log_Reports_ThisMethod); log_Reports_ThisMethod.EndLogging(pg_Method); }
//──────────────────────────────────────── /// <summary> /// リスト・ビューに、テーブルをセットします。 /// </summary> public void SetDataSourceToListView( Table_Humaninput xenonTable, ListView listView, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "SetDataSourceToListView", log_Reports); DataTable dataTable = xenonTable.DataTable; listView.Clear(); // リスト・ビューにフィールドを追加します。 xenonTable.RecordFielddefinition.ForEach(delegate(Fielddefinition fielddefinition, ref bool isBreak2, Log_Reports log_Reports2) { // 列を追加します。見出しと幅も設定します。 Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(fielddefinition.Name_Humaninput); if (this.IsVisibled_Fieldtype) { // デバッグ用に、フィールドの型もヘッダーに表示する場合。 s.Append(":"); s.Append(fielddefinition.ToString_Type()); } listView.Columns.Add(s.ToString(), 90); }, log_Reports); for (int index_Row = 0; index_Row < dataTable.Rows.Count; index_Row++) { DataRow row = dataTable.Rows[index_Row]; ListViewItem item = null; object[] recordFields = row.ItemArray;//ItemArrayは1回の呼び出しが重い。 for (int indexColumn = 0; indexColumn < recordFields.Length; indexColumn++) { object columnObject = recordFields[indexColumn]; if (columnObject is Value_Humaninput) { Value_Humaninput valueH = (Value_Humaninput)columnObject; string valueField = valueH.Text; // レコードを作成します。 if (0 == indexColumn) { // 最初の列の場合は、行追加になります。 // 文字列を追加。 item = new ListViewItem(valueField); listView.Items.Add(item); } else { // 最初の列より後ろは、列追加になります。 // 文字列を追加。 item.SubItems.Add(valueField); } } else if (columnObject is DBNull) { // 空欄、または列データを未設定。 goto gt_Error_DBNull; } else { //エラー goto gt_Error_UnknownType; } } } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_DBNull: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー201!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Newline(); s.Append("列が未設定(DBNull)。テーブル名=[" + xenonTable.Name + "]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_UnknownType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー202!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Newline(); s.Append("未定義の型の列。テーブル名=[" + xenonTable.Name + "]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return; }
//──────────────────────────────────────── public static Value_Humaninput NewInstance( object value, bool isRequired, string nodeConfigtree, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "Utility_HumaninputValue", "NewInstance", log_Reports); Value_Humaninput result; if (value is String_HumaninputImpl) { result = new String_HumaninputImpl(nodeConfigtree); } else if (value is Int_HumaninputImpl) { result = new Int_HumaninputImpl(nodeConfigtree); } else if (value is Bool_HumaninputImpl) { result = new Bool_HumaninputImpl(nodeConfigtree); } else { result = null; if (isRequired) { //エラー goto gt_Error_AnotherType; } } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー292!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("▲エラー201!(" + Info_Table.Name_Library + ")"); s.Newline(); s.Append("string,int,boolセルデータクラス以外のオブジェクトが指定されました。"); s.Newline(); s.Append("指定された値のクラス=["); s.Append(value.GetType().Name); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── public void Judge( out bool isJudge, string name_KeyField, string value_Expected, bool isRequired_ExpectedValue, DataRow row, Conf_String parent_Query, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Table.Name_Library, this, "Judge", log_Reports); // // // // try { Cell valueH = (Cell)row[name_KeyField]; // (5)キーが空欄で、検索ヒット必須でなければ、無視します。【bool型フィールドの場合】 if (BoolCellImpl.IsSpaces(valueH)) { isJudge = false; goto gt_EndMethod; } // // (6)この行の、キー_フィールドの値を取得。 // bool isKeyValue; bool isParsedSuccessful = BoolCellImpl.TryParse( valueH, out isKeyValue, EnumOperationIfErrorvalue.Error, null, log_Reports ); if (log_Reports.Successful) { if (!isParsedSuccessful) { // エラー。 isJudge = false; if (log_Reports.CanCreateReport) { Log_RecordReports d_Report = log_Reports.BeginCreateReport(EnumReport.Error); d_Report.SetTitle("▲エラー699!", log_Method); d_Report.Message = "bool型パース失敗。"; log_Reports.EndCreateReport(); } goto gt_EndMethod; } } bool isExpectedValue; if (log_Reports.Successful) { // (8)キー値をbool型に変換します。 bool isParseSuccessful2 = bool.TryParse(value_Expected, out isExpectedValue); if (!isParseSuccessful2) { isJudge = false; if (isRequired_ExpectedValue) { // 空値ではダメという設定の場合。 goto gt_Error_Parse; } goto gt_EndMethod; } } else { isExpectedValue = false; } // (8)該当行をレコードセットに追加。 if (log_Reports.Successful) { if (isKeyValue == isExpectedValue) { isJudge = true; } else { isJudge = false; } } else { isJudge = false; } } catch (RowNotInTableException) { // (9)指定行がなかった場合は、スルー。 isJudge = false; // // 指定の行は、テーブルの中にありませんでした。 // 再描画と、行の削除が被ったのかもしれません。 // いわゆる「処理中」です。 // //.WriteLine(this.GetType().Name+"#GetValueStringList: ["+refTable.Name+"]テーブルには、["+ttbwIndex+"]行が存在しませんでした。もしかすると、削除されたのかもしれません。エラー:"+e.Message); } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_Parse: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー286!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.AppendI(0, "<Select_KeyBoolImplクラス>"); s.Append(Environment.NewLine); s.AppendI(1, "これはbool型値のプログラムです。他の型のプログラムを使ってください。"); s.Append(Environment.NewLine); s.AppendI(1, "sExpectedValue=["); s.Append(value_Expected); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント parent_Query.ToText_Locationbreadcrumbs(s); s.AppendI(0, "</Select_KeyBoolImplクラス>"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── public static bool TryParse( object value, out Value_Humaninput out_ValueH, bool isRequired, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "Utility_HumaninputValue", "TryParse", log_Reports); bool bResult; if (value is Value_Humaninput) { out_ValueH = (Value_Humaninput)value; bResult = true; } else { out_ValueH = null; bResult = false; if (isRequired) { goto gt_Error_AnotherType; } goto gt_EndMethod; } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー201!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("string,int,boolセルデータクラス以外のオブジェクトが指定されました。"); s.Newline(); s.Append("指定された値のクラス=["); s.Append(value.GetType().Name); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); return(bResult); }
//──────────────────────────────────────── static public bool TryParse( object data, out string s_Out, string debugConfigStack_Table, string debugConfigStack_Field, Log_Method log_Method, Log_Reports log_Reports) { bool isResult; if (data is StringCellImpl) { s_Out = ((StringCellImpl)data).GetString(); isResult = true; } else if (data is DBNull) { // // 空欄は空文字列に。 s_Out = ""; isResult = true; } else if (null == data) { // // エラー goto gt_Error_Null; } else if (!(data is Cell)) { // // エラー goto gt_Error_NotCellData; } else { // // エラー goto gt_Error_AnotherType; } // 正常 goto gt_EndMethod; // // エラー。 //──────────────────────────────────────── gt_Error_Null: s_Out = "";//ゴミ値 isResult = false; if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー241!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定の引数dataに、StringCellData型の値を指定してください。空っぽ(null)でした。"); s.Append(Environment.NewLine); s.Append("debugHintName=["); s.Append(debugConfigStack_Table); s.Append("."); s.Append(debugConfigStack_Field); s.Append("]"); s.Append(Environment.NewLine); s.Append("debugRunningHintName=["); s.Append(log_Method.Fullname); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_NotCellData: s_Out = "";//ゴミ値 isResult = false; if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー243!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、CellData型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" 別の型[" + data.GetType().Name + "でした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append("debugHintName=["); s.Append(debugConfigStack_Table); s.Append("."); s.Append(debugConfigStack_Field); s.Append("]"); s.Append(Environment.NewLine); s.Append("debugRunningHintName=["); s.Append(log_Method.Fullname); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_AnotherType: s_Out = "";//ゴミ値 isResult = false; if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー244!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定の引数の値["); s.Append(((Cell)data).Text); s.Append("]は、StringCellData型ではありませんでした。"); s.Append(Environment.NewLine); s.Append("debugHintName=["); s.Append(debugConfigStack_Table); s.Append("."); s.Append(debugConfigStack_Field); s.Append("]"); s.Append(Environment.NewLine); s.Append("debugRunningHintName=["); s.Append(log_Method.Fullname); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── // // gt_EndMethod: return(isResult); }
//──────────────────────────────────────── /// <summary> /// O_TableImpl#AddRecordListで使います。 /// </summary> /// <param name="columnIndex"></param> /// <param name="value"></param> /// <param name="oTable"></param> /// <param name="log_Reports"></param> /// <returns></returns> public static Value_Humaninput ConfigurationTo_Field( int index_Column, string value, RecordFielddefinition recordFielddefinition, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Table.Name_Library, "Utility_Row", "ConfigurationTo_Field", log_Reports); // // // セルのソースヒント名 string nodeConfigtree; try { nodeConfigtree = recordFielddefinition.ValueAt(index_Column).Name_Humaninput; } catch (ArgumentOutOfRangeException) { // エラー goto gt_Error_Index; } Value_Humaninput result; // 型毎に処理を分けます。 switch (recordFielddefinition.ValueAt(index_Column).Type_Field) { case EnumTypeFielddefinition.Int: { // 空白データも自動処理 Int_HumaninputImpl cellData = new Int_HumaninputImpl(nodeConfigtree); cellData.Text = value; result = cellData; } break; case EnumTypeFielddefinition.Bool: { // 空白データも自動処理 Bool_HumaninputImpl cellData = new Bool_HumaninputImpl(nodeConfigtree); cellData.Text = value; result = cellData; } break; default: { String_HumaninputImpl cellData = new String_HumaninputImpl(nodeConfigtree); cellData.Text = value; result = cellData; } break; } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_Index: result = null; if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー461!", log_Method); Log_TextIndented t = new Log_TextIndentedImpl(); t.Append("列インデックス[" + index_Column + "](0スタート)が指定されましたが、"); t.Newline(); t.Append("列は[" + recordFielddefinition.Count + "]個しかありません。(列定義リストは、絞りこまれている場合もあります)"); t.Newline(); // ヒント r.Message = t.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── public void CreateErrorReport( string errorSymbol, Builder_TexttemplateP1p texttemplateBuilder_ParameterSetted, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static); log_Method.BeginMethod(Info_MiddleImpl.Name_Library, this, "CreateErrorReport", log_Reports); // int errorNumber; { string tempErrorSymbol = errorSymbol; if (tempErrorSymbol.StartsWith("Er:")) { tempErrorSymbol = tempErrorSymbol.Substring(3); if (tempErrorSymbol.EndsWith(";")) { tempErrorSymbol = tempErrorSymbol.Substring(0, tempErrorSymbol.Length - 1); if (int.TryParse(tempErrorSymbol, out errorNumber)) { } else { goto gt_Error_Symbol; } } else { goto gt_Error_Symbol; } } else { goto gt_Error_Symbol; } } if (log_Reports.CanCreateReport) { string strTypedata = ValuesTypeData.S_TABLE_ERRORMESSAGES; Configurationtree_Node cur_Ct = new Configurationtree_NodeImpl(log_Method.Fullname, null); List <Table_Humaninput> tables = this.MemoryTables.GetTable_HumaninputByTypedata( new Expression_Leaf_StringImpl(strTypedata, null, cur_Ct), true, log_Reports); bool hit = false; foreach (Table_Humaninput table in tables) { foreach (DataRow dataRow in table.DataTable.Rows) { Int_HumaninputImpl xenonValue_Int = (Int_HumaninputImpl)dataRow["ID"]; int valueInt; xenonValue_Int.TryGet(out valueInt); if (valueInt == errorNumber) { //ヒット hit = true; Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("Er:" + errorNumber + ";", log_Method); String_HumaninputImpl xenonValue_String = (String_HumaninputImpl)dataRow["MESSAGE"]; string valueStr; xenonValue_String.TryGet(out valueStr); texttemplateBuilder_ParameterSetted.Text = valueStr; r.Message = texttemplateBuilder_ParameterSetted.Compile(log_Reports).Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); //log_Method.WriteDebug_ToConsole(texttemplateBuilder_ParameterSetted.Compile(log_Reports).Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports)); goto gt_EndLoop1; } } } gt_EndLoop1: if (!hit) { //エラーメッセージの登録がない。 Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("Er:0;", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("エラーメッセージテーブルに、エラーメッセージの登録がありませんでした。\n%1%=[%2%]\nテーブル数=[%3%]"); Builder_TexttemplateP1p tmpl = new Builder_TexttemplateP1pImpl(s.ToString()); tmpl.SetParameter(1, NamesFld.S_TYPE_DATA, log_Reports); tmpl.SetParameter(2, strTypedata, log_Reports); tmpl.SetParameter(3, tables.Count.ToString(), log_Reports); r.Message = tmpl.Compile(log_Reports).Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports); } log_Reports.EndCreateReport(); } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_Symbol: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー204!", log_Method); StringBuilder s = new StringBuilder(); s.Append("エラーシンボルがおかしい。[" + errorSymbol + "]。プログラムのミス?"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── static public bool TryParse( object data, out bool isValue_Out, EnumOperationIfErrorvalue enumCellDataErrorSupport, object altValue, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "XenonValue_BoolImpl", "TryParse", log_Reports); bool bResult; BoolCellImpl err_BoolCellData; if (data is Boolean) { isValue_Out = (bool)data; bResult = true; } else if (data is BoolCellImpl) { BoolCellImpl boolCellData = (BoolCellImpl)data; if (boolCellData.IsSpaces()) { // 空白の場合 if (EnumOperationIfErrorvalue.Spaces_To_Alt_Value == enumCellDataErrorSupport) { if (altValue is bool) { isValue_Out = (bool)altValue; bResult = true; } else { // エラー isValue_Out = false;//ゴミ値 bResult = false; err_BoolCellData = boolCellData; goto gt_Error_AnotherType; } } else { // エラー isValue_Out = false;//ゴミ値 bResult = false; err_BoolCellData = boolCellData; goto gt_Error_EmptyString; } } else if (!boolCellData.isValidated) { // エラー(変換に失敗した場合) isValue_Out = false;//ゴミ値 bResult = false; err_BoolCellData = boolCellData; goto gt_Error_Invalid; } else { isValue_Out = boolCellData.GetBool(); bResult = true; } } else if (null == data) { // エラー isValue_Out = false;//ゴミ値 bResult = false; goto gt_Error_Null; } else if (!(data is Cell)) { // エラー isValue_Out = false;//ゴミ値 bResult = false; goto gt_Error_AnotherTypeData; } else { // エラー isValue_Out = false;//ゴミ値 bResult = false; goto gt_Error_Class; } // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー543!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" altValue引数には、bool型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" boolセル値=["); s.Append(err_BoolCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); err_BoolCellData.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_EmptyString: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー531!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" セルに、bool型の値を入れてください。空欄にしないでください。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" boolセル値=["); s.Append(err_BoolCellData.Text); s.Append("]"); // // ヒント err_BoolCellData.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Invalid: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー112!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" bool型に変換できませんでした。["); s.Append(err_BoolCellData.Text); s.Append("]"); // // ヒント err_BoolCellData.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Null: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー231!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、BoolCellData型の値を指定してください。空っぽでした。"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_AnotherTypeData: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー332!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" bool型のデータを入れるところで、"); s.Append(Environment.NewLine); s.Append(" 別の型[" + data.GetType().Name + "]でした。"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Class: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー233!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定の引数の値["); s.Append(((Cell)data).Text); s.Append("]は、BoolCellData型ではありませんでした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 型=["); s.Append(data.GetType().Name); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(bResult); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── protected override void Parse_SAttribute( XmlElement cur_X, Configurationtree_Node cur_Cf, MemoryApplication memoryApplication, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "Parse_SAttr", log_Reports); // // // // name属性は必須。 // string sName_Fnc = cur_X.GetAttribute(PmNames.S_NAME.Name_Attribute); if ("" == sName_Fnc) { goto gt_Error_UndefinedFncNameAttr; } XmlAttribute err_XAttr = null; if (NamesFnc.S_CELL == sName_Fnc) { foreach (XmlAttribute xAttr in cur_X.Attributes) { // ② // name,description PmName pmName = PmNames.FromSAttribute(xAttr.Name); if (null != pmName) { cur_Cf.Dictionary_Attribute.Add(pmName.Name_Pm, xAttr.Value, cur_Cf, true, log_Reports); } else { err_XAttr = xAttr; goto gt_Error_UndefinedAttr; } } } else if (NamesFnc.S_SWITCH == sName_Fnc) { foreach (XmlAttribute xAttr in cur_X.Attributes) { // ③ // name,description PmName pmName = PmNames.FromSAttribute(xAttr.Name); if (null != pmName) { cur_Cf.Dictionary_Attribute.Add(pmName.Name_Pm, xAttr.Value, cur_Cf, true, log_Reports); } else { err_XAttr = xAttr; goto gt_Error_UndefinedAttr; } } } else if (NamesFnc.S_CASE == sName_Fnc) { foreach (XmlAttribute xAttr in cur_X.Attributes) { // ④ // name,description PmName pmName = PmNames.FromSAttribute(xAttr.Name); if (null != pmName) { cur_Cf.Dictionary_Attribute.Add(pmName.Name_Pm, xAttr.Value, cur_Cf, true, log_Reports); } else { err_XAttr = xAttr; goto gt_Error_UndefinedAttr; } } } else if (NamesFnc.S_VALUE_CONTROL == sName_Fnc) { foreach (XmlAttribute xAttr in cur_X.Attributes) { // ⑤ // name,description PmName pmName = PmNames.FromSAttribute(xAttr.Name); if (null != pmName) { cur_Cf.Dictionary_Attribute.Add(pmName.Name_Pm, xAttr.Value, cur_Cf, true, log_Reports); } else { err_XAttr = xAttr; goto gt_Error_UndefinedAttr; } } // value属性の指定がなければ、このコントロールの名前を入れておく。 if (!cur_Cf.Dictionary_Attribute.ContainsKey(PmNames.S_VALUE.Name_Pm)) { Configurationtree_Node owner_Configurationtree_Control; if (!(cur_Cf.Parent is Configurationtree_Node)) { //todo:エラーか? owner_Configurationtree_Control = null; goto gt_Error_UndefinedClass; } else { Configurationtree_Node parent_Cf = (Configurationtree_Node)cur_Cf.Parent; if (NamesNode.S_CONTROL1 == parent_Cf.Name) { owner_Configurationtree_Control = parent_Cf; } else { Configuration_Node parent2 = parent_Cf.GetParentByNodename( NamesNode.S_CONTROL1, EnumConfiguration.Tree, true, log_Reports); if (log_Reports.Successful) { owner_Configurationtree_Control = (Configurationtree_Node)parent2; } else { owner_Configurationtree_Control = null; } } } if (null != owner_Configurationtree_Control) { if (owner_Configurationtree_Control.Dictionary_Attribute.ContainsKey(PmNames.S_NAME.Name_Pm)) { string sFcName; owner_Configurationtree_Control.Dictionary_Attribute.TryGetValue(PmNames.S_NAME, out sFcName, true, log_Reports); cur_Cf.Dictionary_Attribute.Add(PmNames.S_VALUE.Name_Pm, sFcName, cur_Cf, true, log_Reports); } } } } else if (NamesFnc.S_RECORD_SET_SAVE_TO2 == sName_Fnc) { foreach (XmlAttribute xAttr in cur_X.Attributes) { string xName_AttrTrim = xAttr.Name.Trim(); if ( PmNames.S_REQUIRED.Name_Attribute == xAttr.Name || // 特にS→Eにパースは無い PmNames.S_FROM.Name_Attribute == xAttr.Name || // Xn_L07_SToE:SToE_F_5FElem/Xn_L07_SToE:SToE_F_A6FromImpl PmNames.S_STORAGE.Name_Attribute == xAttr.Name || // 特にS→Eにパースは無い PmNames.S_FIELD.Name_Attribute == xAttr.Name // 特にS→Eにパースは無い ) { // // 属性=”” cur_Cf.Dictionary_Attribute.Add(xAttr.Name, xAttr.Value, cur_Cf, true, log_Reports); } else { // // エラー。 err_XAttr = xAttr; goto gt_Error_UndefinedAttr; } }//foreach } else { foreach (XmlNode xAttr in cur_X.Attributes) { // とりあえず、どんな属性名でも受け入れる。 if (log_Method.CanDebug(1)) { log_Method.WriteDebug_ToConsole("<fnc name=”[" + sName_Fnc + "]”>の属性 " + xAttr.Name + "=”" + xAttr.Value + "”"); } // // value="" // // ⑥ PmName pmName = PmNames.FromSAttribute(xAttr.Name); if (null != pmName) { cur_Cf.Dictionary_Attribute.Add(pmName.Name_Pm, xAttr.Value, cur_Cf, true, log_Reports); } else { cur_Cf.Dictionary_Attribute.Add(xAttr.Name, xAttr.Value, cur_Cf, true, log_Reports); } // // 子<arg1>は、ここでは処理しない。 // } } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_UndefinedAttr: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー336!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("["); s.Append(cur_X.Name); s.Append("]要素を探索中に、未対応の属性が記述されていました。"); s.Newline(); s.Append("xAttr.Name=["); s.Append(err_XAttr.Name); s.Append("]"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(cur_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_UndefinedFncNameAttr: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー413!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("<fnc>要素に、name属性が指定されていませんでした。"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(cur_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_UndefinedClass: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー341!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("何らかのエラー。"); s.Newline(); // ヒント s.Append(r.Message_Configuration(cur_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── /// <summary> /// 指定のフィールド名だけに絞り込んだサブテーブルを作って返します。 /// </summary> /// <param name="sFieldNameList"></param> /// <returns></returns> public static Table_Humaninput CreateSubTableBySelect( string name_NewTable, List <string> list_Src_SNewFieldName, Expression_Node_Filepath expr_Fpath_NewTable, EnumLogic enumWhereLogic, List <Recordcondition> list_Reccond, Table_Humaninput src_XenonTable, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Table.Name_Library, "Util_Table", "CreateSubTableBySelect", log_Reports); // // // // Table_Humaninput tableH_New = new Table_HumaninputImpl( name_NewTable, expr_Fpath_NewTable, expr_Fpath_NewTable.Cur_Configuration); RecordFielddefinition recordFielddefinigion_New; List <List <string> > sFieldListList; Utility_Table.SelectFieldListList( out sFieldListList, out recordFielddefinigion_New, enumWhereLogic, list_Src_SNewFieldName, list_Reccond, src_XenonTable, log_Reports ); // // 新しいテーブルを作成します。(列定義の追加) // tableH_New.CreateTable(recordFielddefinigion_New, log_Reports); if (tableH_New.DataTable.Columns.Count < 1) { // エラー。 goto gt_Error_ZeroField; } else if (tableH_New.RecordFielddefinition.Count < 1) { // エラー。 goto gt_Error_ZeroFieldDef; } // 不要なレコードを除去して絞り込んだ後で、 // レコード追加。 { tableH_New.AddRecordList(sFieldListList, recordFielddefinigion_New, log_Reports); } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_ZeroField: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー471!", log_Method); Log_TextIndented t = new Log_TextIndentedImpl(); t.Append(" フィールドが0件のテーブルを作ることはできません。newFldDefList=["); t.Append(recordFielddefinigion_New.Count); t.Append("]"); t.Newline(); t.Newline(); // ヒント r.Message = t.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_ZeroFieldDef: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー472!", log_Method); Log_TextIndented t = new Log_TextIndentedImpl(); t.Append(" フィールド定義が0件のテーブルを作ることはできません。o_NewTable.FieldDefinitions.Count=["); t.Append(tableH_New.RecordFielddefinition.Count); t.Append("]"); t.Newline(); t.Newline(); // ヒント r.Message = t.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(tableH_New); }
//──────────────────────────────────────── protected override Configurationtree_Node CreateMyself( XmlElement cur_X, Configurationtree_Node parent_Cf, MemoryApplication memoryApplication, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(1); log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "CreateMyself", log_Reports); if (log_Method.CanDebug(1)) { } // // Configurationtree_Node cur_Cf = null; // // name属性は必須。 // string sName_Fnc = cur_X.GetAttribute(PmNames.S_NAME.Name_Attribute); if ("" == sName_Fnc) { goto gt_Error_UndefinedFncNameAttr; } // // if ( NamesFnc.S_CELL == sName_Fnc || //Sf:cell; NamesFnc.S_WHERE == sName_Fnc || //Sf:where; NamesFnc.S_REC_COND == sName_Fnc || //Sf:rec-cond; NamesFnc.S_VALUE_CONTROL == sName_Fnc || NamesFnc.S_CASE == sName_Fnc || //Sf:case;” NamesFnc.S_LISTBOX_LABELS == sName_Fnc || //Sf:list-box-labels; NamesFnc.S_SWITCH == sName_Fnc || //Sf:switch; NamesFnc.S_ITEM_LABEL2 == sName_Fnc || //Sf:item-label; NamesFnc.S_ITEM_VALUE == sName_Fnc || //Sf:item-value; NamesFnc.S_ITEM_GRAY_OUT == sName_Fnc || //Sf:item-gray-out; NamesFnc.S_TEXT_TEMPLATE == sName_Fnc || //Sf:text-template; NamesFnc.S_EMPTY_FIELD == sName_Fnc || NamesFnc.S_ALL_TRUE == sName_Fnc ) { cur_Cf = new Configurationtree_NodeImpl(NamesNode.S_FNC, parent_Cf); } else if (NamesNode.S_DATA == cur_X.Name) { // 【追加】 cur_Cf = new Configurationtree_NodeImpl(NamesNode.S_DATA, parent_Cf); } else if (NamesFnc.S_RECORD_SET_SAVE_TO2 == sName_Fnc) { // ノード名は fnc では。 cur_Cf = new Configurationtree_NodeImpl(NamesNode.S_A_RECORD_SET_SAVE_TO, parent_Cf); } else { // <fnc name=”Sa:入力値の確定;”> // などがここにくる。 cur_Cf = new Configurationtree_NodeImpl(NamesNode.S_FNC, parent_Cf); } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_UndefinedFncNameAttr: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー412!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("<fnc>要素に、name属性が指定されていませんでした。"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(parent_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(cur_Cf); }
//──────────────────────────────────────── public Cell NewField(string nodeConfigtree, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "NewField", log_Reports); Cell result; switch (this.Type_Field) { case EnumTypeFielddef.String: { result = new StringCellImpl(nodeConfigtree); } break; case EnumTypeFielddef.Int: { result = new IntCellImpl(nodeConfigtree); } break; case EnumTypeFielddef.Bool: { result = new BoolCellImpl(nodeConfigtree); } break; default: { // 未該当 result = null; goto gt_Error_Unspported; } } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_Unspported: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー464!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("フィールド定義を元にして、フィールド値を用意しようとしましたが、未定義のフィールド型でした。"); s.Newline(); s.Append("this.Type.ToString()=["); s.Append(this.ToString_Type()); s.Append("]"); s.Newline(); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── protected override void Test_ChildNodes( XmlElement cur_X, Configurationtree_Node cur_Cf, Log_Reports log_Reports) { // // // //()メソッド開始 // // // Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static); log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "Test_ChildNodes", log_Reports); // // name属性は必須。 // string sName_Fnc = cur_X.GetAttribute(PmNames.S_NAME.Name_Attribute); if ("" == sName_Fnc) { goto gt_Error_UndefinedFncNameAttr; } // // // // 「Sf:cell;」では、子要素<fnc name=”Sf:where;”>が必須。 // // // int nAwhrCount = 0;//where要素の数。 { if (NamesFnc.S_CELL == sName_Fnc) { cur_Cf.List_Child.ForEach(delegate(Configurationtree_Node s_Child, ref bool bBreak) { string sName_Attr; bool bHit = s_Child.Dictionary_Attribute.TryGetValue(PmNames.S_NAME, out sName_Attr, false, log_Reports); if (bHit) { if (NamesFnc.S_WHERE == sName_Attr) { nAwhrCount++; } } }); if (0 == nAwhrCount) { goto gt_Error_ZeroAwhr; } else if (1 < nAwhrCount) { goto gt_Error_SomeAwhr; } } } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_UndefinedFncNameAttr: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー411!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("<fnc>要素に、name属性が指定されていませんでした。"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(cur_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_ZeroAwhr: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー377!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("func系要素の下に、<a-where>要素がありませんでした。"); // ヒント s.Append(r.Message_Configuration(cur_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_SomeAwhr: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー319!", log_Method); StringBuilder s = new StringBuilder(); s.Append("<a-where>要素が["); s.Append(nAwhrCount); s.Append("]つありました。<a-where>要素は、<f-cell>要素の中に1つまでしか書いてはいけません。"); // ヒント s.Append(r.Message_Configuration(cur_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); }
/// <summary> /// 大雑把にfunctionを一覧。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { Log_ReportsImpl.BDebugmode_Static = true; Log_Reports log_Reports; //(2)メソッド開始 Log_Method log_Method = new Log_MethodImpl(); // デバッグモード静的設定の後で。 log_Method.BeginMethod(Info_Actorslist.Name_Library, this, "button2_Click", out log_Reports); Exception error_Exception; //コンフィグファイル ConfigxmlImpl configxml = new ConfigxmlImpl(); configxml.Read(log_Reports); //CSV→テーブル Table_Humaninput tableH; if (log_Reports.Successful) { if (!File.Exists(configxml.FilepathExportLualist)) { goto gt_Error_File1; } string csvtext = File.ReadAllText(configxml.FilepathExportLualist); CsvTo_Table_HumaninputImpl trans = new CsvTo_Table_HumaninputImpl(); tableH = trans.Read( csvtext, new Request_ReadsTableImpl(), new Format_Table_HumaninputImpl(), //true, log_Reports ); } else { tableH = null; } //各.luaファイル List <string> listFile = new List <string>(); List <string> listRow = new List <string>(); List <string> listFunction = new List <string>(); if (log_Reports.Successful) { Regex regex2 = new Regex(@"^\s*function\s+(.*)$", RegexOptions.Compiled); tableH.ForEach_Datapart( (Record_Humaninput recordH, ref bool isBreak2, Log_Reports log_Reports2) => { string filepathRelational = recordH.TextAt("FILE"); string filepath = Path.Combine(configxml.FolderpathProject, filepathRelational); //ystem.Console.WriteLine("filepath=[" + filepath + "]"); string luatext = File.ReadAllText(filepath, Encoding.GetEncoding("Shift-JIS")); string[] lines = luatext.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); int row = 1; //行番号 foreach (string line in lines) { Match m2 = regex2.Match(line); if (m2.Success) { listFile.Add(filepathRelational); listRow.Add(row.ToString()); listFunction.Add(line); //System.Console.WriteLine("ファイル=[" + filepathRelational + "] [" + row + "]行 関数line=[" + line + "]"); } else { } row++; } }, log_Reports); } //配列(空回し);buffer Dictionary <string, string> dictionary1 = new Dictionary <string, string>();// 関数名の問題文字列:["シーン","クラスネーム"] if (log_Reports.Successful) { Regex regex4 = new Regex(@"^\s*function\s+(.*?)(_OnClose|_OnVanish)\s*\(.*$", RegexOptions.Compiled); //「_OnClose」ならシーン、 //「_OnVanish」ならクラスネームに確定します。 for (int i = 0; i < listFunction.Count; i++) { string function = listFunction[i]; Match m4 = regex4.Match(function); if (m4.Success) { if ("_OnClose" == m4.Groups[2].Value) { //シーン dictionary1.Add(m4.Groups[1].Value, "シーン"); } else if ("_OnVanish" == m4.Groups[2].Value) { //クラスネーム dictionary1.Add(m4.Groups[1].Value, "クラスネーム"); } else { } } } } //配列→CSV if (log_Reports.Successful) { Regex regex3 = new Regex(@"^\s*function\s+(.*?)(?:_OnStart|_OnStep|_OnClose|_OnVanish|_OnDraw)\s*\(.*$", RegexOptions.Compiled); Regex regex4 = new Regex(@"^\s*function\s+(?:OnLoad|OnVanish)\s*\(.*$", RegexOptions.Compiled); Regex regex5 = new Regex(@"^\s*function\s+(.*?)_init\s*\(.*$", RegexOptions.Compiled); Regex regex6 = new Regex(@"^\s*function\s+(.*?)Thread\s*\(.*$", RegexOptions.Compiled); Regex regex7 = new Regex(@"^\s*function\s+thread_(.*?)\s*\(.*$", RegexOptions.Compiled); CsvLineParserImpl parser = new CsvLineParserImpl(); StringBuilder sb = new StringBuilder(); sb.Append("NO,FILE,ROW,INITIALIZER,SCENE,THREAD,CLASS_NAME,FUNCTION,END");//,EOL sb.Append(Environment.NewLine); sb.Append("int,string,int,string,string,string,string,string,"); sb.Append(Environment.NewLine); sb.Append("-1,ファイルパス,行番号,suica32用ローダースレッド・ハンドラ?,シーン,スレッド?,クラス名,関数シグネチャー,"); sb.Append(Environment.NewLine); int row = 0; for (int i = 0; i < listFunction.Count; i++) { string file = listFile[i]; string numberRow = listRow[i]; string function = listFunction[i]; string initializer = ""; string scene = ""; string thread = ""; string classname = ""; Match m3 = regex3.Match(function); if (m3.Success) { string functionname2 = m3.Groups[1].Value; if (dictionary1.ContainsKey(functionname2)) { switch (dictionary1[functionname2]) { case "シーン": scene = functionname2; break; case "クラスネーム": classname = functionname2; break; default: break; } } goto gt_Csv; } Match m4 = regex4.Match(function); if (m4.Success) { scene = Path.GetFileNameWithoutExtension(file); goto gt_Csv; } Match m5 = regex5.Match(function); if (m5.Success) { initializer = m5.Groups[1].Value; goto gt_Csv; } Match m6 = regex6.Match(function); if (m6.Success) { thread = m6.Groups[1].Value; goto gt_Csv; } Match m7 = regex7.Match(function); if (m7.Success) { thread = m7.Groups[1].Value; goto gt_Csv; } gt_Csv: sb.Append(row); sb.Append(","); sb.Append(file); sb.Append(","); sb.Append(numberRow); sb.Append(","); sb.Append(initializer); sb.Append(","); sb.Append(scene); sb.Append(","); sb.Append(thread); sb.Append(","); sb.Append(classname); sb.Append(","); sb.Append(parser.EscapeCell(function)); sb.Append(","); sb.Append(Environment.NewLine); //ystem.Console.WriteLine("row=[" + row + "] file=[" + file + "] numberRow=[" + numberRow + "] initializer=[" + initializer + "] scene=[" + scene + "] thread=[" + thread + "] classname=[" + classname + "] classname=[" + classname + "] function=[" + parser.EscapeCell(function) + "]"); row++; } sb.Append("EOF,,,,,,,,"); sb.Append(Environment.NewLine); string csvfile = Path.Combine(Application.StartupPath, configxml.FilepathExportFunctionlist); System.Console.WriteLine("csvfile=[" + csvfile + "]"); File.WriteAllText(csvfile, sb.ToString(), Encoding.UTF8); } goto gt_EndMethod; #region 異常系 //──────────────────────────────────────── gt_Error_File1: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー13007!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("ファイルが足りません。"); s.Append(Environment.NewLine); s.Append("readme.txtを読んで、手順を踏んでください。"); s.Append(Environment.NewLine); s.Append(" .lua一覧CSVファイル=["); s.Append(configxml.FilepathExportLualist); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion gt_EndMethod: log_Method.EndMethod(log_Reports); log_Reports.EndLogging(log_Method); }
//──────────────────────────────────────── /// <summary> /// 親要素に、この要素を追加。 /// </summary> protected override void LinkToParent( Configurationtree_Node cur_Cf, Configurationtree_Node parent_Cf, MemoryApplication memoryApplication, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "LinkToParent", log_Reports); // // name属性は必須。 // string sName_Fnc; cur_Cf.Dictionary_Attribute.TryGetValue(PmNames.S_NAME, out sName_Fnc, true, log_Reports); if (!log_Reports.Successful) { goto gt_EndMethod; //goto gt_Error_UndefinedFncNameAttr; } string parent_SName_Fnc; { // // ※注意 <data >も、<fnc >扱い。name属性を持っていない。 // bool bRequired = false; parent_Cf.Dictionary_Attribute.TryGetValue(PmNames.S_NAME, out parent_SName_Fnc, bRequired, log_Reports); if (!log_Reports.Successful) { goto gt_EndMethod; //goto gt_Error_UndefinedFncNameAttr; } } if (NamesFnc.S_WHERE == sName_Fnc) { // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); // デバッグ出力 if (log_Method.CanDebug(1)) { Log_TextIndented s = new Log_TextIndentedImpl(); parent_Cf.ToText_Locationbreadcrumbs(s); //log_Method.WriteDebug_ToConsole( "<fnc name=”[" + sFncName + "]”>要素 親要素「S■[" + s_Parent.Name_Node + "]」の子リストに、自分を追加。 子要素の数は[" + s_Cur.CountChildNodes + "]でした。"); log_Method.WriteDebug_ToConsole("<fnc name=”[" + sName_Fnc + "]”>要素 親要素「S■[" + parent_Cf.Name + "]」の『属性[" + cur_Cf.Name + "]』に、自分「S■[" + cur_Cf.Name + "]」を追加。 子要素の数は[" + cur_Cf.List_Child.Count + "]でした。 Place=[" + s.ToString() + "]"); } } else if (NamesFnc.S_CASE == sName_Fnc) { // // 親要素は Sf:switch; である必要があります。 // if (NamesFnc.S_SWITCH != parent_SName_Fnc) { if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー308!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("Sf:case;系要素の親は f-switch を期待します。"); s.Newline(); s.Newline(); s.Append("親ノード名=["); s.Append(parent_Cf.Name); s.Append("]"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(parent_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; } // 要素の(OAelemListではなく)OAcaseListに、この Sf:case; 要素を追加。 // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); } else if ( NamesFnc.S_ITEM_LABEL2 == sName_Fnc ) { // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); } else if ( NamesFnc.S_ITEM_VALUE == sName_Fnc ) { // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); } else if ( NamesFnc.S_ITEM_GRAY_OUT == sName_Fnc ) { // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); } else if ( NamesFnc.S_RECORD_SET_SAVE_TO2 == sName_Fnc ) { // // 暫定で、親要素は<f-all-true>である必要があります。 // if (NamesFnc.S_ALL_TRUE != parent_SName_Fnc) { if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー404!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("<a-empty-field>系要素の親は <f-all-true> であることを期待します。"); s.Newline(); s.Newline(); s.Append("oFnode.NodeName=["); s.Append(parent_Cf.Name); s.Append("]"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(parent_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; } if (!(NamesFnc.S_ALL_TRUE == parent_SName_Fnc)) { if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー403!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("内部プログラムのミス。"); s.Newline(); s.Append("<a-empty-field>系要素の親が、OFAllTrueImplクラスでありませんでした。"); s.Newline(); s.Newline(); s.Append("oFnode.NodeName=["); s.Append(parent_Cf.Name); s.Append("]"); s.Newline(); s.Newline(); s.Append("oFnode.GetType().Name=["); s.Append(parent_Cf.GetType().Name); s.Append("]"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(parent_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; } // 親要素の(OAelemListではなく)OArecordSetSaveToListに、この<fnc name=”Sf:a-record-set-save-to;”>要素を追加。 // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); } else if ( NamesFnc.S_EMPTY_FIELD == sName_Fnc ) { // // 親要素は<f-all-true>である必要があります。 // if (NamesFnc.S_ALL_TRUE != parent_SName_Fnc) { if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー405!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("<a-empty-field>系要素の親は <f-all-true> であることを期待します。"); s.Newline(); s.Newline(); s.Append("oFnode.NodeName=["); s.Append(parent_Cf.Name); s.Append("]"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(parent_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; } if (!(NamesFnc.S_ALL_TRUE == parent_SName_Fnc)) { if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー406!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("内部プログラムのミス。"); s.Newline(); s.Append("<a-empty-field>系要素の親が、OFAllTrueImplクラスでありませんでした。"); s.Newline(); s.Newline(); s.Append("oFnode.NodeName=["); s.Append(parent_Cf.Name); s.Append("]"); s.Newline(); s.Newline(); s.Append("oFnode.GetType().Name=["); s.Append(parent_Cf.GetType().Name); s.Append("]"); s.Newline(); s.Newline(); // ヒント s.Append(r.Message_Configuration(parent_Cf)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; } // // <f-all-true> // // 親要素の(OAelemListではなく)OAemptyFldListに、この<a-empty-field>要素を追加。 // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); } else { // 親要素「S■??」に、この「S■fnc」要素を追加。 // 同名要素が複数個並ぶので、属性ではなく子要素として追加する。 // // // // 親へ連結。 // // // parent_Cf.List_Child.Add( cur_Cf, log_Reports ); if (log_Method.CanDebug(1)) { log_Method.WriteDebug_ToConsole("<fnc name=”[" + sName_Fnc + "]”>要素 親要素「S■[" + parent_Cf.Name + "]」の子リストに、自分を追加。 子要素の数は[" + cur_Cf.List_Child.Count + "]でした。"); } } goto gt_EndMethod; // // gt_EndMethod: log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── //static public string ParseString(object data) //{ // if (data is Int_HumaninputImpl) // { // return ((Int_HumaninputImpl)data).Text; // } // // // // 以下、エラー対応。 // // // // DBNull でここをよく通る。 // // // // // //if (false) // //{ // // Log_TextIndented t = new Log_TextIndentedImpl(); // // if (data is DBNull) // // { // // t.Append("int型の値が必要なところでしたが、値が存在しませんでした。(DBNull)"); // // t.Append(Environment.NewLine); // // } // // else // // { // // t.Append("指定の引数の値["); // // t.Append(((O_Value)data).SHumanInput); // // t.Append("]は、int型ではありませんでした。"); // // t.Append(Environment.NewLine); // // } // // //.WriteLine("OValue_IntImpl.GetString: エラーメッセージ=" + dt.ToString()); // // throw new System.ArgumentException(t.ToString()); // //} // // // // // // // // // return ""; //} //──────────────────────────────────────── /// <summary> /// /// </summary> /// <param name="data"></param> /// <param name="outInt"></param> /// <returns>正常終了なら真、異常終了なら偽。</returns> static public bool TryParse( object data, out int nValue_Out, EnumOperationIfErrorvalue enumCellDataErrorSupport, object altValue, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "OValue_IntImpl", "TryParse", log_Reports); bool bResult; Int_HumaninputImpl err_IntCellData; if (data is Int_HumaninputImpl) { Int_HumaninputImpl intCellData = (Int_HumaninputImpl)data; if (intCellData.IsSpaces()) { // // 空白の場合 // if (EnumOperationIfErrorvalue.Spaces_To_Alt_Value == enumCellDataErrorSupport) { if (altValue is int) { nValue_Out = (int)altValue; bResult = true; } else { // エラー nValue_Out = 0;//ゴミ値 bResult = false; err_IntCellData = intCellData; goto gt_Error_AnotherType2; } } else { // エラー nValue_Out = 0;//ゴミ値 bResult = false; err_IntCellData = intCellData; goto gt_Error_EmptyString; } } else if (!intCellData.isValidated) { // エラー(変換に失敗した場合) nValue_Out = 0;//ゴミ値 bResult = false; err_IntCellData = intCellData; goto gt_Error_Invalid; } else { // 正常処理 nValue_Out = intCellData.nValue_Int; bResult = true; } } else if (null == data) { // エラー nValue_Out = 0;//ゴミ値 bResult = false; goto gt_Error_Null; } else if (!(data is Value_Humaninput)) { // エラー nValue_Out = 0;//ゴミ値 bResult = false; goto gt_Error_AnotherType; } else { // エラー nValue_Out = 0;//ゴミ値 bResult = false; goto gt_Error_Class; } // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType2: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー201!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" altValue引数には、int型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" intセル値=["); s.Append(err_IntCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); s.Append(Environment.NewLine); s.Append(" "); err_IntCellData.ToText_Locationbreadcrumbs(s); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_EmptyString: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー201!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" セルに、int型の値を入れてください。空欄にしないでください。"); s.Append(Environment.NewLine); s.Append(" intセル値=["); s.Append(err_IntCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); s.Append(Environment.NewLine); s.Append(" "); err_IntCellData.ToText_Locationbreadcrumbs(s); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Invalid: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー111!!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" int型に変換できませんでした。["); s.Append(err_IntCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); s.Append(Environment.NewLine); s.Append(" "); err_IntCellData.ToText_Locationbreadcrumbs(s); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Null: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー110!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、IntCellData型の値を指定してください。空っぽでした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー111!", log_Method); Log_TextIndentedImpl s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、CellData型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" 別の型[" + data.GetType().Name + "でした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Class: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー112!", log_Method); Log_TextIndentedImpl s = new Log_TextIndentedImpl(); s.Append(" 指定の引数の値["); s.Append(((Value_Humaninput)data).Text); s.Append("]は、IntCellData型ではありませんでした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(bResult); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── public string ToCsvText( Table_Humaninput xTable, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "ToCsvText", log_Reports); Log_TextIndented result = new Log_TextIndentedImpl(); RecordFielddef error_RecordFielddef; Exception err_Excep; int error_IndexColumn; Fielddef error_Fielddef; object error_Item; if (null == xTable) { // エラー goto gt_Error_NullTable; } CsvLineParserImpl csvParser = new CsvLineParserImpl(); // フィールド名をカンマ区切りで出力します。最後にEOLを付加します。 // フィールド定義部 if (xTable.RecordFielddef.Count < 1) { //エラー。 error_RecordFielddef = xTable.RecordFielddef; goto gt_Error_FieldZero; } // フィールド定義部:名前 xTable.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak, Log_Reports log_Reports2) { if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { result.Append(CsvLineParserImpl.EscapeCell(fielddefinition.Name_Humaninput)); result.Append(","); } }, log_Reports); result.Append( ToCsv_Table_RowColRegularImpl_.S_EOL //ToCsv_Table_Humaninput_RowColRegularImpl.S_END ); result.Append(Environment.NewLine); //改行 // フィールド定義部:型 xTable.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak, Log_Reports log_Reports2) { if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { switch (fielddefinition.Type_Field) { case EnumTypeFielddef.String: { result.Append(FielddefImpl.S_STRING); } break; case EnumTypeFielddef.Int: { result.Append(FielddefImpl.S_INT); } break; case EnumTypeFielddef.Bool: { result.Append(FielddefImpl.S_BOOL); } break; default: { // TODO エラー対応。 // 未定義の型があった場合、そのまま出力します。 // C#のメッセージになるかと思います。 result.Append(fielddefinition.ToString_Type()); } break; } result.Append(","); } }, log_Reports); result.Append( ToCsv_Table_RowColRegularImpl_.S_EOL //ToCsv_Table_Humaninput_RowColRegularImpl.S_END ); result.Append(Environment.NewLine);//改行 // フィールド定義部:コメント xTable.RecordFielddef.ForEach(delegate(Fielddef fielddefinition, ref bool isBreak, Log_Reports log_Reports2) { if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { result.Append(CsvLineParserImpl.EscapeCell(fielddefinition.Comment)); result.Append(","); } }, log_Reports); result.Append( ToCsv_Table_RowColRegularImpl_.S_EOL //ToCsv_Table_Humaninput_RowColRegularImpl.S_END ); result.Append(Environment.NewLine);//改行 // 0行目から数えて3行目以降はデータ・テーブル部。 // データ・テーブル部 DataTable dataTable = xTable.DataTable; // 各行について for (int nRowIndex = 0; nRowIndex < dataTable.Rows.Count; nRowIndex++) { DataRow dataRow = dataTable.Rows[nRowIndex]; // // 各フィールドについて // object[] itemArray = dataRow.ItemArray;// ItemArrayは1回の呼び出しが重い。 for (int indexColumn = 0; indexColumn < itemArray.Length; indexColumn++) { // TODO:範囲 リストサイズが0の時がある←プログラムミス? Fielddef fielddefinition; try { fielddefinition = xTable.RecordFielddef.ValueAt(indexColumn); } catch (Exception e) { // エラー。 err_Excep = e; error_RecordFielddef = xTable.RecordFielddef; error_IndexColumn = indexColumn; goto gt_Error_OutOfIndex; } if (this.ExceptedFields.TryExceptedField(fielddefinition.Name_Trimupper)) { // 出力しないフィールドの場合、無視します。 } else { string value_Cell; object item = itemArray[indexColumn]; if (item is Cell) { value_Cell = ((Cell)item).Text; } else if (item is string) { //フィールド定義部など。 value_Cell = (string)item; } else if (item is DBNull) { //空欄。 value_Cell = ""; } else { // エラー error_Item = item; error_Fielddef = fielddefinition; goto gt_Error_UndefinedFieldType; } result.Append(CsvLineParserImpl.EscapeCell(value_Cell)); result.Append(this.charSeparator); } } result.Append( ToCsv_Table_RowColRegularImpl_.S_EOL //ToCsv_Table_Humaninput_RowColRegularImpl.S_END ); result.Append(Environment.NewLine);//改行 } result.Append(ToCsv_Table_RowColRegularImpl_.S_EOF); // 最後に一応、改行を付けておきます。 result.Append(Environment.NewLine);//改行 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_FieldZero: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー854!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("(プログラム内部エラー)テーブルの列定義が0件です。 error_RecordFielddef.Count["); s.Append(error_RecordFielddef.Count); s.Append("] テーブル名=["); s.Append(xTable.Name); s.Append("]"); s.Newline(); // ヒント r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_OutOfIndex: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー853!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("(プログラム内部エラー)err_NColIndex=["); s.Append(error_IndexColumn); s.Append("] error_RecordFielddef.Count["); s.Append(error_RecordFielddef.Count); s.Append("]"); s.Newline(); // ヒント s.Append(r.Message_SException(err_Excep)); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_UndefinedFieldType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー855!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("(プログラム内部エラー)CSVを出力しようとしたとき、未定義のフィールド型=["); s.Append(error_Fielddef.ToString_Type()); s.Append("]がありました。"); s.Newline(); s.Append("型名=["); s.Append(error_Item.GetType().Name); s.Append("]"); s.Newline(); s.Append("型は["); s.Append(typeof(StringCellImpl)); s.Append("],["); s.Append(typeof(IntCellImpl)); s.Append("],["); s.Append(typeof(BoolCellImpl)); s.Append("]が使えます。"); s.Newline(); // ヒント r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_NullTable: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー852!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("(プログラム内部エラー)tableがヌルでした。"); s.Newline(); // ヒント r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result.ToString()); }