abc プロジェクト
14.10.6. MakeResultHTML メンバ関数説明

メンバ関数名 MakeResultHTML
定義ファイル名Visual.cpp
定義行 419
所属名 TVisualDM
アクセス属性 private
宣言形式 void MakeResultHTML ( TTuneRegion * TuneRegion )
概要 各TuneRegionごとの結果ページを作成する。
戻り値
パラメタ説明 TuneRegion 対象チューニングリージョンクラス
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TVisualDM::Exec Visual.cpp 62

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TMainF::err main.cpp 271
2 c_str

3 fclose

4 fopen

5 fprintf

6 IntToStr

7 printf

参照外部変数一覧表
名称 定義ファイル名 定義行
1 MainF main.cpp 26

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TVisualDM::DirName Visual.h 36

参照先一覧表
名称 種別 定義ファイル名 定義行
1 TSubRegion クラス TuneRegion.h 249
2 TToken クラス pass1.h 216
3 TTuneRegion クラス TuneRegion.h 88

関数論理チャート

        |  +----------------------------------------------------------+ 
   419  +--+ void TVisualDM::MakeResultHTML(TTuneRegion *TuneRegion)  | 
   420     | {                                                        | 
           +--+-------------------------------------------------------+ 
   421        +--- FILE *fp;
   422        +--- AnsiString FileName;
   423        +--- AnsiString s;
   424        +--- int i,c;
   425        +--- TToken *Token;
   426        +--- TSubRegion *SubRegion;
   427        |    
   428        +--- FileName = DirName + "\\ABCLib/ABCLibATLog_"+TuneRegion->Name+".html";
   429        +--- fp = fopen(FileName.c_str(),"wt");
              |  +------------------+ 
   430        +--+ if(fp == NULL){  | 
              |  +--+---------------+ 
   431        |     +--- MainF->err("File Open Err "+ FileName);
              |     |  +----------+ 
   432        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   433        |   |  }  | 
              |   +-----+ 
   434        +--- //
   435        |    // HTMLファイルを出力する。  
   436        |    //                           
   437        +--- fprintf(fp,"<html>\n");
   438        +--- fprintf(fp,"<head>\n");
   439        +--- fprintf(fp,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">\n");
   440        +--- fprintf(fp,"<meta name=\"GENERATOR\" content=\"ABCLibScript 1.0\">\n");
   441        +--- fprintf(fp,"<title>ABCLib_%s Result</title>\n",TuneRegion->Name);
   442        +--- fprintf(fp,"</head>\n");
   443        |    
   444        +--- fprintf(fp,"<body>\n");
   445        +--- fprintf(fp,"<h1 align = \"center\"><b>ABCLib_%s&nbsp;Result</b>\n",TuneRegion->Name);
   446        +--- fprintf(fp,"</h1>\n");
   447        |    
   448        +--- //
   449        |    // Applet部分を出力する。                                                  
   450        |    // 各ページごとに参照データが異なる。                                      
   451        |    // データファイルは、空白で作成されているので、読込みエラーにはならない。  
   452        |    //                                                                         
   453        +--- fprintf(fp,"<p align = \"center\">\n");
   454        +--- fprintf(fp,"<applet\n");
   455        +--- fprintf(fp,"codebase = \"./\"\n");
   456        +--- fprintf(fp,"code = \"vlapplet.Applet1.class\"\n");
   457        +--- fprintf(fp,"archive = \"vlapplet.jar\"\n");
   458        |    
   459        +--- fprintf(fp,"name = \"gtable\"\n");
   460        +--- fprintf(fp,"width = \"640\"\n");
   461        +--- fprintf(fp,"height = \"510\"\n");
   462        +--- fprintf(fp,"alt = \"Javaアプレットです。\">\n");
   463        +--- fprintf(fp,"<param name=\"FolderName\" value=\"gtable-\">\n");
   464        +--- fprintf(fp,"<param name=\"FILENAME\" value=\"ABCLIBATLog_%s.dat\">\n",TuneRegion->Name);
   465        |    
   466        +--- fprintf(fp,"<param name=\"LSMFILENAME\" value=\"%s_%c_LSM.dat\">\n",
   467        |        TuneRegion->Name,TuneRegion->TuneGroupName[1]                    
   468        |    );                                                                   
   469        |    
   470        +--- fprintf(fp,"<param name=\"CaseCount\" value=\"%d\">\n",TuneRegion->CaseCount);
   471        +--- //
   472        |    // SubRegionごとの個数(前のIdxを含んだ個数)をセット 
   473        |    //                                                       
   474        +--- fprintf(fp,"<param name=\"SubCount\" value=\"%d\">\n",TuneRegion->SubRegionList->Count);
   475        +--- s = "";
   476        +--- c = 0;
              |  +----------------------------------------------------------+ 
   477        +--+ for(i = 0 ; i < TuneRegion->SubRegionList->Count ; i++){ | 
              |  +--+-------------------------------------------------------+ 
   478        |     +--- SubRegion = (TSubRegion *)TuneRegion->SubRegionList->Items[i];
   479        |     +--- c += SubRegion->CaseCount;
              |     |  +--------------+ 
   480        |     +--+ if(s != ""){ | 
              |     |  +--+-----------+ 
   481        |     |     +--- s += ",";
              |     |   +-+---+ 
   482        |     |   |  }  | 
              |     |   +-----+ 
   483        |     +--- s += IntToStr(c);
              |   +-+---+ 
   484        |   |  }  | 
              |   +-----+ 
   485        +--- fprintf(fp,"<param name=\"SubCaseIdx\" value=\"%s\">\n",s.c_str());
   486        +--- fprintf(fp,"</applet>\n");
   487        +--- fprintf(fp,"</p>\n");
   488        |    
   489        +--- //
   490        |    // データ一覧表示ボタン  
   491        |    //                       
   492        +--- fprintf(fp,"<form>\n");
   493        +--- //    fprintf(fp,"<p align=\"right\">\n");
   494        |    //    fprintf(fp,"<INPUT TYPE=\"button\" VALUE=\"結果データ 一覧表示\"\n");  
   495        +--- fprintf(fp,"<p align=\"center\">\n");
   496        +--- fprintf(fp,"<INPUT TYPE=\"button\" VALUE=\" Result data list   \"\n");
   497        +--- fprintf(fp,"  onClick=\"makeNewWindow()\">\n");
   498        +--- fprintf(fp,"</p>\n");
   499        +--- fprintf(fp,"</form>\n");
   500        |    
   501        |     
   502        +--- //
   503        |    // Appletから Nの開始、終了、Stepの3データを所得する。              
   504        |    // このデータとCase数から計算した値とデータ行数が一致しない場合は、  
   505        |    // エラー表示(データが正しくありません。)が行われる。              
   506        |    //                                                                   
   507        |                                                                         
   508        +--- fprintf(fp,"<script type=\"text/javascript\">\n");
   509        +--- fprintf(fp,"<!--\n");
   510        |    
   511        +--- //
   512        |    // Table部分の表示                       
   513        |    // RowCount数だけのLoopでの表示となる。  
   514        |    //                                       
   515        +--- fprintf(fp,"var nw = null;\n");
   516        |    
   517        +--- fprintf(fp,"function makeNewWindow() {\n");
   518        +--- //
   519        |    // Check Applet Enable 
   520        |    //                     
   521        +--- fprintf(fp,"  if(typeof(document.applets[0]) == typeof(undefined)){\n");
   522        +--- fprintf(fp,"    alert(\"JavaAppletが起動していません。\");\n");
   523        +--- fprintf(fp,"    return;\n");
   524        +--- fprintf(fp,"  }\n");
   525        +--- //
   526        |    // Open New Window 
   527        |    //                 
   528        +--- fprintf(fp,"  if(!nw || nw.closed) {\n");
   529        +--- fprintf(fp,"    nw = window.open(\"\",\"\",\"WIDTH=500,HEIGHT=400,resizable,scrollbars\");\n");
   530        |    
   531        +--- //
   532        |    // 新しいウィンドウのデータを出力  
   533        |    //                                 
   534        +--- fprintf(fp,"    nw.document.writeln(\"<html>\");\n");
   535        +--- fprintf(fp,"    nw.document.writeln(\"<head>\");\n");
   536        +--- s = "<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=shift_jis\\\">";
   537        +--- fprintf(fp,"    nw.document.writeln(\"%s\");\n",s.c_str());
   538        +--- s = "<meta name=\\\"GENERATOR\\\" content=\\\"ABCLibScript 1.0\\\">";
   539        +--- fprintf(fp,"    nw.document.writeln(\"%s\");\n",s.c_str());
   540        +--- s.printf("<title>ABCLib_%s Result</title>",TuneRegion->Name);
   541        +--- fprintf(fp,"    nw.document.writeln(\"%s\");\n",s.c_str());
   542        +--- fprintf(fp,"    nw.document.writeln(\"</head>\");\n");
   543        +--- fprintf(fp,"    nw.document.writeln(\"<body>\");\n");
   544        +--- s.printf("<h1 align = \\\"center\\\"><b>ABCLib_%s&nbsp;Result</b>",TuneRegion->Name);
   545        +--- fprintf(fp,"    nw.document.writeln(\"%s\");\n",s.c_str());
   546        +--- fprintf(fp,"    nw.document.writeln(\"</h1>\");\n");
   547        |    
   548        +--- //
   549        |    // テーブル内容を出力  
   550        |    //                     
   551        +--- fprintf(fp,"    var ValId = document.gtable.getId(\"d\");\n");
   552        +--- fprintf(fp,"    var DataCount = parseInt(document.gtable.getCount(ValId));\n");
   553        +--- fprintf(fp,"    var RowCount = (DataCount/2)-5;\n"); // 先頭5行はヘッダ部分
   554        +--- fprintf(fp,"    var NumProcs = parseInt(document.gtable.get(ValId,0));\n");
   555        +--- fprintf(fp,"    var StartTuneSize = parseInt(document.gtable.get(ValId,1));\n");
   556        +--- fprintf(fp,"    var EndTuneSize = parseInt(document.gtable.get(ValId,2));\n");
   557        +--- fprintf(fp,"    var SampDist = parseInt(document.gtable.get(ValId,3));\n");
   558        |    
   559        +--- fprintf(fp,"    nw.document.writeln(\"<table border=\\\"2\\\" width=\\\"100%%\\\">\");\n");
   560        +--- fprintf(fp,"    nw.document.writeln(\"<tr>\");\n");
   561        +--- fprintf(fp,"    nw.document.writeln(\"<td width=\\\"10%%\\\">DataNo</td>\");\n");
   562        +--- fprintf(fp,"    nw.document.writeln(\"<td width=\\\"10%%\\\">N</td>\");\n");
   563        +--- fprintf(fp,"    nw.document.writeln(\"<td width=\\\"10%%\\\">CaseNo</td>\");\n");
   564        +--- fprintf(fp,"    nw.document.writeln(\"<td width=\\\"25%%\\\">CaseInfo</td>\");\n");
   565        +--- fprintf(fp,"    nw.document.writeln(\"<td width=\\\"45%%\\\">Result</td>\");\n");
   566        +--- fprintf(fp,"    nw.document.writeln(\"</tr>\");\n");
   567        |    
   568        +--- fprintf(fp,"    for(i = 0 ; i < RowCount ; i++){\n");
   569        +--- fprintf(fp,"      nw.document.writeln(\"\");\n");
   570        +--- fprintf(fp,"      i0 = i+1;\n");    //
   571        +--- fprintf(fp,"      n = Math.floor(i / %d)*SampDist+StartTuneSize;\n",TuneRegion->CaseCount);
   572        +--- fprintf(fp,"      i1 = (i %% %d)+1;\n",TuneRegion->CaseCount);
   573        +--- fprintf(fp,"      d = document.gtable.get(ValId,i+5);\n");
   574        |    
   575        +--- fprintf(fp,"      CaseInfo = \"\";\n");
              |  +--------------------------------------------+ 
   576        +--+ if(TuneRegion->SubRegionList->Count != 0){ | 
              |  +--+-----------------------------------------+ 
   577        |     +--- int CaseCount;
   578        |     |    
   579        |     +--- fprintf(fp,"i2 = 1; i3 = i1-1\n");
              |     |  +----------------------------------------------------------------+ 
   580        |     +--+ for(int k = 0 ; k < TuneRegion->SubRegionList->Count-1 ; k++){ | 
              |     |  +--+-------------------------------------------------------------+ 
   581        |     |     +--- SubRegion = (TSubRegion *)TuneRegion->SubRegionList->Items[k];
   582        |     |     +--- CaseCount = SubRegion->CaseCount;
   583        |     |     +--- fprintf(fp,"      if(i3 >= %d){ i2++; i3 -= %d}\n",CaseCount,CaseCount);
              |     |   +-+---+ 
   584        |     |   |  }  | 
              |     |   +-----+ 
   585        |     +--- fprintf(fp,"      CaseInfo += \"SubRegion=\"+i2;\n");
   586        |     +--- //
   587        |     |    // 各サブリージョンごとの varid()のIdxを出力する。                   
   588        |     |    // VaridListのFromToの値となる。                                     
   589        |     |    // i3 にサブリージョン内での idx値が入っているので、それを使用する。 
   590        |     |    // 例えば varid(i) from 1 to 4 varid (j) from 1 to 3 ならば          
   591        |     |    //  i = xx Math.Floor( i3 /jCount ) % iCount; となる。               
   592        |     |    //                                                                   
              |     |  +--------------------------------------------------------------+ 
   593        |     +--+ for(int k = 0 ; k < TuneRegion->SubRegionList->Count ; k++){ | 
              |     |  +--+-----------------------------------------------------------+ 
   594        |     |     +--- SubRegion = (TSubRegion *)TuneRegion->SubRegionList->Items[k];
   595        |     |     +--- CaseCount = SubRegion->CaseCount;
              |     |     |  +----------------------------------+ 
   596        |     |     +--+ if(SubRegion->variedCount != 0){ | 
              |     |     |  +--+-------------------------------+ 
   597        |     |     |     +--- fprintf(fp,"      if(i2 == %d){\n",k+1);
              |     |     |     |  +--------------------------------------------------------+ 
   598        |     |     |     +--+ for(int kk = 0 ; kk < SubRegion->variedCount ; kk++){  | 
              |     |     |     |  +--+-----------------------------------------------------+ 
   599        |     |     |     |     +--- AnsiString fmt;
   600        |     |     |     |     +--- AnsiString VName =SubRegion->variedValName[kk];     // 変数名 (必須)
   601        |     |     |     |     +--- int VStart = SubRegion->variedFromValue[kk];        // 開始値
   602        |     |     |     |     +--- int VEnd = SubRegion->variedToValue[kk];            // 終了値
   603        |     |     |     |     +--- int VCount;
   604        |     |     |     |     |    
   605        |     |     |     |     +--- VCount = VEnd - VStart+1;
   606        |     |     |     |     +--- CaseCount /= VCount;
   607        |     |     |     |     |    
   608        |     |     |     |     +--- fprintf(fp,"        i4 = Math.floor(i3 / %d ) %% %d + %d;\n",
   609        |     |     |     |     |        CaseCount,VCount,VStart);                                  
   610        |     |     |     |     +--- fprintf(fp,"        CaseInfo += \",%s=\"+i4;\n",VName);
   611        |     |     |     |     |    
              |     |     |     |   +-+---+ 
   612        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   613        |     |     |     +--- fprintf(fp,"    }\n");
              |     |     |   +-+---+ 
   614        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   615        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   616        |   |  }  | 
              |   +-+---+ 
              |   +-+-----------------------------------------------+ 
   616        |   |  else{  // SubRegionがない場合の CaseInfoの出力 | 
              |   +-+-----------------------------------------------+ 
   617        |     +--- int CaseCount;
   618        |     |    
   619        |     +--- CaseCount = TuneRegion->CaseCount;
   620        |     +--- fprintf(fp,"      i3 = i1-1\n");
              |     |  +--------------------------------------------------------+ 
   621        |     +--+ for(int kk = 0 ; kk < TuneRegion->variedCount ; kk++){ | 
              |     |  +--+-----------------------------------------------------+ 
   622        |     |     +--- AnsiString fmt;
   623        |     |     +--- AnsiString VName = TuneRegion->variedValName[kk];   // 変数名 (必須)
   624        |     |     +--- int VStart = TuneRegion->variedFromValue[kk];       // 開始値
   625        |     |     +--- int VEnd = TuneRegion->variedToValue[kk];           // 終了値
   626        |     |     +--- int VCount;
   627        |     |     |    
   628        |     |     +--- VCount = VEnd - VStart+1;
   629        |     |     +--- CaseCount /= VCount;
   630        |     |     |    
   631        |     |     +--- fprintf(fp,"      i4 = Math.floor(i3 / %d ) %% %d + %d;\n",
   632        |     |     |            CaseCount,VCount,VStart);                            
              |     |     |  +--------------+ 
   633        |     |     +--+ if(kk == 0){ | 
              |     |     |  +--+-----------+ 
   634        |     |     |     +--- fprintf(fp,"      CaseInfo += \"%s=\"+i4;\n",VName);
              |     |     |   +-+---+ 
   635        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
   635        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
   636        |     |     |     +--- fprintf(fp,"      CaseInfo += \",%s=\"+i4;\n",VName);
              |     |     |   +-+---+ 
   637        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   638        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   639        |   |  }  | 
              |   +-----+ 
   640        +--- s = "\"<tr>"
   641        |        "<td width=\\\"10%%\\\">\"+i0+\"</td>"       
   642        |        "<td width=\\\"10%%\\\">\"+n+\"</td>"        
   643        |        "<td width=\\\"10%%\\\">\"+i1+\"</td>"       
   644        |        "<td width=\\\"25%%\\\">\"+CaseInfo+\"</td>" 
   645        |        "<td width=\\\"45%%\\\">\"+d+\"</td>"        
   646        |        "</tr>\"";                                   
   647        |    
   648        +--- fprintf(fp,"      nw.document.writeln(%s);\n",s.c_str());
   649        |    
   650        +--- fprintf(fp,"    }\n");
   651        +--- fprintf(fp,"    nw.document.writeln(\"</table>\");\n");
   652        |    
   653        +--- fprintf(fp,"    nw.document.writeln(\"</body>\");\n");
   654        +--- fprintf(fp,"    nw.document.writeln(\"</html>\");\n");
   655        |    
   656        +--- fprintf(fp,"    nw.document.close();\n");
   657        +--- fprintf(fp,"  }else if(nw){\n");
   658        +--- fprintf(fp,"    nw.focus();\n");
   659        +--- fprintf(fp,"  }\n");
   660        +--- fprintf(fp,"}\n");
   661        +--- fprintf(fp,"// -->\n");
   662        +--- fprintf(fp,"</script>\n");
   663        +--- fprintf(fp,"<noscript>\n");
   664        +--- fprintf(fp,"JavaScript対応ブラウザで表示してください。\n");
   665        +--- fprintf(fp,"</noscript>\n");
   666        +--- fprintf(fp,"<br>\n");
   667        +--- fprintf(fp,"</body>\n");
   668        |    
   669        +--- fclose(fp);
   670        |    
            +-+---+ 
   671      |  }  | 
            +-----+