本帖最后由 meixi 于 2022-11-30 09:45 编辑
大家好!
下面这个功能我已经有相关的程序来实现了, 现在想使用Powershell代码也实现一下,
个人感觉应该可以通过有序哈希表键值 加 数组排序来实现, 但对于这个例子, 两重排序, 键与值同步修改, 水平有限!
下面的图片, 左侧是处理前的文本, 右侧黑框中是处理后的文本
要处理的内容整体分为三部分:
第①部分是 ---> 第1行: 总是以/开头, 其后的文本是随机的, 该行不参与处理, 永远不变
________________________________________________________________________________
第②部分是 ---> 第2行至第1个以#bub Bub开头的行之间的内容【即蓝框之前的内容】
这部分是所有要处理的键, 它们很有规律, 为了便于理解, 我把它分为 A B C 3个区【图中红框部分】:
A区【空格:之前的文本】可以是( 非# 非: ) 开头的任意文本或字符
------------------------------------------------------------
B区【空格:至空格;;之间, 即红框里的彩色文本】其中bub.Bub是固定的, 后面跟了个序号
这部分非常重要, 这里的序号可以看作是键的ID, 它是唯一的, 在示例中:
bub.Bub11和所有键下面的#bub Bub11开头的行是绑定的, 需要同步更新, 例如:
bub.Bub11若改成了bub.Bub2 则下面的#bub Bub11也需要相应地改成#bub Bub2
------------------------------------------------------------
C区【空格;;之后的文本】由 序号+空格+文本 组成
________________________________________________________________________________
第③部分是 ---> 第1个以#bub Bub开头的行及其以下的所有内容【即蓝框里的内容】
这部分与第②部分的键相关联, 在示例中:
键 ab :bub.Bub11 与 #bub Bub11开头的行相关联, 相绑定, 该行下面的文本相当于键的值
某个键与其对应的#bub Bub开头的行及其下值的对应关系, 在图片中用相同的颜色表现出来了
________________________________________________________________________________________________
★★★★★处理过程★★★★★
先对第②部分所有的键进行排序, 规则如下:
按照A区的字母从a-z排序
若遇到相同字母的, 则按C区的序号大小排序, 在示例中:
A区有两个ab键, 一个键C区的序号是1, 另一个键C区的序号是7, 则1的在上, 7的在下
★★★在上面排序的同时, C区的序号也相应的修改, 在示例中:
●对于两个ab键
排在第1位的ab键的C区的序号如果不是1则改为1
排在第2位的ab键的C区的序号如果不是2则改为2, 以此类推
●对于1个ac键和1个hc键
因为只有1个, 所以直接将C区的序号改为1
★★★在上面排序的同时, 把B区序号ID依次修改为1-1000, 在示例中:
键的序号ID原来是 10 11 18 65 经过上面的排序后, 应分别改成 1 2 3 4
★★★在上面排序的同时, 所有键下面的, 相对应的#bub Bub开头的行及其下的值也同步修改和排序:
注意:
所有【#bub Bub开头的行】其下的值【内部的空行、行前空白符】要原样保留
所有【#bub Bub开头的行】前面只保留一个空行
________________________________________________________________________________
最后修改每个键相对应的【#bub Bub开头的行的m字母】后面的内容
格式:
m ;;A区文本 + 制表符tab + C区的文本
________________________________________________________________________________
有个例外:
如果某个键没有匹配到与其相对应的【#bub Bub开头的行】, 在示例中: hc 键
则新建该行,在其下加文字: 我是新建的
- $s = @'
- /abc
- ab :bub.Bub11 ;;7 我原是Bub11改为Bub2序号2
- ab :bub.Bub10 ;;1 我原是Bub10改为Bub1序号1
- ac :bub.Bub18 ;;2 我原是Bub18改为Bub3序号1
- hc :bub.Bub65 ;;6 我原是Bub65改为Bub4序号1
-
-
- #bub Bub10 m ;;7
- 我之前在Bub10
- 最后在Bub1
-
- #bub Bub18 m ;;6
- 我之前在Bub18
-
- #前面有一个空格,上面有空行
- 最后在Bub3
-
-
- #bub Bub11 m ;;9
- 我之前在Bub11
- #bub Bub前面没空格
- 最后在Bub2
- '@
-
- #Todo: 处理代码
-
- <# 处理后的文本
- /abc
- ab :bub.Bub1 ;;1 我原是Bub10改为Bub1序号1
- ab :bub.Bub2 ;;2 我原是Bub11改为Bub2序号2
- ac :bub.Bub3 ;;1 我原是Bub18改为Bub3序号1
-
- #bub Bub1 m ;;ab 1 我原是Bub10改为Bub1序号1
- 我之前在Bub10
- 最后在Bub1
-
- #bub Bub2 m ;;ab 2 我原是Bub11改为Bub2序号2
- 我之前在Bub11
- #bub Bub前面没空格
- 最后在Bub2
-
- #bub Bub3 m ;;ac 1 我原是Bub18改为Bub3序号1
- 我之前在Bub18
-
- #前面有一个空格,上面有空行
- 最后在Bub3
-
- #bub Bub4 m ;;hc 1 我原是Bub65改为Bub4序号1
- 我是新建的
- #>
复制代码
|