Markdownを持つログ変換プログラム
DrGraph QQ:282397369
プライマー
少しいえば値下げ下で使用する場合のブログに、あること、当惑、そしてよりリラックスしたブログには、この方法を見つけました。私にとっては、ポイントがアプリケーションに割り当てられますが、唯一のWeb技術にこれまで堪能人、値下げが役に立つから、毛皮のポイントを理解しています。
結局、自分の物事のアスペクト仕様はまた、いくつかの良い結果ページを願っていますが、あまりにも多くの技術的な武道、綿密な調査研究を行くための欲求されていません。
基本的なブログでは、と突然、私はそれを変換するために値下げを使用して独自のプログラムを記録したいです。
シンプルなアイデア
- 各プログラムのニーズの時に出力ログに情報がログテキストファイルに書き込まれます
- 最終生成統一仕様ウェ
- 大とちょうど約OKです気にする必要があるフォーマットを達成する必要はありません
オープンドライ
離陸します
各書き込み値下げファイルは、流れの方法によって達成されるように、目標を持っている必要があります。まず作成し、直接オープン書き込みに従ってください。
TFileStream * __fastcall TDrLUA::GetLogStream() {
TFileStream * ErrorsLog = NULL;
UnicodeString LogFile = FStatusXmlFileName;
try {
if (FileExists(LogFile)) {
ErrorsLog = new TFileStream(LogFile, fmOpenReadWrite | fmShareExclusive);
ErrorsLog->Position = ErrorsLog->Size;
}
else {
ErrorsLog = new TFileStream(LogFile, fmCreate);
AnsiString info = THelper::FormatString(L"# 脚本日志报告\n- 程序当前版本:%s\n- 程序修改时刻:%s\n",
TGraphApp::AppVersion, THelper::File::GetFileTimeDesc(Application->ExeName, cftLastWrite));
ErrorsLog->Write((void*)(info.c_str()), info.Length());
}
}
catch (...) {
ErrorsLog = NULL;
}
return ErrorsLog;
}
リターン・ストリーム・オブジェクトを操作することは、その後の操作が必要なだけGetLogStream
メッセージを書き込みます
初めて、第二列情報として、情報が表形式で提示することを準備します。だから、少しコントロールを追加し、FStartLogTextFlag
void __fastcall TDrLUA::LogScript_Text(UnicodeString text) {
TFileStream * fs = GetLogStream();
if(fs) {
UnicodeString logInfo = text;
if(!FStartLogTextFlag) {
logInfo = THelper::FormatString(L"|时刻|信息|\n|:--|:--|\n|%s|%s|\n",
TTypeConvert::Moment2String(GetTickCount(), L"hh:nn:ss:zzz"),
logInfo);
} else
logInfo = THelper::FormatString(L"|%s|%s|\n",
TTypeConvert::Moment2String(GetTickCount(), L"hh:nn:ss:zzz"),
logInfo);
AnsiString info = logInfo;
fs->Write((void*)(info.c_str()), info.Length());
FStartLogTextFlag = true;
}
delete fs;
}
}
もちろん、そのようなフォントの色などとハンドラが必要に応じて呼び出されたときに、同じように、情報のフォームを表示します
書き込みステージタイトル
実行しているアカウントなどの情報をログに記録し、プラスタイトルが一層明確コンテキストです。#直接追加することができます。現在、唯一のあなたはマルチレベルのタイトルが必要な場合は、最初のタイトルを扱うパラメータを追加int型のレベルが十分でなければなりません
void __fastcall TDrLUA::LogScript_Title(UnicodeString text) {
TFileStream * fs = GetLogStream();
if(fs) {
AnsiString info = THelper::FormatString(L"\n---\n# %s\n", text);
fs->Write((void*)(info.c_str()), info.Length());
FStartLogTextFlag = false;
delete fs;
}
}
カラーコントロール
それは必要な色を制御するために、フォントの色=#...を追加するために見つけ、このときの出力に追加します。
LogScript_Text(THelper::FormatString(L"&font color=%s;**%s**&font;",
TTypeConvert::WebColorString(color), info), 0);
画像出力
出力画像フォーマット値下げに押し
void __fastcall TDrLUA::LogScript_Mat(cv::Mat& mat) {
UnicodeString destPicFileName = THelper::FormatString(L"%s%s.png",
ExtractFilePath(FStatusXmlFileName), TTypeConvert::Moment2String(GetTickCount(), L"hh_nn_ss_zzz"));
CvHelper::MatToFile(mat, destPicFileName);
LogScript_Text(THelper::FormatString(L"&font color=#ff0000;**![警告:返回了空图片](%s \"返回图片\")**&font;", ExtractFileName(destPicFileName)), 0);
}
レポートの生成
テンプレートファイル
インターネット検索は、我々はシャットダウンJSモジュールと直接取引します。固定のフォルダにダウンロードしてください。サンプルレポートのページファイルを設計します
<!DOCTYPE html>
<html><head>
<title>&Title;</title>
<script type="text/javascript" src="&AppPath;Res\showdown\showdown.js"></script>
</head><body><div id="result"></div>
<script type="text/javascript">
function convert(){
var text = "&MarkDownContent;";
var converter = new showdown.Converter();
var html = converter.makeHtml(text);
document.getElementById("result").innerHTML = html;
}
window.onload=function(){convert(); }
</script></body>
ウェブページファイルの生成
プログラムは、対応するファイル&...を交換する上で、発生した場合、に
UnicodeString __fastcall THelper::Log::BuildMarkDownReport(UnicodeString markDownFileName, UnicodeString destTitle) {
UnicodeString templateFileName = THelper::File::GetPath_Application() + L"res\\showdown\\report.html";
UnicodeString destHtmlFileName = ChangeFileExt(markDownFileName, L".html");
if(FileExists(destHtmlFileName))
DeleteFile(destHtmlFileName);
if(FileExists(templateFileName)) {
TStrings * lines = new TStringList;
lines->LoadFromFile(templateFileName, System::Sysutils::TEncoding::UTF8);
UnicodeString markDownContent = THelper::File::GetFileContent(markDownFileName, false);
if(markDownContent.Length() == 0)
markDownContent = THelper::FormatString(L"#文件 '%s' 无内容", ExtractFileName(markDownFileName));
for(int i = 0; i < lines->Count; ++i) {
UnicodeString content = lines->Strings[i];
if(content.Pos(L"&AppPath;"))
THelper::String::ReplaceStringInStr(content, L"&AppPath;", THelper::File::GetPath_Application());
else if(content.Pos(L"&MarkDownContent;"))
THelper::String::ReplaceStringInStr(content, L"&MarkDownContent;", markDownContent);
else if(content.Pos(L"&Title;"))
THelper::String::ReplaceStringInStr(content, L"&Title;", destTitle);
else continue;
lines->Strings[i] = content;
}
lines->SaveToFile(destHtmlFileName, System::Sysutils::TEncoding::UTF8);
delete lines;
}
return destHtmlFileName;
}
プログラムショー
直接表示CEF3ブラウザ。
最終ページの表示
- ログファイルは、直接ブラウザでページを開きます
- Webページには、プログラムでログファイルを表示
よりクリーン下にその感触を。