2015-04-22 21 views
1

我正在嘗試創建一個讀取文件並搜索特定字符組合的程序。 例如:「/ start/4jy42jygsfsf/end /」。在文件中搜索字符的組合

所以我想找到所有以/開始/結尾爲/結尾/開頭的「字符串」。

爲了做到這一點,我使用read()函數,因爲該文件可能是一個二進制文件(它不一定是帶有字符的文件)。

我調用read()函數這樣的:

#define BUFFSIZE 4000 

// more declarations 

while (read(file_descriptor, buffer, BUFFSIZE) > 0) 
{ 
    //search for /start/ 
    //then search for /end/ 
    //build a string with all the chars between these two 
    //keep searching till you reach the end of buffer 
} 

假設每/啓動/後跟一個/結束/。

的問題是:

如何處理案件的字符的組合在半切?

例如,假設在第一時間閱讀()被調用,在這個緩衝結束時,我發現/明星和閱讀下一時間()被調用在第二個緩衝的開始有t/4jy42jygsfsf/end/

這種組合可能會在任何地方被切斷。我認爲的解決方案將導致許多許多代碼行。有沒有什麼聰明的方法來處理所有這些情況?

回答

0

當您到達緩衝區末尾時,記錄當前部分匹配的狀態(如果有)。然後當你得到下一個緩衝區時,你有4種一般情況:

  • 不在任何要匹配的文本里面。
  • 只看到一個開始/在最後一個緩衝區末尾
  • 目前在/start/裏面。另一個變量記錄您匹配的距離。
  • 目前裏面有/end/。與/start相同的變量記錄您匹配的距離。

你的匹配器內的狀態大致有:

  1. 目前不匹配任何
  2. 剛看到一個/ - 未來尋找一個 's' 或 'E'。
  3. 匹配start/end/
  4. 匹配 - /start/end

基於部分匹配,在匹配器中跳轉到正確的狀態。

OR

可以使用PCRE library。它支持部分匹配。但可能是爲了你的目的矯枉過正。