FastReport4.6程序員手冊_翻譯

一、使用TfrxReport 組件工作
1、加載并存儲報表
默認情況下,報表窗體同項目窗體構存儲在同一個DFM文件中。多數情況下,無須再操作,因而你就不必采用特殊方法加載報表。如果你決定在文件中存儲報表窗體或者是數據庫的

Blob字段(他提供了非常大的彈性,你能夠在非編譯程序中修改),你必須使用“TfrxReport”提供的加載和存儲方法。
function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;
從一個給定名字文件中加載報表。如果第二個參數等于“True”并且文件沒找到,那么他會觸發一個異常。如果文件加載成功,他返回“True”。

procedure LoadFromStream(Stream: TStream);
從流中加載報表。

procedure SaveToFile(const FileName: String);
用特殊名稱文件存儲報表。

procedure SaveToStream(Stream: TStream);
把報表存在流中。

例如:
Pascal:
frxReport1.LoadFromFile('c:\1.fr3');
frxReport1.SaveToFile('c:\2.fr3');

C++:
frxReport1->LoadFromFile("c:\\1.fr3");

frxReport1->SaveToFile("c:\\2.fr3");

2.設計報表
通過“TfrxReport.DesignReport”方法調用報表設計器。你必須在你的項目中包含報表設計器(必要條件是:要么使用“TfrxDesigner”組件,要么增加“frxDesgn”單元到uses

列表)
“DesigReport”方法接受兩個默認參數:
procedure DesignReport(Modal: Boolean = True; MDIChild: Boolean = False);
Modal參數決定設計器是否被模態,MDIChild參數允許把設計器窗體作為一個MDI子窗體。

例如:
frxReport1.DesignReport;

3.運行報表
應用下面兩個“TfrxReport”方法中的一個啟動報表:
procedure ShowReport(ClearLastReport: Boolean = True);
啟動報表并在預覽窗體中顯示。如果“ClearLastReport”參數等于“False”,報表將會增加先前的一個報表結果,否則清除前一個報表結構。

function PrepareReport(ClearLastReport: Boolean = True): Boolean;
啟動報表,沒有打開預覽窗體,參數賦值與“ShowReport”方法同名。如果報表構造成功,他返回“True”。

多數情況下,使用第一種方法更為方便一些。在報表被構造的同時,他會立刻顯示一個預覽窗體。

當需要增加另一個報表到前一個報表中的時候,“ClearLastReport”參數顯得方便些。(此類技術用于批量報表打印)。

例如:
frxReport1.ShowReport;

?

4.預覽報表
使用兩種途徑顯示一個報表是可能的:兩者都是調用“TfrxReport.ShowReport”方法(先前描述過了),或者使用“TfrxReport.ShowPreparedReport”方法來幫助實現。在第二

種情況下,報表構造沒有被執行,但顯示了一個完成的報表。也就是說,你要么在“PreparedReport”方法幫助下構造他,要么在構造前從文件中加載報表(查看“加載/存儲完

成的報表”)

例如:

Pascal:

if frxReport1.PrepareReport then
? frxReport1.ShowPreparedReport;

C++:

if(frxReport1->PrepareReport(true))
? frxReport1->ShowPreparedReport();?

在這種情況下,報表構造器先被完成了,并顯示在預覽窗體中。構造一個龐大的報表可能要花費很多時間,那就是為什么使用“ShowReport”非等時同步方法會好于

“PrepareReport/ShowPreparedReport”方法。你可以通過“TfrxReport.PreviewOptions”屬的缺省值設定預覽參數值。(這句翻譯的不夠好,請參考原文)

原文參考:In this case, report construction is finished first, and after that it is displayed in the preview window. Construction of a large report can take?

a lot of time, and that is why it is better to use the “ShowReport anisochronous” method, than the “PrepareReport/ShowPreparedReport” one. One can assign?

preview settings by default via the “TfrxReport.PreviewOptions” property.

5、打印報表
大多數情況下,你可以從預覽窗體打印報表。要人工打印報表,你應該使用“TfrxReport.Print”方法,例如:

frxReport1.LoadFromFile(...);

frxReport1.PrepareReport;

frxReport1.Print;

同時,你可以在顯示的打印對話框中設置打印參數,你也可以使用默認設定值。取消打印對話框,請參考“TfrxReport.PrintOptions”屬性幫助

6.載入并存儲報表
這個功能可以在預覽窗口中執行。也可以使用手工方法執行,幫助參考“TfrxReport.PreviewPages”方法:
?? function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;

?? procedure SaveToFile(const FileName: String);

?? procedure LoadFromStream(Stream: TStream);

?? procedure SaveToStream(Stream: TStream);
賦值和參數化類似與TfrxReport相應的方法。文件包含了完成的報表,默認情況下以“FP3”為擴展名。

例如:
Pascal:
frxReport1.PreviewPages.LoadFromFile('c:\1.fp3');
frxReport1.ShowPreparedReport;

C++:
frxReport1->PreviewPages->LoadFromFile("c:\\1.fp3");
frxReport1->ShowPreparedReport();

注意,完成的報表加載完畢后,預覽方法是通過“ShowPreparedReport” 方法執行的。

7.導出報表
他可以從預覽窗口中執行。也可以手動操作,通過“FfrxReport.Export”方法,及這個方法中的參數,你可以導出你想要導出的文件類型:

frxReport1.Export(frxHTMLExport1);

導出過濾組件必須是有效的(你必須把他們放到你項目中的窗體上)并調整正確。

The export filter component must be available (you must put it on the form of your project) and be adjusted correctly.

8.創建自定義預覽窗體
FastReport在標準的預覽窗口中顯示報表。如果因為某些原因而不適合你,你可以創建一個自定義預覽窗體。為了這個目的,需要設計FastReport組件面板中的“TfrxReport”組

件。要顯示報表,TfrxReport.Preview方法應該連接到這個組件。

在使用TfrxPreview組件的時候,有兩個典型的問題。他不會處理按鍵(箭頭,PgUp,PgDown等等)和鼠標滾輪(如果有的話)。要讓TfrxPreview同按鍵工作,設置焦點給他(他

是可以做到的,例如,在窗體的OnShow事件句柄中)

frxPreview.SetFocus;

要讓TfrxPreview同鼠標滾輪工作,你必須創建OnMouseWheel事件句柄,并且調用TfrxPreview.MouseWheelScroll方法。

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;?
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
? frxPreview1.MouseWheelScroll(WheelDelta);
end;


9.建立復合報表(批量打印)
??? 在某些情況下,需要立刻組織幾個報表打印,或者在一個打印預覽窗體中封裝并呈現幾個報表。要執行這些,在FastReport中有些工具能夠允許建立一個新的報表附加在一個

已經存在的報表上。“TfrxReport.PrepareReport”方法中有一個選項“ClearLasReport”布爾類型參數,默認情況下他等于True,這個參數定義了是否有必要在建立報表時清除

前一個報表。下面的方法展示了如何從兩個報表中建立一個批量報表:
Pascal:

frxReport1.LoadFromFile('1.fr3');
frxReport1.PrepareReport;
frxReport1.LoadFromFile('2.fr3');
frxReport1.PrepareReport(False);
frxReport1.ShowPreparedReport;

C++:

frxReport1->LoadFromFile("1.fr3");
frxReport1->PrepareReport(true);
frxReport1->LoadFromFile("2.fr3");
frxReport1->PrepareReport(false);
frxReport1->ShowPreparedReport();
??? 我們加載并建立第一個報表,但并沒有顯示他。然后我們加載第二個報表到同一個TfrxReport對象,并使用“ClearLastReport”參數,讓他等于False。這就允許第二個報表

附加在先前建立的報表之后。接下來,我們在預覽窗口中顯示一個完成的報表。

9.1 復合報表中的頁數
??? 你可以使用“Page”,“Page#”,“TotalPages”和“TotalPages#”系統變量顯示頁數或總頁數,在復合報表中,這些變量以下面的方式工作:
Page - 當前報表頁數
Page# - 批量報表頁數
TotalPages - 當前報表總頁數(報表必須兩遍)
Totalpages# - 批量報表總頁數

9.2 合并符合報表頁數
??? 正如上面所說的,報表設計頁中的“PrintOnPrevousPage”方法讓你在打印報表的時候使用前一頁的剩余空間接合報表。在復合報表中,允許你在前一個報表的最后一頁的剩

余空間創建一個新的報表。要執行這個,要使能每一個連續報表的第一個設計頁“PrintOnPreviousePage”屬性
??
10.交互報表
??? 在交互報表中,你可以在預覽窗口定義任意報表對象的鼠標單擊反應。例如,一個用戶能夠單擊數據線,結果運行一個帶有選擇線的明細數據。
??? 任何報表都能交互。要執行他,你僅僅需要創建TfrxReport.OnClickObject事件句柄。下面代碼是這個事件句柄的示例:
Pascal:

procedure TForm1.frxReport1ClickObject(Page: TfrxPage; View: TfrxView;
? Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
begin
? if View.Name = 'Memo1' then
??? ShowMessage('Memo1 contents:' + #13#10 + TfrxMemoView(View).Text);
? if View.Name = 'Memo2' then
? begin
??? TfrxMemoView(View).Text := InputBox('Edit', 'Edit Memo2 text:', TfrxMemoView(View).Text);
??? Modified := True;
? end;
end;

C++:
void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
????? TMouseButton Button, TShiftState Shift, bool &Modified)
{
? TfrxMemoView * Memo;
? if(Memo =? dynamic_cast <TfrxMemoView *> (Sender))
? {
??? if(Memo->Name == "Memo1")
????? ShowMessage("Memo1 contents:\n\r" + Memo->Text);
??? if(Memo->Name == "Memo2")
??? {
????? Memo->Text = InputBox("Edit", "Edit Memo2 text:", Memo->Text);
????? Modified = true;
??? }
? }
}


在對象的單擊事件句柄上,你可以做如下事情:
- 修改一個對象或頁的內容,傳遞句柄(結果,被修改的將被特殊標記,因此修改的內容應該引起重視);
- 由于使用重構或重新建立報表,調用TfrxReport.PrepareReport方法

在此例中,點擊名字為memo1對象的結果顯示這個對象內容的消息。當點擊memo2是顯示一個對話框,這個對象的內容可能被修改。設置Modified標志為True,允許保持和顯示變更

。?
?
同樣的方法,單擊事件可以被定義成不同的響應。例如,運行一個新報表。如下注釋是必要的。在FastReport3版本中,一個報表組件可以在一個預覽窗口中顯示唯一的報表(不像

FastReport2.x版本)。那就是為什么一個報表預覽窗也會在分開的對象中運行一個報表,或者是同一個對象,但當前報表必須被抹除。
?

關于給終端用戶一個可單擊對象提示定位,在預覽窗口中,鼠標經過一個可單擊對象的時候,我們可以修改鼠標的光標。要做到這些,在報表設計器上選擇一個要設計的對象并設置

他的cursor屬性為不同于crDefault的某個值。

更多的細節涉及到定義的單擊對象。在簡單報表中,可以依照對象的名字或他的內容來定義。然而,這就不能更多的執行可修改的事例。例如,一個明細報表應當在一個數據選擇

行被創建。一個用戶單擊了內容為12的memo1對象。數據行讓這個對象參考什么?那就是為什么你應當知道主鍵了,主鍵用于明確的標識這一行。FastReport能夠賦值一個字串,包

含任意數據(在我們的事例主鍵數據中),對于每個報表對象,這個字串存儲在TagStr屬性中。

?
讓我們來通過一個報表的例子來舉例說明,這個報表包含在FastReportDemo.exe-'Simple list'示例中。這是一個公司的客戶列表,包含諸如客戶名稱,地址,聯系人等數據。數

據源是來自DBDEMOS演示數據庫的Customer.db表。這個表有一個主鍵,CustNO字段,他沒有出現在報表中。我們的任務是終止他通過參考單擊完成報表上的任意對象記錄他,這就

意味著要獲取主鍵的值,要執行此項操作,就要為所有對象的TagStr屬性加入值,依賴于主數據欄:
[Customers."CustNo"]

?
在報表建立期間,使用相同的方法計算TagStr屬性內容,同時計算文本對象的內容;這就意味著變量值會替代所有變量的位置。變量細節使用方括號括起來。那就是為什么行值

是'1005', '2112'等類似值了。在報表建立后,包含TagStr屬性對象的類型取決與主數據欄。一個簡單的從字串到整形的轉換就會提供給我們一個主鍵的值,這也是所需記錄能夠

找到的主鍵。
?

如果主鍵是復合的(包含多個字段),TagStr屬性的內容可能是如下值:
[Table1."Field1"];[Table1."Field2"]

在構造一個報表完成后,TagStr屬性包含“1000;1”類型值, 此值不同比相同要好。

11.從代碼中存取報表對象
報表對象(例如:report page, band, memo-object)是不能在你的代碼中直接存取的。這就意味著你不能通過名字尋址對象。例如,當你在你的窗體上尋址一個按鈕。要尋址一

個對象,在TfrxReport.FindObject方法中找到幫助:

Pascal:
var
? Memo1: TfrxMemoView;
Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;

C++:
TfrxMemoView * Memo =?
dynamic_cast <TfrxMemoView *> (frxReport1->FindObject("Memo1"));

然后,你就能夠尋址對象的屬性和方法。你也使用“TfrxReport.Pages”屬性尋址報表頁。

Pascal:
var
? Page1: TfrxReportPage;
Page1 := frxReport1.Pages[1] as TfrxReportPage;

C++:
TfrxReportPage * Page1 = dynamic_cast <TfrxReportPage *> (frxReport1->Pages[1]);

12.從代碼中創建報表
作為一項規則,你將在設計器中創建多數報表。然而,在某些情況下(例如,當報表窗體未知的時候),使用代碼手工創建一個報表是是十分必要的。
想要手工創建一個報表,你需要執行下面的順序步驟:
- 清除報表組件
- 添加數據源
- 添加數據頁
- 添加報表頁
- 添加欄頁
- 設置欄屬性,接著把他們同數據相連
- 在每個欄上加入對象
- 設置對象屬性,接著把他們同數據相連

讓我們來檢查一下創建一個簡單報表的類型列表。假設我們擁有如下組件:frxReport1: TfrxReport and frxDBDataSet1: TfrxDBDataSet(最后一個連接到DBDEMOS數據,

Customer.db表)。我們的報表將包含一個帶有報表標題和主數據欄的頁。在報表標題欄上有一個帶有“Hellow FastReport”文本的對象,主數據欄包含一個帶有連接到“CustNo”

字段的對象。

Pascal:

var
? DataPage: TfrxDataPage;
? Page: TfrxReportPage;
? Band: TfrxBand;
? DataBand: TfrxMasterData;
? Memo: TfrxMemoView;

{ 清除報表 }
frxReport1.Clear;
{ 為報表添加數據集到可存取的列表中 }
frxReport1.DataSets.Add(frxDBDataSet1);

{ 添加"Data"頁 }
DataPage := TfrxDataPage.Create(frxReport1);

{ 添加頁 }
Page := TfrxReportPage.Create(frxReport1);
{ 創建唯一名稱 }
Page.CreateUniqueName;
{ 設置默認字段大小, 紙張和打印方向 }
Page.SetDefaults;
{ 修改紙張方向 }
Page.Orientation := poLandscape;

{ 添加一個報表標題欄 }
Band := TfrxReportTitle.Create(Page);
Band.CreateUniqueName;
{ it is sufficient to set the ?Top? coordinate and height for a band }
{ both coordinates are in pixels }
Band.Top := 0;
Band.Height := 20;
?
{ 為標題欄添加一個對象 }

Memo := TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.Text := 'Hello FastReport!';
Memo.Height := 20;
{ 這個對象將伸展坐標到欄的寬度 }
Memo.Align := baWidth;
?
{ 添加主數據欄 }
DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet := frxDBDataSet1;
{ 頂端的調整應當比先前加入欄的頂部+高度大一些 }
DataBand.Top := 100;
DataBand.Height := 20;

{ 在主數據欄上添加一個對象 }
Memo := TfrxMemoView.Create(DataBand);
Memo.CreateUniqueName;
{ 連接數據 }
Memo.DataSet := frxDBDataSet1;
Memo.DataField := 'CustNo';
Memo.SetBounds(0, 0, 100, 20);
{ 調整文本到右側的對象邊緣 }
Memo.HAlign := haRight;

{ 顯示報表 }
frxReport1.ShowReport;


C++:

TfrxDataPage * DataPage;
TfrxReportPage * Page;
TfrxBand * Band;
TfrxMasterData * DataBand;
TfrxMemoView * Memo;

// 清除報表?
frxReport1->Clear();

// 在報表上添加一個數據集到數據集存取列表
frxReport1->DataSets->Add(frxDBDataset1);

// 添加“數據”頁
DataPage = new TfrxDataPage(frxReport1);

// 添加一頁
Page = new TfrxReportPage(frxReport1);

// 創建一個不重復的名稱
Page->CreateUniqueName();

// 設置域大小, 紙張和默認的打印方向
Page->SetDefaults();

// 修改紙張的打印方向
Page->Orientation = poLandscape;

// 增加一個報表標題欄
Band = new TfrxReportTitle(Page);
Band->CreateUniqueName();

// 為欄充分設置頂部坐標和高度
// 在像素上包含坐標
Band->Top = 0;
Band->Height = 20;

// 在報表標題欄加入一個對象
Memo = new TfrxMemoView(Band);
Memo->CreateUniqueName();
Memo->Text = "Hello FastReport!";
Memo->Height = 20;

// 此對象將會被按照欄的寬度延展
Memo->Align = baWidth;

// 添加主數據欄
DataBand = new TfrxMasterData(Page);
DataBand->CreateUniqueName();

DataBand->DataSet = frxDBDataset1;
// 頂部坐標應該大于前邊添加欄的頂部坐標+高度
DataBand->Top = 100;
DataBand->Height = 20;

// 主數據上加入一個對象
Memo = new TfrxMemoView(DataBand);
Memo->CreateUniqueName();
// 連接到數據

Memo->DataSet = frxDBDataset1;
Memo->DataField = "CustNo";
Memo->SetBounds(0, 0, 100, 20);

// 調整文本到右側對象的空白
Memo->HAlign = haRight;
// 顯示報表
frxReport1->ShowReport(true);

讓我們來解釋一些細節:
??? 所有在報表中使用的數據集都必須添加到數據源列表中,在我們示例中,是用frxReport1.DataSets.Add(frxDBDataSet1)這一行執行的。否則,報表就不會工作。
??? 數據頁對于插入內部數據集是必要的,例如TfrxADOTable。這些數據集只能放在數據頁。
??? 調用Page.SetDefaults不是必須的,因為在這個案例中頁A4紙張設置和頁邊距都是0毫米。默認值設置10毫米頁邊距,并捕獲打印機頁大小和對齊方式。
??? 在增加欄到頁面的同時,你要確認他們沒有互相重疊在一起。要執行他,頂部和高度的坐標是相似的。總是要在設計器中定位相同的位置的。
?
對象的坐標和大小是以像素為單位的,因為所有對象的left, Top, Width和Height屬性都擁有擴展類型,你能夠指出非整形值。下面常量用于轉化像素到厘米和英寸:
fr01cm = 3.77953;
fr1cm? = 37.7953;
fr01in = 9.6;
fr1in? = 96;

例如,一個欄的高度等于5毫米如下設定:
Band.Height := fr01cm * 5;?
Band.Height := fr1cm * 0.5;?

12.代碼中創建對話框
??? 我們知道,報表可以包含對話框窗體。下面的例子展示了如何創建一個帶有OK按鈕的對話框窗體:

Pascal:

?{ for working with dialogue objects the following unit should be used }

uses frxDCtrl;

var
? Page: TfrxDialogPage;
? Button: TfrxButtonControl;

{ 添加頁 }
Page := TfrxDialogPage.Create(frxReport1);
{ 創建唯一名稱 }
Page.CreateUniqueName;
{ 設置大小 }
Page.Width := 200;
Page.Height := 200;
{ 設定位置 }
Page.Position := poScreenCenter;
?
{ 添加一個按鈕 }
Button := TfrxButtonControl.Create(Page);
Button.CreateUniqueName;
Button.Caption := 'OK';
Button.ModalResult := mrOk;
Button.SetBounds(60, 140, 75, 25);

{ 顯示報表 }
frxReport1.ShowReport;
?
C++:

//使用對話框對象工作,會用到下面的單元

#include "frxDCtrl.hpp"

TfrxDialogPage * Page;
TfrxButtonControl * Button;

//添加一頁
Page = new TfrxDialogPage(frxReport1);

//創建唯一名稱
Page->CreateUniqueName();

//設置大小
Page->Width = 200;
Page->Height = 200;

//設定位置
Page->Position = poScreenCenter;

// 添加一個按鈕
Button = new TfrxButtonControl(Page);
Button->CreateUniqueName();
Button->Caption = "OK";
Button->ModalResult = mrOk;
Button->SetBounds(60, 140, 75, 25);

//顯示報表?
frxReport1->ShowReport(true);

轉載于:https://www.cnblogs.com/cyzgg/p/10717152.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387010.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387010.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387010.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python音頻信號處理 1.短時傅里葉變換及其逆變換

短時傅里葉變換及其逆變換 本篇文章主要記錄了使用python進行短時傅里葉變換&#xff0c;分析頻譜&#xff0c;以及通過頻譜實現在頻域內降低底噪的代碼及分析&#xff0c;希望可以給同樣在學習信號處理的大家一點幫助&#xff0c;也希望大家對我的文章多提意見建議。 一. 短…

Java多線程同步機制

一段synchronized的代碼被一個線程執行之前&#xff0c;他要先拿到執行這段代碼的權限&#xff0c;在 java里邊就是拿到某個同步對象的鎖&#xff08;一個對象只有一把鎖&#xff09;&#xff1b; 如果這個時候同步對象的鎖被其他線程拿走了&#xff0c;他&#xff08;這個線程…

SpringBoot與數據訪問

pom依賴&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-conne…

Python音頻信號處理 2.使用譜減法去除音頻底噪

使用譜減法去除音頻底噪 上一篇文章我主要分享了短時傅立葉變換及其逆變換在python中的實現&#xff0c;有興趣的可以閱讀一下該篇文章&#xff0c;地址如下&#xff1a; Python音頻信號處理 1.短時傅里葉變換及其逆變換 那么在本篇文章中&#xff0c;我們將利用短時傅立葉變…

線程池的優點

線程池的優點 1、線程是稀缺資源&#xff0c;使用線程池可以減少創建和銷毀線程的次數&#xff0c;每個工作線程都可以重復使用。 2、可以根據系統的承受能力&#xff0c;調整線程池中工作線程的數量&#xff0c;防止因為消耗過多內存導致服務器崩潰。 線程池的創建 public…

ROS(Robot Operating System)筆記 : 2.創建并配置package

ROS(Robot Operating System)筆記 : 2.創建一個ROS包并設置其依賴 1.首先來到ros的工作目錄下&#xff0c;接著使用 catkin_make [包名稱] [依賴1] [依賴2] … 創建一個包名為 challenge_project 的 ros包。 $ catkin_create_pkg challenge_project rospy std_msgs cv_bri…

Java線程相關的熱門面試題

1) 什么是線程&#xff1f; 線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位。程序員可以通過它進行多處理器編程&#xff0c;你可以使用多線程對運算密集型任務提速。比如&#xff0c;如果一個線程完成一個任務要…

linux運維、架構之路-jumpserver

linux運維、架構之路-jumpserver 一、jumpserver介紹 是一款由python編寫開源的跳板機(堡壘機)系統&#xff0c;實現了跳板機應有的功能。基于ssh協議來管理&#xff0c;客戶端無需安裝agent。 特點&#xff1a; 完全開源&#xff0c;GPL授權 Python編寫&#xff0c;容易再次開…

C++ STL學習筆記 : 1. template 模板函數

本篇文章是學習C STL庫的第一篇筆記&#xff0c;主要記錄了使用template關鍵字創建模板函數的方法。 下面用一個非常簡單的例子解釋模板函數的用法 : #include <iostream> using namespace std;template <class T> void myswap(T& a, T& b) {T temp a;a…

C++ STL學習筆記 : 2. unordered map 容器

本文中&#xff0c;簡單總結一下使用unordered map 的心得。unordered_map容器屬于STL中關聯表的一種&#xff0c;常用的map容器與unordered_map容器在使用中有著很大程度的相同點&#xff0c;在之后的文章中我可能會針對二者的相同點與不同點進行細致的分析&#xff0c;這里就…

tensorflow 安裝在Anaconda

python環境&#xff1a;win10 64下anaconda4.2.0(python3.5)。安裝tensorflow過程是在Anaconda Prompt中進行安裝 1&#xff1a;打開Anaconda Prompt 在安裝之前&#xff0c;說幾個關于conda的小命令 conda list&#xff1a;可以顯示已經安裝好的庫。 conda install 庫名 &…

伯努利數學習筆記的說...

經過一天的學習&#xff0c;我們發現伯努利數是個非常有用 &#xff08;個屁&#xff09; 的數列 定義 但是...伯努利數是什么呢&#xff1f;我們先給伯努利數一個定義&#xff1a; 令 \(B(i)\) 表示 伯努利數第 i 項&#xff0c;那么有&#xff1a; \[\sum_{i0}^{n} \begin{pm…

Dijkstra迪杰斯特拉算法 C++實現

本篇文章主要介紹了Dijkstra迪杰斯特拉算法的C實現&#xff0c;文章包含兩個部分&#xff0c;在第一部分中我會簡單介紹迪杰斯特拉算法以及一些個人的理解&#xff0c;第二部分會對C代碼的邏輯進行解釋。下面是我已經上傳的代碼資源&#xff0c;大家有興趣的可以點擊鏈接下載資…

Python開發一個股票類庫

前言 使用Python開發一個股票項目。 項目地址&#xff1a; https://github.com/pythonstock/stock 相關資料&#xff1a; http://blog.csdn.net/freewebsys/article/details/78294566 主要使用開發語言是python。 使用的lib庫是pandas&#xff0c;tushare&#xff0c;Tens…

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍歷建立二叉樹 C++...

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍歷建立二叉樹 C Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. For example, given…

C++ STL 學習筆記 3. 文本文件操作

本文主要總結了C中對文本文件的基本操作以及使用心得&#xff0c;第一部分中總結了C對文本文件的基本操作&#xff0c;第二部分中會以csv文件為例&#xff0c;進行讀取存儲由逗號分隔的字符串的操作。 1. 文本讀取寫入基礎 要使用文件輸入輸出流&#xff0c;首先需要include相…

C# 調用python

1.C# 調用python 本質上是使用命令行運行python 1.1 C# 使用命令行 program.cs using System; using System.Diagnostics; using System.IO;namespace test {class Program{static void Main(string[] args){Program p new Program();string result p.run_cmd("ping…

4-17

1、html 中div class是什么&#xff1f; 在這里我將用id與class的比較&#xff0c;讓這個問題更容易理解&#xff08;1&#xff09;、使用區別id具有唯一性&#xff0c;在一個網頁中同一個命名只能使用一次&#xff1b;class命名的類可以在一個網頁中使用無數次。&#xff08;2…

python pandas serie簡介及基本使用

本篇文章主要羅列了pandas模塊中serie的基本使用。環境是jupyter notebook python 3.7。 serie是能夠保存任何類型數據的一維數組&#xff0c;軸標簽統稱為索引&#xff0c;索引必須是唯一的散列且與數據的長度相同&#xff0c;默認情況下為np.arange(n)。 首先是import pand…

Linux系統中nc工具那些不為人知的用法

Linux nc命令用法 參考地址&#xff1a;https://www.cnblogs.com/jjzd/p/6306273.html -g<網關>&#xff1a;設置路由器躍程通信網關&#xff0c;最多設置8個; -G<指向器數目>&#xff1a;設置來源路由指向器&#xff0c;其數值為4的倍數; -h&#xff1a;在線幫助;…