Automation 交换记事本中的某些行++;自动地

Automation 交换记事本中的某些行++;自动地,automation,notepad++,swap,lines,sqf,Automation,Notepad++,Swap,Lines,Sqf,我得到了一个很大的.SQF文件,它是由ARMA2(游戏)的3d编辑器生成的。 该编辑器在很多方面都有缺陷,但这是添加自定义地图内容的唯一“简单”方法。一个很好的例子就是这个问题: 编辑器将某些行写入所谓的.SQF文件。每个物体都由几条线组成。问题是,行的顺序并不总是以正确的顺序写入。这会导致对象生成不正确。当有超过1000+个对象,因此超过10000+条线时,将每个对象的线按正确的顺序排列将成为一项艰巨的任务 以下是文件中几个对象的示例: _vehicle_372 = objNull; if (

我得到了一个很大的.SQF文件,它是由ARMA2(游戏)的3d编辑器生成的。 该编辑器在很多方面都有缺陷,但这是添加自定义地图内容的唯一“简单”方法。一个很好的例子就是这个问题:

编辑器将某些行写入所谓的.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];
与:

setvectorup行值是一致的,但setPos每次都包含不同的坐标。(只有“_thissetpos”保持不变)


记事本++中是否有一种方法可以自动将所有“\u this setvectorup”行与“\u this setPos”行交换?

假设这两行相邻,则可以通过在记事本++中进行搜索和替换来交换它们。将Find what设置为
^([\t]*\u this setVectorUp.*)\r\n([\t]*\u this setPos.*)$
并将替换为
\2\r\n\1
。确保选择了正则表达式,并且未选择不匹配换行符

^
$
匹配第一行的开头和第二行的结尾,
\r\n
匹配它们之间的换行符。
[\t]*
匹配行中的前导空格。(使用
[\t]*
而不是
\s*
向人类读者明确CRs和LFs被排除在外。)
*
匹配不包含换行符的字符序列。因此,
[\t]*\u这个setVectorUp.*
匹配其中一行,同样匹配另一行。包含在
中会将匹配的行记住为捕获的文本

替换文本反转两个捕获行的顺序,并插入换行符序列


这个答案还假设这两个项目正好是两行。如果项目被拆分为多行,或者存在其他项目,则可能无法交换某些项目,或者交换可能会重新排序错误的项目。

请将您的问题减少到您面临的最小问题,这样会更容易帮助您,如果您在windows上安装了linux或cygwin,您可以使用“sort”和“uniq”实用程序删除重复的行或从同一来源收集行(假设它们的来源在行的开头),我的文章中只有一个问题,它在底部说明。它很短。正文的其余部分只是解释我面临的问题。如果你不能帮我解决这个问题,那么请不要费心写评论。这完全符合我的要求,并且给了我一些关于正则表达式的新见解。谢谢!
544
4
-1269

770
4
325

tp@p[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
544
4
-1269

770
4
325

tp@p[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