1
問題:將具有結構化提交消息的git日誌的輸出解析爲對象。C++如何將結構化git日誌的輸出解析到對象中
這是日誌看起來是這樣的特定目錄:
commit 7df03ac69f27f80887cc588ab7bec7e38a42d3db
Author: John Doe <[email protected]>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Something"
VAL_B "Goodbye"
OPTIONALVAL_1 "Hello World \n"
commit 9d9c69f2798778yyuyuu6786767tc7e38a42d3db
Author: John Doe <[email protected]>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Hello World"
VAL_B "Goodbye World"
OPTIONALVAL_2 "Hello again World \n"
commit 666669f2798778yyuyuu6786767tc7e38a42d3db
Author: John Doe <[email protected]>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Hello World"
VAL_B "Goodbye World"
如果每次提交被解析成擁有成員變量git_commit_hash
,VAL_A
,VAL_B
,OPTIONALVAL_1
和OPTIONALVAL_2
的對象。可選值可以爲空,但VAL_A
和VAL_B
不能。
我的方法:
- 轉儲git的日誌輸出到一個臨時文件。
- 逐行讀取文件,如果以單詞「commit」開頭,則將空格後的字符保存到新對象的
git_commit_hash
中。 - 跳過接下來的三行。
- 保存兩個強制性值
VAL_A
和VAL_B
的值。 - 由於這些值可能會溢出到下一行,因此請繼續下去,檢查是否設置了
OPTIONALVAL_1
或在行的開頭設置了OPTIONALVAL_2
,如果是,請保存。 - 一旦達到單詞「commit」,停止解析當前對象。創建一個新對象,然後重複1-5。
這是一種蠻力的方法,雖然工作有些,但沒有靈活性。我想知道是否有人可以將我指向更優雅的解決方案或C++或boost庫。謝謝。
如何創建一個包含所有的信息,沒有任何跳過一個結構或類。然後就像從你需要的結構中提取出結構一樣簡單。一次將文件讀入數組,向量,列表,無論結構如何,然後一切都是基於內存的,而不是基於磁盤的。 – PaulMcKenzie