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


    基本没啥改的了
    $pathSour 作用是 rpt 文件夹
    数据文件长度是明确的,按长度截取很简单
    $a[0] 未使用,可以用来记录文件名、日期或者其他什么的

TOP

回复 33# jave000


    生成的文件大很多?什么意思

TOP

回复 36# jave000
  1.    1    PIPE, SMLS, HG/T 20553, ASTM A312         200          I512912           2.1 M
  2.    2    PIPE, SMLS, HG/T 20553, ASTM A312         150          I512911           1.6 M
  3.    3    PIPE, SMLS, HG/T 20553, ASTM A312         50           I512906           0.3 M
  4.    4    PIPE, SMLS, HG/T 20553, ASTM A312         25           I512903           0.3 M
  5.    5    PIPE, SMLS, HG/T 20553, ASTM A312         20           I512902           0.2 M
  6.    6    CONCENTRIC REDUCER, SMLS, GB/T 12459,     200X150      I512654            1
  7.    7    ELBOW 90 C, SMLS, GB/T 12459, 90E(L),     200          I512504            1
  8.    8    ELBOW 90 C, SMLS, GB/T 12459, 90E(L),     50           I512498            1
  9.    9    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   200          I512820            1
  10.   10    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   150          I512819            1
  11.   11    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   50           I512814            1
  12.   12    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   25           I512799            1
  13.   13    BLIND FLANGE, EN 1092-1, TYPE 05, SA 182  25           I512946            1
  14.   14    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   20           I512798            1
  15.   15    GASKET, DIN EN 1514-1-IBC, NQ,            200          I224625            1
  16.   16    GASKET, DIN EN 1514-1-IBC, NQ,            150          I224624            2
  17.   17    GASKET, DIN EN 1514-1-IBC, NQ,            50           I224645            1
  18.   18    GASKET, DIN EN 1514-1-IBC, NQ,            25           I224638            2
  19.   19    GASKET, DIN EN 1514-1-IBC, NQ,            20           I224636            1
  20.   20    SCREWED CONNECTION, DIN EN ISO            20           I91453            16
  21.   21    SCREWED CONNECTION, DIN EN ISO            20           I91454             8
  22.   22    SCREWED CONNECTION, DIN EN ISO            16           I91413             4
  23.   23    SCREWED CONNECTION, DIN EN ISO            12           I91371             4
  24.   24    SCREWED CONNECTION, DIN EN ISO            12           I91372             8
  25.   25    ERROR READING SPECIALTY MATERIAL          150          V710RE11F3121      1
  26.   26    SLIDE SHOE SIDE MOVABLE COMPANY STD       200          S0W-200            1
  27.    1    PIPE, SMLS, HG/T 20553, ASTM A312         250          I512913           0.5 M
  28.    2    CONCENTRIC REDUCER, SMLS, GB/T 12459,     250X200      I512658            1
  29.    3    ELBOW 90 C, SMLS, GB/T 12459, 90E(L),     250          I512505            1
  30.    4    BLIND DISC, CS 473 PN 10 SERIES 2, SA     200          I512980            1
  31.    5    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   250          I512821            1
  32.    6    WELDNECK FLANGE, EN 1092-1, TYPE 11, SA   200          I512820            2
  33.    7    GASKET, DIN EN 1514-1-IBC, NQ,            250          I224614            1
  34.    8    GASKET, DIN EN 1514-1-IBC, NQ,            200          I224625            3
  35.    9    SCREWED CONNECTION, DIN EN ISO            20           I91454             8
  36.   10    SCREWED CONNECTION, DIN EN ISO            20           I91456             8
  37.   11    SCREWED CONNECTION, DIN EN ISO            20           I91455            12
  38.   12    BELLOWS SEAL VALVE, HANDWHEEL, CLIMBING,  200          I372364            1
复制代码
你数数各个列的宽度,第4楼的宽度非常整齐,如果不整齐,找下原因

TOP

本帖最后由 newswan 于 2021-6-24 11:03 编辑
  1. $pathSour = "."
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $al = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     for ($i = 0 ; $i -le $fc.count ; $i++)
  7.     {
  8.         if ($fc[$i] -match "^\s{2,3}(\d{1,2})(.{46})(.{13})(.{16})(.+)")
  9.         {
  10.             $a = @("") * 6
  11.             $a[0] = $_.basename
  12.             for ($j = 1 ; $j -le 5 ; $j++)
  13.             {
  14.                 $a[$j] = $matches[$j].trim()
  15.             }
  16.             $a[5] = $a[5] -replace "\sm",""
  17.             while ($fc[$i+1] -match "^\s{11}\S")
  18.             {
  19.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  20.                 $i += 1
  21.             }
  22.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  23.             {
  24.                 $al.add($a -join "`t") | out-null
  25.             }
  26.         }
  27.     }
  28. }
  29. $al | out-file ($fileDest + ".txt")
复制代码
你自己数宽度,宽度依次是 4 46 13 16 x

TOP

本帖最后由 newswan 于 2021-6-24 16:10 编辑
  1. $pathSour = ".\prt"
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $al1 = @()
  4. [System.Collections.ArrayList] $al2 = @()
  5. get-childitem -path $pathSour "*.prt" | foreach-object {
  6.     $fc = get-content $_.fullname
  7.     for ($i = 0 ; $i -lt $fc.count ; $i++)
  8.     {
  9.         if ($fc[$i] -match "^\s{2}[\s\d]\d\s{4}")
  10.         {
  11.             $al1.add($fc[$i] + "`t" + $_.basename) | out-null
  12.             #$re = '^\s{2,3}(\d{1,2})\s{4}(.+)\s+([^\s]+)\s+([^\s]+)\s+([\d]+[.]?[\d]*\s?M?)$'
  13.             $re = '^\s{2,3}(\d{1,2})(.{46})(.{13})(.{16})(.+)'
  14.             $fc[$i] -match "$re" | out-null
  15.             $a = @("") * 6
  16.             $a[0] = $_.basename
  17.             for ($j = 1 ; $j -le 5 ; $j++)
  18.             {
  19.                 $a[$j] = $matches[$j].trim()
  20.             }
  21.             $a[5] = $a[5] -replace "\sm",""
  22.             while ($fc[$i+1] -match "^\s{11}\S")
  23.             {
  24.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  25.                 $i += 1
  26.             }
  27.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  28.             {
  29.                 $al2.add($a -join "`t") | out-null
  30.             }
  31.         }
  32.     }
  33. }
  34. $al1 | out-file ($fileDest + "-1.txt")
  35. $al2 | out-file ($fileDest + "-a.txt")
  36. $v = [string[,]]::new($al2.count,1)
  37. for ($i =0 ; $i -lt $al2.count ; $i++)
  38. {
  39.     $v[$i,0] = $al2[$i]
  40. }
  41. $Excel = New-Object -ComObject Excel.Application
  42. $Excel.Visible = $true
  43. $Workbook = $Excel.Workbooks.Add()
  44. $Sheet = $Workbook.Worksheets.Item(1)
  45. $rng = "A1:A" +  $al2.count
  46. $Sheet.range($rng).value2 = $v
  47. $colA = $sheet.range("A1").EntireColumn
  48. $colrange = $sheet.range("A1")
  49. $colA.texttocolumns($colrange,1,1,$false,$true,$false,$false,$false) | out-null
  50. $sheet.columns.autofit() | out-null
  51. $Workbook.SaveAs(($PSScriptRoot + "\" + $fileDest))
  52. $excel.Quit()
复制代码
$re 有两个,还是按列分割比较好。

TOP

  1. $pathSour = ".\prt"
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $al1 = @()
  4. [System.Collections.ArrayList] $al2 = @()
  5. get-childitem -path $pathSour "*.prt" | foreach-object {
  6.     $fc = get-content $_.fullname
  7.     $nf = $_.basename.ToUpper()
  8.     $nf = $nf -replace "(\w{4})(\w{1,4})?(\w{1,4})?(\w{1,5})?(.*)","`$1-`$2-`$3-`$4-`$5" -replace "-+$",""
  9.     for ($i = 0 ; $i -lt $fc.count ; $i++)
  10.     {
  11.         if ($fc[$i] -match "^\s{2}[\s\d]\d\s{4}")
  12.         {
  13.             $al1.add($fc[$i] + "`t" + $_.basename) | out-null
  14.             #$re = '^\s{2,3}(\d{1,2})\s{4}(.+)\s+([^\s]+)\s+([^\s]+)\s+([\d]+[.]?[\d]*\s?M?)$'
  15.             $re = '^\s{2,3}(\d{1,2})(.{46})(.{13})(.{16})(.+)'
  16.             $fc[$i] -match "$re" | out-null
  17.             $a = @("") * 6
  18.             $a[0] = $nf
  19.             for ($j = 1 ; $j -le 5 ; $j++)
  20.             {
  21.                 $a[$j] = $matches[$j].trim()
  22.             }
  23.             $a[5] = $a[5] -replace "\sm",""
  24.             while ($fc[$i+1] -match "^\s{11}\S")
  25.             {
  26.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  27.                 $i += 1
  28.             }
  29.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  30.             {
  31.                 $al2.add($a -join "`t") | out-null
  32.             }
  33.         }
  34.     }
  35. }
  36. $al1 | out-file ($fileDest + "-1.txt")
  37. $al2 | out-file ($fileDest + "-a.txt")
  38. $v = [string[,]]::new($al2.count,1)
  39. for ($i =0 ; $i -lt $al2.count ; $i++)
  40. {
  41.     $v[$i,0] = $al2[$i]
  42. }
  43. $Excel = New-Object -ComObject Excel.Application
  44. $Excel.Visible = $true
  45. $Workbook = $Excel.Workbooks.Add()
  46. $Sheet = $Workbook.Worksheets.Item(1)
  47. $rng = "A1:A" +  $al2.count
  48. $Sheet.range($rng).value2 = $v
  49. $colA = $sheet.range("A1").EntireColumn
  50. $colrange = $sheet.range("A1")
  51. $colA.texttocolumns($colrange,1,1,$false,$true,$false,$false,$false) | out-null
  52. $sheet.columns.autofit() | out-null
  53. $Workbook.SaveAs(($PSScriptRoot + "\" + $fileDest))
  54. $excel.Quit()
复制代码
1

评分人数

TOP

本帖最后由 newswan 于 2021-6-25 23:46 编辑
  1. $pathSour = ".\prt"
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $al2 = @()
  4. get-childitem -path $pathSour "*.prt" | foreach-object {
  5.     $nf = $_.basename.ToUpper()
  6.     $nf = $nf -replace "(\w{4})(\w{1,4})?(\w{1,4})?(\w{1,5})?(.*)","`$1-`$2-`$3-`$4-`$5" -replace "-+$",""
  7.     $fc = (get-content $_.fullname) -match ''^\s{2,3}\d{1,2}\s{4}.+|^\s{11}\S.+''
  8.     for ($i = 0 ; $i -lt $fc.count ; $i++)
  9.     {
  10.         if ($fc[$i] -match "^\s{2}[\s\d]\d\s{4}")
  11.         {
  12.             #$re = '^\s{2,3}(\d{1,2})\s{4}(.+)\s+([^\s]+)\s+([^\s]+)\s+([\d]+[.]?[\d]*\s?M?)$'
  13.             $re = '^(.{4})(.{46})(.{13})(.{16})(.+)'
  14.             $fc[$i] -match "$re" | out-null
  15.             $a = @("") * 6
  16.             $a[0] = $nf
  17.             for ($j = 1 ; $j -le 5 ; $j++)
  18.             {
  19.                 $a[$j] = $matches[$j].trim()
  20.             }
  21.             $a[5] = $a[5] -replace "\sm",""
  22.             while ($fc[$i+1] -match "^\s{11}\S")
  23.             {
  24.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  25.                 $i += 1
  26.             }
  27.             $al2.add($a -join "`t") | out-null
  28.         }
  29.     }
  30. }
  31. $al2 | out-file ($fileDest + ".txt")
复制代码
1

评分人数

TOP

最稳妥的应该这样:导出为csv格式。

TOP

三种分列方式,对比,还是按宽度截取,最佳
  1. $pathSour = ".\prt"
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $alc = @()
  4. $res1 = "^\s{2,3}\d{1,2}\s{4}.+"
  5. $res2 = "^\s{11}\S.+"
  6. $rea = "$res1" + "|" + "$res2"
  7. $renfs = "(\w{4})(\w{1,4})?(\w{1,4})?(\w{1,5})?(.*)"
  8. $renfd = "`$1-`$2-`$3-`$4-`$5"
  9. $rew = "^(.{4})(.{46})(.{13})(.{15})(.+)"
  10. $re2s = '^\s{2,3}(\d{1,2})\s{4,}(.+?)(?<=\S)\s{2,}(\d+(?:X\d+)?)\s{2,}(\S+(?:\s\S+)*)\s{2,}([\d]+(?:[.]\d+)?(?:\sM)?)$'
  11. $re2d = "`t`$1`t`$2`t`$3`t`$4`t`$5"
  12. get-childitem -path $pathSour "*.prt" | foreach-object {
  13.     write-host $_.basename
  14.     $fc = (get-content -Encoding utf8 $_.fullname) -match $rea
  15.     for ($i = 0 ; $i -lt $fc.count ; $i++)
  16.     {
  17.         if ($fc[$i] -match "^\s{2}[\s\d]\d\s{4}")
  18.         {
  19.             $s1 = $fc[$i]
  20.             # 以3+空格
  21.             $a1 = (" " + $s1) -replace "(?<=\S)  (?=\d)","   " -split "   +"
  22.             $a1line1 = $a1 -join "`t"
  23.             #re2s
  24.             $a2line1 = $s1 -replace $re2s,$re2d
  25.             # 宽度
  26.             $s1 -match $rew | out-null
  27.             $aw = @("") * 6
  28.             for ($j = 1 ; $j -le 5 ; $j++)
  29.             {
  30.                 $aw[$j] = $matches[$j].trim()
  31.             }
  32.             $awline1 = $aw -join "`t"
  33.             
  34.             if ( ($a1line1 -ne $awline1 ) -or ($a2line1 -ne $awline1 ))
  35.             {
  36.                 $alc.add( $_.basename + "`n" + $s1) | out-null
  37.                 $alc.add( "1" + $a1line1 + "`n" + "2" + $a2line1 + "`n" + "w" + $awline1 + "`n" ) | out-null
  38.             }
  39.         }
  40.     }
  41. }
  42. $alc | out-file -encoding utf8 ($fileDest + "-c.txt")
复制代码
下面12w开头的行,对应三种方式
  1. mdiv610ab21lr0035
  2.   21    SEE PIPING SPECIAL SUPPORT DRAWING                     SS1139             1
  3. 1 21 SEE PIPING SPECIAL SUPPORT DRAWING SS1139 1
  4. 2  21    SEE PIPING SPECIAL SUPPORT DRAWING                     SS1139             1
  5. w 21 SEE PIPING SPECIAL SUPPORT DRAWING SS1139 1
复制代码

TOP

用这个正则,和宽度分列一样了
  1. $re2s = '^\s{2,3}(\d{1,2})\s{4,}(.+?)(?<=\S)\s{2,}(\d*(?:\s?X\d+)?)\s{2,}(\S+(?:\s\S+)*)\s{2,}([\d]+(?:[.]\d+)?(?:\sM)?)$'
复制代码

TOP

  1. $pathSour = ".\prt"
  2. $fileDest = "22"
  3. if (-not ([string]::IsNullOrEmpty($args[0])))
  4. {
  5.     $pathSour = $args[0]
  6. }
  7. remove-item $fileDest*.*
  8. [System.Collections.ArrayList] $al = @()
  9. $rem = "^\s{3}\d{1}|^\s{2}\d{2}|^\s{11,12}\S.+"
  10. $renfs = "(\w{4})(\w{1,4})?(\w{1,4})?(\w{1,5})?(.*)"
  11. $renfd = "`$1-`$2-`$3-`$4-`$5"
  12. $res = "`n(.{4})(.{46})(.{13})(.{15})(.+)((?:`n\s{11,12}.+)*)"
  13. #$res = "`n\s{2,3}(\d{1,2})\s{4,}(\S.+?\S)\s{2,}(\d+(?:X\d+)?)\s{2,}(\S+(?:\s\S+)*)\s{2,}(\d+(?:[.]\d+)?(?:\sM)?)((?:`n\s{11,12}.+)*)"
  14. $red = "`t`$1`t`$2`$6`t`$3`t`$4`t`$5::"
  15. get-childitem -path $pathSour "*.prt" | foreach-object {
  16.     write-host "  "$_.basename
  17.     $nf = $_.basename.ToUpper() -replace $renfs,$renfd -replace "-+$","";
  18.     $a = "`n" + (((get-content -Encoding utf8 -path $_.fullname ) -match $rem) -join "`n") ;
  19.     if ( $a.length -gt 0 )
  20.     {
  21.         $a = $a -replace $res,$red -replace "[ `n]+"," " -replace " *`t *","`t"
  22.         $a = $a -replace "::$","" -replace "::","`n" -replace "(?m)\sm$","" -replace "(?m)^(?=`t)",$nf
  23.         $al.add($a) | out-null
  24.     }
  25. }
  26. $al | out-file -encoding utf8 ($fileDest + "-a.txt")
复制代码

TOP

返回列表