//────────────────────────────────────────
        public void ToMemory_DataTargetFcell(
            string sValue_Output,
            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, "ToM_DataTargetFcell",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;
            }

            // ■f-cellの子要素
            Expression_Node_String ec_KeyExpected1 = null;
            int nKeyCount = 0;
            {
                //
                //「E■f-cell」の子要素のリスト。
                ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Item, ref bool bRemove2, ref bool bBreak2)
                {
                    // キー値 が1つ入っています。
                    ec_KeyExpected1 = e_Item;
                    nKeyCount++;
                });
            }

            // それでも @keyValueを取得できなければ。
            if (null == ec_KeyExpected1)
            {
                //「E■rec-cond」を調べる。
                Expression_Node_String ec_Where;
                bool bHit2 = ec_SfCell.TrySelectAttribute(out ec_Where, PmNames.S_WHERE.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports);
                if (bHit2)
                {
                    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)
                        {
                            //ystem.Console.WriteLine(Info_Forms.LibraryName + ":" + this.GetType().Name + "#ToM: 「E■f-cell」の「E■@where」属性の下の「E■fnc」を解析。その子要素がvalue相当であるはず。");
                            ec_KeyExpected1 = e_Item;
                        }
                        else
                        {
                        }

                    });
                }
            }

            if (1 < nKeyCount)
            {
                ec_KeyExpected1 = null;

                if (log_Reports.CanCreateReport)
                {
                    Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                    r.SetTitle("▲エラー311!", pg_Method);

                    Log_TextIndented s = new Log_TextIndentedImpl();

                    s.Append("「E■f-cell」系要素の子要素が、「E■rec-cond」を除いて[" + nKeyCount + "]個ありました。");
                    s.Newline();

                    s.Append("この子要素は キー値になるもので、1個でなければいけません。");
                    s.Newline();

                    // 一覧
                    s.Append("──────────子要素名一覧");
                    s.Newline();

                    ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Str1, ref bool bRemove2, ref bool bBreak2)
                    {
                        if ("" == e_Str1.Cur_Configuration.Name)
                        {
                            s.Append("E■(要素名無し)");
                            s.Newline();
                        }
                        else
                        {
                            s.Append("E■");
                            s.Append(e_Str1.Cur_Configuration.Name);
                            s.Newline();
                        }
                    });
                    s.Append("──────────");
                    s.Newline();

                    // ヒント
                    s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration));

                    r.Message = s.ToString();
                    log_Reports.EndCreateReport();
                }
            }
            else if (null == ec_KeyExpected1)
            {
                if (log_Reports.CanCreateReport)
                {
                    Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                    r.SetTitle("▲エラー312!", pg_Method);

                    Log_TextIndented s = new Log_TextIndentedImpl();

                    //s.Append("「E■f-cell」系要素の子要素に、「E■f-text」や「E■f-cell」が無いのか、有っても値がありませんでした。");
                    s.Append("「E■f-cell」の「keyValue」相当の値が指定されていませんでした。");
                    s.Newline();

                    // 一覧
                    s.Append("──────────子要素名一覧");
                    s.Newline();
                    ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Str1, ref bool bRemove2, ref bool bBreak2)
                    {
                        if ("" == e_Str1.Cur_Configuration.Name)
                        {
                            s.Append("E■(要素名無し)");
                            s.Newline();
                        }
                        else
                        {
                            s.Append("E■");
                            s.Append(e_Str1.Cur_Configuration.Name);
                            s.Newline();
                        }
                    });
                    s.Append("──────────");
                    s.Newline();

                    // ヒント
                    s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration));

                    r.Message = s.ToString();
                    log_Reports.EndCreateReport();
                }
            }

            if (log_Reports.Successful)
            {

                //
                // <f-cell>1つにつき。
                //
                ExpressionToMemory_FcellImpl to = new ExpressionToMemory_FcellImpl();
                to.Translate(
                    sValue_Output,
                    ec_KeyExpected1,
                    ec_SfCell,// <f-cell>相当と想定。
                    moApplication,
                    log_Reports
                    );
            }

            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_EndMethod:
            pg_Method.EndMethod(log_Reports);
        }
예제 #2
0
        //────────────────────────────────────────

        public void ToMemory_DataTargetFcell(
            string sValue_Output,
            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, "ToM_DataTargetFcell", 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;
            }



            // ■f-cellの子要素
            Expression_Node_String ec_KeyExpected1 = null;
            int nKeyCount = 0;

            {
                //
                //「E■f-cell」の子要素のリスト。
                ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Item, ref bool bRemove2, ref bool bBreak2)
                {
                    // キー値 が1つ入っています。
                    ec_KeyExpected1 = e_Item;
                    nKeyCount++;
                });
            }

            // それでも @keyValueを取得できなければ。
            if (null == ec_KeyExpected1)
            {
                //「E■rec-cond」を調べる。
                Expression_Node_String ec_Where;
                bool bHit2 = ec_SfCell.TrySelectAttribute(out ec_Where, PmNames.S_WHERE.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports);
                if (bHit2)
                {
                    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)
                        {
                            //ystem.Console.WriteLine(Info_Forms.LibraryName + ":" + this.GetType().Name + "#ToM: 「E■f-cell」の「E■@where」属性の下の「E■fnc」を解析。その子要素がvalue相当であるはず。");
                            ec_KeyExpected1 = e_Item;
                        }
                        else
                        {
                        }
                    });
                }
            }


            if (1 < nKeyCount)
            {
                ec_KeyExpected1 = null;

                if (log_Reports.CanCreateReport)
                {
                    Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                    r.SetTitle("▲エラー311!", pg_Method);

                    Log_TextIndented s = new Log_TextIndentedImpl();

                    s.Append("「E■f-cell」系要素の子要素が、「E■rec-cond」を除いて[" + nKeyCount + "]個ありました。");
                    s.Newline();

                    s.Append("この子要素は キー値になるもので、1個でなければいけません。");
                    s.Newline();

                    // 一覧
                    s.Append("──────────子要素名一覧");
                    s.Newline();

                    ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Str1, ref bool bRemove2, ref bool bBreak2)
                    {
                        if ("" == e_Str1.Cur_Configuration.Name)
                        {
                            s.Append("E■(要素名無し)");
                            s.Newline();
                        }
                        else
                        {
                            s.Append("E■");
                            s.Append(e_Str1.Cur_Configuration.Name);
                            s.Newline();
                        }
                    });
                    s.Append("──────────");
                    s.Newline();

                    // ヒント
                    s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration));

                    r.Message = s.ToString();
                    log_Reports.EndCreateReport();
                }
            }
            else if (null == ec_KeyExpected1)
            {
                if (log_Reports.CanCreateReport)
                {
                    Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                    r.SetTitle("▲エラー312!", pg_Method);

                    Log_TextIndented s = new Log_TextIndentedImpl();

                    //s.Append("「E■f-cell」系要素の子要素に、「E■f-text」や「E■f-cell」が無いのか、有っても値がありませんでした。");
                    s.Append("「E■f-cell」の「keyValue」相当の値が指定されていませんでした。");
                    s.Newline();

                    // 一覧
                    s.Append("──────────子要素名一覧");
                    s.Newline();
                    ec_SfCell.List_Expression_Child.ForEach(delegate(Expression_Node_String e_Str1, ref bool bRemove2, ref bool bBreak2)
                    {
                        if ("" == e_Str1.Cur_Configuration.Name)
                        {
                            s.Append("E■(要素名無し)");
                            s.Newline();
                        }
                        else
                        {
                            s.Append("E■");
                            s.Append(e_Str1.Cur_Configuration.Name);
                            s.Newline();
                        }
                    });
                    s.Append("──────────");
                    s.Newline();

                    // ヒント
                    s.Append(r.Message_Configuration(ec_SfCell.Cur_Configuration));

                    r.Message = s.ToString();
                    log_Reports.EndCreateReport();
                }
            }

            if (log_Reports.Successful)
            {
                //
                // <f-cell>1つにつき。
                //
                ExpressionToMemory_FcellImpl to = new ExpressionToMemory_FcellImpl();
                to.Translate(
                    sValue_Output,
                    ec_KeyExpected1,
                    ec_SfCell,// <f-cell>相当と想定。
                    moApplication,
                    log_Reports
                    );
            }

            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_EndMethod:
            pg_Method.EndMethod(log_Reports);
        }