一個小問題的解決方案

gaorongchao1990626發表於2013-07-12

文字格式:

111 222 33 [232 23 23] 34324 <234 234 234> 234 324

把所有的空格替換為tab

但是[] <>裡面的忽略,不替換。

[]<>的位置是隨機的。可能出現任意域,但整個文字的格式是固定的。


安樂的解法

use 5.010;
use strict;
my $string = "233323 <123>  32323[2323]";
my @all = split '',$string;
my $flag = 0;
foreach (@all){
 if ($flag == 0 ){
	$_ = "\t" if $_ eq ' ';
	$flag = 1 if $_ eq '<';
	$flag = 2 if $_ eq '[';
 }elsif($flag == 1){
	next if $_ ne '>';
	$flag =0  
 }elsif($flag == 2){
	next if $_ ne ']';
	$flag =0 
 }else{
 }
}
$string = join '',@all;
say @all;

我的解法:

use strict;
use warnings;

my	$out_out = "result.txt";
open  my $out, '>', $out_out or die  "failed open$!\n";

my	$in_in = "a.txt";
open  my $in, '<', $in_in or die "cannot open\n";
while(<$in>)
{
	chomp;
	my $line=$_;
	print $out "$line\n";
	$line=~s/(<|\[)(\d+)\s+(\d+)\s+(\d+)(>|])/$1$2-$3-$4$5/g;
	$line=~s/\s+/\t/g;
	$line=~s/-/ /g;
	print $out "$line\n";
}
close  $in;
close  $out;


相關文章