我有一個2500行文檔,是數據表(excel)的輸出。它在文檔內一致並重復大約100次 - 儘管每行不完全重複,因爲每個循環的數據略有不同。在每個(25行)週期中,我可以收集至少30條信息,以便上傳到定製上傳器中,以填充網站中的dbs。Vim:技術方法
我首先想到的是搜索/使用子匹配(*),以正確的結構捕捉到的數據爲我所用替換它上傳到我自己的數據庫,如:
data1:data2,data3a|data3b|data3c,data4:data5
乍看之下有足夠的vim寄存器開始,追加,然後在下一個循環之前替換並轉儲(覆蓋)寄存器 - 然後重複。但是,將來我可能想要擴展這種數據捕獲,這可能會使我的寄存器(a-z,0-9)最大,並且難以跟蹤什麼是(計數分隔符)。所以我正在考慮函數傳遞捕獲的文本以及名稱來調用它(繞過替換/子匹配想法),以便在每個循環結束時設置(let)以進行檢索和正確格式化。我看到這樣一個函數:
function SetVar(varname, varval)
exe "let @".a:varname." = '".a:varval."'"
endfunction
我將捕獲的數據等:
:/sectionHeader/sectionFooter/g/(pieceOfInfo)/call SetVar('varname1',@)/
其中sectionHeader和sectionFooter定義文檔內的循環部分(範圍)。我可能會使用RegExps來捕獲這些節名稱,並使用名稱的一部分來標記變量(而不是varname1) - 或者可能是像「i」這樣的增量變量。
,然後格式化像最終輸出:
varname1:varname2,varname3|varname4|varname5,varname6:varname7
我認爲這將是更容易維護的變量名可以作出什麼意義,從而通過上傳過程跟蹤(以及可能的未來擴展)。
問題:
這是否有意義,是其合理的架構方式,該解決方案?
你能提出一個更好的方法嗎?
您能否提供一個樣本輸入文本和相應的輸出來闡明轉換? –
@ib我給出的描述很清楚地概述了需求和我的預期方法。沒有迴應說(對我來說)我的方法很好。我很快就會寫這個代碼。 – Ricalsin