2010-07-21 63 views
0

我需要將文件序列導入到Qt程序中。進口本身並不難,但我琢磨如果文件形成一個序列,什麼可能是檢測的最簡單的方法,如:檢測文件序列

filename_00001.png 
filename_00002.png 
filename_00003.png 
etc. 

現在,我有一個拖放進口工作,並我按字母順序排序導入的文件列表。但是,通過QUrl/QString迭代時,我正在努力尋找一種'簡單'的解決方案來檢測圖像編號。我可以通過迭代文件名,找到字符串中的第一個數字,形成基本字符串,計數器+可能的填充和結束字符串,並嘗試匹配這些。然而,這聽起來有點太混亂,讓我覺得必須有更好的方法。但是那裏?

+0

IMO你已經做了什麼是最簡單的解決方案。我建議你繼續採用差異化方法。它也不會像你想象的那樣混亂。 – liaK 2010-07-22 04:50:53

+0

謝謝,應該這樣做。 – John 2010-07-22 18:12:10

回答

0

我的直覺告訴我,任何解決方案本質上都會涉及到你剛剛描述的內容。它可能基於sscanf,regexes或直接字符串比較,但方法必須基本相同。

請問我的目標是什麼?

+0

它應該是一個簡單的框架來嘗試圖像過濾器。圖像序列來自各種來源,例如停止運動裝備。我打算只讀序列,在它們上面運行過濾器並將它們顯示在屏幕上。 – John 2010-07-22 18:11:22

0

你所描述的最可能是最簡單的解決方案。

如果你想在你的應用中使用更少的代碼行,那麼QRegEx就是解決方案。

+0

您可以詳細說明您的QRegEx解決方案嗎? – menjaraz 2012-02-08 17:14:50

0

我可以通過迭代文件名,查找字符串中的第一個數字,形成一個基本字符串,計數器+可能的填充和結束字符串,並嘗試匹配這些。然而,這聽起來有點太混亂,讓我覺得必須有更好的方法。但是那裏?

我想要簡單的解決方案,因此我犧牲了內存,並使用幾個列表/地圖來排序/分組名稱。我將字符串打包到具有額外字段的輔助信息結構中。

我正在使用特殊比較功能。它並不完全是常量,因爲與比較字符串一起,它還爲每個條目提取並保存前綴。 (其實我比較CVS風格的文件版本,在我的情況下,前綴是一個分支的ID,序列是文件的相鄰版本。)

它的工作原理就是這樣。輸入文件列表:

"filename_00001.png" 
"filename_00002.png" 
"filename_00003.png" 

第一條帶擴展名:

"filename_00001", "png" 
"filename_00002", "png" 
"filename_00003", "png" 

然後從文件名前綴排序提取期間:名稱 - 在端所有數字。如果前綴相同,則比較數字。 (在我的情況下輸入不用零填充):

"filename_00001", "png", "filename_" 
"filename_00002", "png", "filename_" 
"filename_00003", "png", "filename_" 

排序/前綴提取後,所有序列具有相同的前綴。如果文件末尾沒有數字,整個文件名稱就是一個前綴,並且它在定義上是唯一的。您也可以另外保存解號碼:

"filename_00001", "png", "filename_", 1 
"filename_00002", "png", "filename_", 2 
"filename_00003", "png", "filename_", 3 

現在,他們全部整理和分類正確,輔助信息在那裏準備 - 所有其他操作都比較簡單。例如。在列表上迭代,可以用簡單的規則提取所有序列:與prev條目相比,prefix是相同的/ seq num是+1。

不好意思,它可能與你所做的沒有什麼不同。我只是不害怕在操作中丟失一點內存/ CPU,因爲跟着它們文件操作速度較慢/內存飢餓程度更大。