abc プロジェクト
14.10.6. MakeResultHTML メンバ関数説明 |
メンバ関数名 | MakeResultHTML |
定義ファイル名 | Visual.cpp |
定義行 | 419 |
所属名 | TVisualDM |
アクセス属性 | private |
宣言形式 | void MakeResultHTML ( TTuneRegion * TuneRegion ) |
概要 | 各TuneRegionごとの結果ページを作成する。 |
戻り値 | |
パラメタ説明 | TuneRegion 対象チューニングリージョンクラス |
機能説明 | |
備考 | |
呼出し元関数一覧表
呼出し先関数一覧表
参照外部変数一覧表
参照メンバ変数一覧表
|
名称 |
定義ファイル名 |
定義行 |
1 |
TVisualDM::DirName |
Visual.h |
36 |
参照先一覧表
関数論理チャート
| +----------------------------------------------------------+
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 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 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 | } |
+-----+