该文件包含大量数据,如下所示:

______________________________________________________________________

.         1-9/16 TCS DRILL                  

.          CUT = +2.685 / O/A = -2.685
.                +2.685 /       -2.685
.                +3.935 /       -3.935


______________________________________________________________________

.         1-11/32 TCS DRILL                  

.          CUT = +0.9 / O/A = -3.237
.                +0.9 /       -3.237
.                +0.9 /       -4.487


______________________________________________________________________

.         1-11/32 TCS DRILL                  

.          CUT = +5.699 / O/A = -5.699


______________________________________________________________________

.         1-1/8 TCS DRILL                  

.          CUT = +1.553 / O/A = -1.553
.                +2.338 /       -2.338
.                +2.513 /       -2.513


______________________________________________________________________

.         1-1/16 TCS DRILL                  

.          CUT = +3.587 / O/A = -8.074

我可以在每个下划线后输出第一个文本行

(Get-Content -Raw $file) -split "_+" | 
    Where-Object{$_} | 
ForEach-Object{($_ -split "`r`n" | Select -Index 2) -replace "^\.\s+"}

但是,我还要保留每个下划线之后的第一行文本,并在每个拆分组中输出其余的文本行。 但是每组中的文本行数不确定 ,因此我不能使用-index 2,4,5,6 除此之外,我必须删除所有内容,直到每个文本行中的最后一个负数 (而不是-index 2行,此行都是每个组的名称),因此输出应在以下两列中如下所示:

1-9/16 TCS DRILL
                    -2.685
                    -2.685
                    -3.935
1-11/32 TCS DRILL
                    -3.237
                    -3.237
                    -4.487
1-11/32 TCS DRILL
                    -5.699
1-1/8 TCS DRILL
                    -1.553
                    -2.338
                    -2.513

#1楼 票数:2 已采纳

那呢?

(Get-Content -Raw $file) -split "_+" | Where-Object{$_} | ForEach-Object{    
    $entry = $_ -split "`r`n" 

    ($entry | Select -Index 2) -replace "^\.\s+"
    $entry | Select -Skip 3 | Where-Object{$_} | ForEach-Object{
        "-$(($_ -split "-")[-1].Trim())"
    }
}

我们所做的与以前相同。 在文件中输出该“工具”行。 现在,我们处理每个组的其余各行。 再次选择不为空的行,我们只是基于减号将字符串分成一个数组。 每行的最后一个元素[-1]应该是您要寻找的值,我们会将-静态加回到字符串中。 使用.Trim()为我们清理间距。

样本输出

1-9/16 TCS DRILL                  
-2.685
-2.685
-3.935
1-11/32 TCS DRILL                  
-3.237
-3.237
-4.487
1-11/32 TCS DRILL                  
-5.699
1-1/8 TCS DRILL                  
-1.553
-2.338
-2.513

这是快速而又肮脏的,如果我们刚开始删除所有空行,则将得到更好的编码,但这确实可行。 当我回到家时,我可能会整理一下。 让我知道您的情况。

第二回合

现在,我有更多时间尝试清理一下。 结果应仍与上述相同

(Get-Content -Raw $file) -split "_+" | Where-Object{$_} | ForEach-Object{
    $entry = $_.Split("`r`n",[StringSplitOptions]::RemoveEmptyEntries) -replace "^\.\s+"
    $entry[0]
    ($entry | Select-Object -Skip 1) -replace ".*-","-"
}

这次使用[StringSplitOptions]::RemoveEmptyEntries删除空条目,因此我不必猜测哪一行包含项目字符串。 另外,由于-replace可在数组上使用,因此我们可以使用它而无需更多的ForEach循环。 至于最后两个正则表达式字符串:

  • "^\\.\\s+"匹配字符串开头的句点和随后的所有连续空格
  • ".*-"匹配所有内容,直到最后一次出现-

#2楼 票数:2

另外一个选项:

Get-Content $file -Delimiter ('_'*70) |
foreach {
   $_.split("`n") -match '\.+' -replace '^\.\s+' -replace '.+\s(-[0-9.]+)',"$(' '*20)`$1"
  }

使用样本数据输出:

1-9/16 TCS DRILL
                    -2.685
                    -2.685
                    -3.935
1-11/32 TCS DRILL
                    -3.237
                    -3.237
                    -4.487
1-11/32 TCS DRILL
                    -5.699
1-1/8 TCS DRILL
                    -1.553
                    -2.338
                    -2.513
1-1/16 TCS DRILL
                    -8.074

这利用了字符串-将每个钻探规格集分成一个单独的字符串。 之后,只需要删除行和字符,就不需要插入空格来获得所需的格式。

  ask by Root Loop translate from so

未解决问题?本站智能推荐:

3回复

如何在PowerShell中分割字符串

这似乎应该很简单,但是我似乎无法弄清楚。 我有一个看起来像这样的字符串: 我要做的就是在分号和空格处将它们分开,但是每当我尝试使用$string.split("; ")分隔时,由于空间的原因,它也会将字符串的前半部分分开。 我假设我可能需要使用Regex,但是并没有很好地掌握它才能完成它
1回复

在CSV文件中分割字符串

我在CSV文件中包含以下数据 我需要将“ Name列分成另外3列。 Date , Time和Name 。 像下面 在完成方面有些失落。 我试过用逗号代替第14个字符,但没有运气。 有什么帮助吗?
3回复

Powershell-分割字符串

我正在尝试在power-shell中拆分一个字符串...我已经对该字符串做了一些工作,但是我无法弄清楚这最后一部分。 说我坐在这串: 我想将其拆分为30个字符,但我不想拆分一个字。 如果我要拆分它,则它将在一行上显示“ ... commen”,在下一行上显示“ t that ...”。
3回复

分割包含固定长度列的字符串

我得到这样的数据: 导入时,它为不同的列包含不同的值。 每列都是固定宽度: Col#1是ID,长度仅为1。 意思是这里是"3" 。 Col#2的长度为3,此处为"LLO" 。 Col#3的长度为9,长度为"24MACT01 " (注意,丢失的空格将被空格填充)。
2回复

根据字符串分割文本文件

我想通过一个特定的字符串确定每个文件的开头和结尾来将一个文本文件拆分为几个文件。 第一个文件的开头由"<ca>"行标识,结尾由"</ca>"标识。 现在,我想在新文本文件中的两个字符串之间剪切和粘贴内容。 到目前为止,我已经编写了以下代码: 第二个“ if”应该
1回复

Powershell-在2个不同的分隔符上分割字符串

我有一个文件名列表和一个我想读入Powershell的文本文件中的单独文件位置。 输入文件中有两列,用逗号分隔。 第一列给出文件共享的全名,包括文件名,第二列给出图像文件的部分路径。 例: 区别在于图像文件夹前面带有..的项目是相对于file_.txt所在的位置的。 在上面的示例中-
2回复

Powershell或excel在字符串的最后两个逗号处分割字符串

我有一个文件共享列表(成千上万行),并且大多数在excel中完全对齐,我可以使用文本对列进行拆分。 但是我遇到了一个问题,因为名称中有许多文件路径带有逗号,并且该文件路径在此处拆分而不是实际所需的分隔符。 这是字符串的示例: 在以上\\\\ Share开头的两行中,它在Jones和“,D
2回复

将字符串的输出分成单独的字符串

我一直在研究Powershell脚本,这真的让我很困惑。 该脚本分为两部分。 第一部分是获取域中所有服务器的功能。 我们有4个不同的域,因此我分别检查每个域并输出结果。 第二部分是在特定远程计算机上输出软件的功能。 就我而言,上面函数的输出将被植入该函数中,以查看服务器是否安装