- 論壇徽章:
- 1
|
我也來(lái)一個(gè),雖然我的比你長(zhǎng),但是我得思路更加的清晰:
問(wèn)題: 文件要以含“DRILL_SIZE=”來(lái)排序,并重組“NUM=”的那行
數(shù)據(jù)文件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
- }
復(fù)制代碼
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ù)制代碼
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";'
- /// 讀取文件內(nèi)容
- $f=file_get_contents("e:\\usr\\local\\www\\work\\data.txt");
- /// 匹配每一個(gè)TOOLS { ... } 的部分,同時(shí)匹配DRILL_SIZE=...的部分
- preg_match_all("/\\TOOLS {.+?DRILL_SIZE=([\\d\\.]+).+?\\}/s",$f,$a);
- /// 查看數(shù)組$a的結(jié)構(gòu)
- echo('查看數(shù)組$a的結(jié)構(gòu)n');
- var_export($a);
- /// 排序數(shù)組$a的子數(shù)組$a[1],并保留hash索引
- asort($a[1]);
- echo('查看數(shù)組$a的結(jié)構(gòu),此時(shí)$a[1]已經(jīng)排序n');
- /// 查看數(shù)組$a的結(jié)構(gòu),此時(shí)$a[1]已經(jīng)排序
- var_export($a);
- echo('遍歷$a[1],并輸出$a[0]對(duì)應(yīng)的項(xiàng),同時(shí)遞增替換NUM=...n');
- /// 遍歷$a[1],并輸出$a[0]對(duì)應(yīng)的項(xiàng),同時(shí)遞增替換NUM=...
- foreach($a[1] as $k=>$v) echo preg_replace("/(?<=NUM=)\\d+/",++$i,$a[0][$k])."\n";
- ?>
復(fù)制代碼
PHP代碼調(diào)試結(jié)果
- ---------- PHP代碼調(diào)試 ----------
- Content-type: text/html
- X-Powered-By: PHP/4.3.10
- 查看數(shù)組$a的結(jié)構(gòu)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',
- ),
- )查看數(shù)組$a的結(jié)構(gòu),此時(shí)$a[1]已經(jīng)排序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]對(duì)應(yīng)的項(xiàng),同時(shí)遞增替換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
- }
- 輸出完成 (耗時(shí) 0 秒) - 正常終止
復(fù)制代碼
[ 本帖最后由 HonestQiao 于 2005-11-18 15:24 編輯 ] |
|