本帖最后由 WHY 于 2021-6-29 00:00 编辑
回复 51# jave000 - $fd = 'E:\Test\PRT'; #存放prt文件的目录路径
- $reg = '(?-i)^\s+(\d+)\s+(.+)(?<!\s)\s+(\d+(?:X\d+)?)\s+(.+)(?<![\sX])\s+(\d+(?:\.\d+)?)(?>\s+M)?$';
- [Collections.ArrayList]$out = @();
-
- forEach ( $f In (dir $fd -Filter *.prt) ){
- $flag = $false;
- $name = $f.BaseName.ToUpper();
- $name = $name -replace '^(....)(....)(....)(.....)(.+)$', '$1-$2-$3-$4-$5';
- forEach ( $s In @(gc $f.FullName) ){
- if ( $s -match $reg ){
- if ( $flag ){
- [void]$out.Add( '"' + ($arr -join '","') + '"' );
- }
- $arr = @( '', '', '', '', '', $name );
- for ( $i=1; $i -le 5; $i++ ){ $arr[$i-1] = $matches[$i].Replace('"', '""'); }
- $flag = $true;
- } elseif ( $s -match '^ {11}(\S.*)'){
- $arr[1] += ' ' + $matches[1].Replace('"', '""');
- }
- }
- if ( $flag ){
- [void]$out.Add( '"' + ($arr -join '","') + '"' );
- }
- }
-
- sc 1.csv $out;
复制代码 个别文件描述列本身包含了双引号,比如:mmdiv710ds22lr0121.prt,格式发生错乱
已修改。 |