[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 jave000 于 2021-6-23 23:59 编辑

回复 32# newswan

出现了这样的连续报错,运行速度也很慢,但也出了结果,只不过结果文件特别大,200KB的若干PRT文件,生成了一个4MB多的txt文件

    无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: ( [],RuntimeException
    + FullyQualifiedErrorId : NullArray

无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
    + FullyQualifiedErrorId : NullArray

无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
    + FullyQualifiedErrorId : NullArray

无法对 Null 数组进行索引。
所在位置 行:11 字符: 13
+         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
    + FullyQualifiedErrorId : NullArray

TOP

只需要保留 2 4 5 ?

TOP

本帖最后由 newswan 于 2021-6-24 00:00 编辑
  1. $Excel = New-Object -ComObject Excel.Application
  2. $Excel.Visible = $true
  3. $Workbook = $Excel.Workbooks.Add()
  4. $Sheet = $Workbook.Worksheets.Item(1)
  5. for ($i =1 ; $i -le $da.count ; $i++)
  6. {
  7.     $Sheet.cells($i,1).value = $da[$i-1]
  8. }
  9. $colA=$sheet.range("A1").EntireColumn
  10. $colrange=$sheet.range("A1")
  11. $colA.texttocolumns($colrange,1,1,$true,$true,$false,$false,$false)
  12. $sheet.columns.autofit()
  13. $Workbook.SaveAs(($PSScriptRoot + "\" + $fileDest))
  14. $excel.Quit()
复制代码
生成 excel 文件 加到后面
1

评分人数

TOP

本帖最后由 jave000 于 2021-6-23 23:52 编辑

回复 29# WHY


    你的代码好少啊……但是确实能生成两列,好强,它还能修改成显示五列吗?

TOP

  1. $reg = '(?-i)^\s+\d+\s+.*?(\S+)(?<!X)\s+(\d+(?:\.\d+)?)(?>\s+M)?$';
  2. $arr = (gc *.txt) -match $reg -replace $reg, '$1,$2';
  3. sc 1.csv $arr;
复制代码
1

评分人数

TOP

  1. $pathSour = "."
  2. $fileDest = "11.txt"
  3. [System.Collections.ArrayList] $da = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     $i = 0
  7.     while ($i -le $fc.count)
  8.     {
  9.         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  10.         {
  11.             $a = @("") * 6
  12.             $a[1] =$fc[$i].substring(0,4).trim()
  13.             $a[2] =$fc[$i].substring(4,46).trim()
  14.             $a[3] =$fc[$i].substring(50,13).trim()
  15.             $a[4] =$fc[$i].substring(63,18).trim()
  16.             $a[5] =$fc[$i].substring(81).trim()
  17.             #$a = $fc[$i] -split "\s{2,}"
  18.             #$a[-1] = $a[-1] -replace "\sm",""
  19.             while ($fc[$i+1] -match "^\s{11}\S")
  20.             {
  21.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  22.                 $i += 1
  23.             }
  24.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  25.             {
  26.                 $da.add($a -join "`t") | out-null
  27.             }
  28.         }
  29.         $i += 1
  30.     }
  31. }
  32. $da | out-file $fileDest
复制代码
按长度截取也可以
1

评分人数

TOP

回复 26# newswan


    $a = $fc[$i].trim() -split "\s{4,}*"
这个代码改成2或3都不行,都是空白,我删了.trim()也是一样的结果
目前这样如果难以解决,也很实用了,我私信你了
我刚看到版规,直接得到结果应该是有偿的
不知应该怎么感谢

TOP

回复 25# jave000

发现有这么一行,2个空格分隔
  1.   12    BELLOWS SEAL VALVE, HANDWHEEL, CLIMBING,  200          I372364            1
复制代码
暂时,解决办法,你先找例外情况,手动修改空格
或者导出的时候,导出为csv格式
找到所有例外情况,看看情况再决定

TOP

回复 20# newswan


    我直接把路径这一行删了,就成功运行了。
但是关于设置空格数量的,无论是刚才的单个文件,还是现在的多个文件,这两段代码,修改空格数量的代码后,运行都是空白

TOP

回复 23# jave000


    修改路径 $pathsour

TOP

回复 17# newswan


    若干*.prt,多个文件的运行结果是一个空白文本文档

TOP

本帖最后由 jave000 于 2021-6-24 00:27 编辑

回复 18# idwma

CMD窗口闪烁,58kb运行了一分钟,不太好用,不过结果很好
你这个代码我学习一下希望能尽快看懂,十分感谢

TOP

本帖最后由 newswan 于 2021-6-23 15:39 编辑

如果 保留m ,删除这一句
  1. $a[-1] = $a[-1] -replace "\sm",""
复制代码

TOP

本帖最后由 newswan 于 2021-6-23 15:25 编辑

回复 19# jave000

    改这一句,4个空格分列
  1. $a = $fc[$i].trim() -split "\s{4,}*"
复制代码

TOP

回复 14# newswan


    复制到excel已经是自动分列了,感谢你给我涨了知识。
出现了两处识别错误:

第一个是蝶阀,HAND LEVER, K2560C出现的位置不对,而且中间多了个空格,导致复制到excel后,后面两列错位,猜测是因为BUTTERFLY  VALVE中间有两个空格,这是我们数据库管理员输入描述有误,不知道是否能解决这种偶尔出现多个空格的BUG,毕竟真正用来分列的空格起码超过五个,能否设置小于三个的不算。
  17    BUTTERFLY  VALVE, HAND LEVER, K2560C,     100          IC02606            1
           NEOTECHA TYPE -TRIM N07,
           EN-GJS-400-18U-LT/PTFE, PN10, SCREW
           IN HOLE, CONTACT FACE FORM B1 DIN EN
           1092-1, INTEGR.GASKET, WN 8480, DN
           100

        17        BUTTERFLY NEOTECHA TYPE -TRIM N07, EN-GJS-400-18U-LT/PTFE, PN10, SCREW IN HOLE, CONTACT FACE FORM B1 DIN EN 1092-1, INTEGR.GASKET, WN 8480, DN 100        VALVE, HAND LEVER, K2560C,        100        IC02606        1


第二个是弯管,同样的BUG,两个空格导致识别错误。关于数量这里的“ M”我也不清楚能不能删,会不会干扰到描述里万一也有这样的字符,如果不行,我手动处理。
   3    PIPE BEND,  RADIUS 2,5 X D, WN 9900-1,    80           I302777           0.4 M
           H2/1.4404, SAWN END, - DN 80 - 88.9 X
           2.3

        3        PIPE BEND, H2/1.4404, SAWN END, - DN 80 - 88.9 X 2.3        RADIUS 2,5 X D, WN 9900-1,        80        I302777        0.4 M

TOP

返回列表