- 论坛徽章:
- 0
|
本帖最后由 myuanzhao 于 2017-06-25 19:57 编辑
在面试时遇到这么一道题:
以下是一个文件的一部分:
block1
LAYER1
a0=56, b0=147.345989944561, c0=11.0225098942223
a1=76, b1=174.434168420681, c1=253.89644118973
a2=42, b2=117.774925865152, c2=182.422622167185
LAYER2
a0=48, b0=164.391521356056, c0=243.612268442083
a1=56, b1=56.3028265552006, c1=67.3497698774622
a2=17, b2=182.182082410397, c2=265.689705668802
block2
LAYER1
a0=13, b0=98.5005938116799, c0=193.432038047288
a1=32, b1=173.682215090149, c1=284.746973938173
a2=80, b2=77.3396633455278, c2=45.913625227217
LAYER2
a0=89, b0=6.78883867591011, c0=181.63053325133
a1=35, b1=51.962410302621, c1=114.479466051294
a2=57, b2=88.5057901717936, c2=119.906443042102
LAYER3
a0=22, b0=135.172781428776, c0=180.32730953417
a1=89, b1=38.4925211497517, c1=171.120129693275
a2=53, b2=102.546819074468, c2=235.02212266283
a3=5, b3=46.5476781394699, c3=69.2620776701364
block3
..........
..........
要求利用perl,shell,tcl等语言将block2中的LAYER1和LAYER2中的内容替换为NEED TO REBUILD,替换后如下:
block1
LAYER1
a0=56, b0=147.345989944561, c0=11.0225098942223
a1=76, b1=174.434168420681, c1=253.89644118973
a2=42, b2=117.774925865152, c2=182.422622167185
LAYER2
a0=48, b0=164.391521356056, c0=243.612268442083
a1=56, b1=56.3028265552006, c1=67.3497698774622
a2=17, b2=182.182082410397, c2=265.689705668802
block2
LAYER1
NEED TO REBULID
LAYER2
NEED TO REBULID
LAYER3
a0=22, b0=135.172781428776, c0=180.32730953417
a1=89, b1=38.4925211497517, c1=171.120129693275
a2=53, b2=102.546819074468, c2=235.02212266283
a3=5, b3=46.5476781394699, c3=69.2620776701364
block3
..........
我自己的代码如下:
use strict;
my $file_dir="./generated_file";
my $str;
my $block_flag=0;
my $layer_flag=0;
open (IN,"<",$file_dir);
while(<IN>){
$block_flag=0 if ($block_flag && $_=~/^[\w]*$/);
$block_flag=1 if ($_=~/^block2/);
if($block_flag && $_=~/^\tLAYER[12]/){
$layer_flag=1;
$str.=$_;
$str.="\t\tNEED to REBUILD\n";
next;
}
if($layer_flag && $_=~/LAYER/){
$layer_flag=0;
}
next if($layer_flag);
$str.=$_;
}
close IN;
print $str;
面试官说我写的不好,我想了好久,也没什么好的想法,向各位大神请教,请问我的问题出在哪里了?或者说能不能有更简洁的方法来操作?
|
|