- 论坛徽章:
- 1
|
我也来一个,虽然我的比你长,但是我得思路更加的清晰:
问题: 文件要以含“DRILL_SIZE=”来排序,并重组“NUM=”的那行
数据文件file
- TOOLS {
- NUM=0
- SHAPE=HOLE
- TYPE=NON_PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=40
- DRILL_SIZE=45.2755905511811
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=1
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=12
- DRILL_SIZE=17.71653543307087
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=2
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=22
- DRILL_SIZE=27.55905511811024
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=3
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=28
- DRILL_SIZE=33.46456692913386
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=4
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=35
- DRILL_SIZE=41.33858267716536
- SLOT_LENGTH=0
- }
复制代码
PHP命令行代码
- php -r'$f=file_get_contents(file);preg_match_all("/\\TOOLS {.+?DRILL_SIZE=([\\d\\.]+).+?\\}/s",$f,$a);asort($a[1]);foreach($a[1] as $k=>$v)echo preg_replace("/(?<=NUM=)\\d+/",++$i,$a[0][$k])."\\n";'
复制代码
PHP代码分析
- <?php
- /// php -r'$f=file_get_contents(file);preg_match_all("/\\TOOLS {.+?DRILL_SIZE=([\\d\\.]+).+?\\}/s",$f,$a);asort($a[1]);foreach($a[1] as $k=>$v)echo preg_replace("/(?<=NUM=)\\d+/",++$i,$a[0][$k])."\n";'
- /// 读取文件内容
- $f=file_get_contents("e:\\usr\\local\\www\\work\\data.txt");
- /// 匹配每一个TOOLS { ... } 的部分,同时匹配DRILL_SIZE=...的部分
- preg_match_all("/\\TOOLS {.+?DRILL_SIZE=([\\d\\.]+).+?\\}/s",$f,$a);
- /// 查看数组$a的结构
- echo('查看数组$a的结构n');
- var_export($a);
- /// 排序数组$a的子数组$a[1],并保留hash索引
- asort($a[1]);
- echo('查看数组$a的结构,此时$a[1]已经排序n');
- /// 查看数组$a的结构,此时$a[1]已经排序
- var_export($a);
- echo('遍历$a[1],并输出$a[0]对应的项,同时递增替换NUM=...n');
- /// 遍历$a[1],并输出$a[0]对应的项,同时递增替换NUM=...
- foreach($a[1] as $k=>$v) echo preg_replace("/(?<=NUM=)\\d+/",++$i,$a[0][$k])."\n";
- ?>
复制代码
PHP代码调试结果
- ---------- PHP代码调试 ----------
- Content-type: text/html
- X-Powered-By: PHP/4.3.10
- 查看数组$a的结构narray (
- 0 =>
- array (
- 0 => 'TOOLS {
- NUM=0
- SHAPE=HOLE
- TYPE=NON_PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=40
- DRILL_SIZE=45.2755905511811
- SLOT_LENGTH=0
- }',
- 1 => 'TOOLS {
- NUM=1
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=12
- DRILL_SIZE=17.71653543307087
- SLOT_LENGTH=0
- }',
- 2 => 'TOOLS {
- NUM=2
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=22
- DRILL_SIZE=27.55905511811024
- SLOT_LENGTH=0
- }',
- 3 => 'TOOLS {
- NUM=3
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=28
- DRILL_SIZE=33.46456692913386
- SLOT_LENGTH=0
- }',
- 4 => 'TOOLS {
- NUM=4
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=35
- DRILL_SIZE=41.33858267716536
- SLOT_LENGTH=0
- }',
- ),
- 1 =>
- array (
- 0 => '45.2755905511811',
- 1 => '17.71653543307087',
- 2 => '27.55905511811024',
- 3 => '33.46456692913386',
- 4 => '41.33858267716536',
- ),
- )查看数组$a的结构,此时$a[1]已经排序narray (
- 0 =>
- array (
- 0 => 'TOOLS {
- NUM=0
- SHAPE=HOLE
- TYPE=NON_PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=40
- DRILL_SIZE=45.2755905511811
- SLOT_LENGTH=0
- }',
- 1 => 'TOOLS {
- NUM=1
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=12
- DRILL_SIZE=17.71653543307087
- SLOT_LENGTH=0
- }',
- 2 => 'TOOLS {
- NUM=2
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=22
- DRILL_SIZE=27.55905511811024
- SLOT_LENGTH=0
- }',
- 3 => 'TOOLS {
- NUM=3
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=28
- DRILL_SIZE=33.46456692913386
- SLOT_LENGTH=0
- }',
- 4 => 'TOOLS {
- NUM=4
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=35
- DRILL_SIZE=41.33858267716536
- SLOT_LENGTH=0
- }',
- ),
- 1 =>
- array (
- 1 => '17.71653543307087',
- 2 => '27.55905511811024',
- 3 => '33.46456692913386',
- 4 => '41.33858267716536',
- 0 => '45.2755905511811',
- ),
- )遍历$a[1],并输出$a[0]对应的项,同时递增替换NUM=...nTOOLS {
- NUM=1
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=12
- DRILL_SIZE=17.71653543307087
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=2
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=22
- DRILL_SIZE=27.55905511811024
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=3
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=28
- DRILL_SIZE=33.46456692913386
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=4
- SHAPE=HOLE
- TYPE=PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=35
- DRILL_SIZE=41.33858267716536
- SLOT_LENGTH=0
- }
- TOOLS {
- NUM=5
- SHAPE=HOLE
- TYPE=NON_PLATED
- TYPE2=STANDARD
- MIN_TOL=3.15
- MAX_TOL=3.15
- BIT=
- FINISH_SIZE=40
- DRILL_SIZE=45.2755905511811
- SLOT_LENGTH=0
- }
- 输出完成 (耗时 0 秒) - 正常终止
复制代码
[ 本帖最后由 HonestQiao 于 2005-11-18 15:24 编辑 ] |
|