2014-01-10 206 views
1

我得到了由ARMA2(遊戲)的三維編輯器生成的這個大的.SQF文件。 這種編輯器在很多方面都有問題,但它是添加自定義地圖內容的唯一「簡單」方式。一個很大的例子就是這個問題:在記事本++中自動換行

編輯器將某些行寫入所謂的.SQF文件。每個對象由幾行組成。問題是,行的順序並不總是按正確的順序寫入。它導致對象產生不正確。當擁有超過1000多個對象,因此超過10000多行時,以正確的順序排列每個對象的行將成爲一項艱鉅的任務。

這裏是文件中的一些對象的示例:我喜歡交換

_vehicle_372 = objNull; 
if (true) then 
{ 
_this = createVehicle ["MAP_asf2_1_1000", [13661.608, 2976.1057, 4.9591064e-005], [], 0, "CAN_COLLIDE"]; 
    _vehicle_372 = _this; 
    _this setDir 40.844734; 
    _this setPos [13661.608, 2976.1057, 4.9591064e-005]; 
}; 

_vehicle_378 = objNull; 
if (true) then 
{ 
    _this = createVehicle ["MAP_dum_mesto2", [13689.696, 2863.1313, 0.17608854], [], 0, "CAN_COLLIDE"]; 
    _vehicle_378 = _this; 
    _this setDir -30.116863; 
    _this setVectorUp [0, 0, 1]; 
    _this setPos [13689.696, 2863.1313, 0.17608854]; 
}; 

_vehicle_380 = objNull; 
if (true) then 
{ 
    _this = createVehicle ["MAP_dum_mesto_in", [13686.867, 2907.3464, -0.009554117], [], 0, "CAN_COLLIDE"]; 
    _vehicle_380 = _this; 
    _this setDir -63.79903; 
    _this setPos [13686.867, 2907.3464, -0.009554117]; 
}; 

_vehicle_384 = objNull; 
if (true) then 
{ 
    _this = createVehicle ["MAP_HouseBlock_B1", [13722.756, 2839.5999, 0.29589382], [], 0, "CAN_COLLIDE"]; 
    _vehicle_384 = _this; 
    _this setDir -216.63187; 
    _this setVectorUp [0, 0, 1]; 
    _this setPos [13722.756, 2839.5999, 0.29589382]; 
}; 

的線是:

_this setVectorUp [0, 0, 1]; 

隨着:

_this setPos [13722.756, 2839.5999, 0.29589382]; 

的setvectorup線值是一致的,但setPos每次都會包含不同的座標。 (只有「_this setPos」保持不變)。

記事本++有沒有辦法在「_this setPos」行中自動替換所有「_this setvectorup」行?

+0

請降低你所面對的確切最小的問題,你的問題,它會更容易幫你再 – Ezra

+0

順便說一句,如果你在Windows中可以使用「排序」和「uniq的」實用工具Linux或Cygwin的刪除重複的行或收集來自同一來源的行(假設它們的來源在行首) – Ezra

+0

我的帖子中只有一個問題,它在底部顯示。這很短。其餘的文字只是解釋我面臨的問題。如果你不能幫助我解決這個問題,那麼請不要打擾評論。 – ElFietsbel

回答

1

假設兩條線相鄰,那麼它們可以通過搜索進行交換並在Notepad ++中進行替換。設置找到什麼^([ \t]*_this setVectorUp.*)\r\n([ \t]*_this setPos.*)$替換爲\2\r\n\1。確保選擇正則表達式並且不匹配換行符不是選中。

^$匹配第一行的開始和第二行的結尾,並且\r\n匹配它們之間的換行符。 [ \t]*與行上的主要空白匹配。 (使用[ \t]*而非\s*向人類讀者明確指出排除了CR和LF)。.*與不包含換行符的字符序列匹配。所以[ \t]*_this setVectorUp.*匹配的行,類似的其他行。在()圍合記得匹配的行爲被捕獲的文本。

替換文本顛倒了兩條捕獲線的順序並插入換行符序列。

這個答案還假設這兩個項目恰好是兩行。如果項目分成多行,或者其他項目存在,則有些項目可能不會交換,或者交換可能會重新排序錯誤的項目。

+0

這個工作就像我想要它的工作,並給了我正則表達式的一些新的見解。非常感謝! – ElFietsbel

-2
544 
4 
-1269 

770 
4 
325 

[email protected][score_money_min=10000000,team=default] 96 4 -397 
scoreboard teams join VIP @p[r=5] 
scoreboard players remove @p money 10000000 

23.23.76.109:25565