open(FH1, "<C:\\dw_ar_cust_info_351001.out") or die("Cann't open this file"); open(FH2, ">C:\\dw_ar_cust_info_351001.out.zhm") or die("cann't open this file"); print "operation running\n"; while (<FH1>) { @data = (); @data = unpack("c*", $_); # 以有符号的方式解包到@array中 $length = $#data + 1; @tmpdata = (); $loop = 0; for ( ; $loop<$length ; ) { if (($data[$loop]>-128 && $data[$loop]<0)) # 第一个字节大于128,表明此为汉字的开始 { if ($data[$loop + 1] == 9) # 汉字开始的头一个字节后面跟的是Tab符 { push(@tmpdata, $data[$loop + 1]); # 把Tab符压入栈中 $loop = $loop + 2; next; } if ($data[$loop + 1] == 10) # 汉字开始后的字节马上是换行符 { push(@tmpdata, $data[$loop + 1]); # 把换行符压入栈中 last; # 跳出循环,开始读取下一行 } } if ($data[$loop] > -128 && $data[$loop] < 0) # 如果该字节为中文的开始 { if(($data[$loop + 1] > 64) || ($data[$loop + 1] > -128 && $data[$loop + 1] < 0)) # 与前一个字节构成一个完整的汉字 { push(@tmpdata, $data[$loop]); push(@tmpdata, $data[$loop + 1]); $loop = $loop + 2; } } else # 合法的ASCII字符 { push(@tmpdata, $data[$loop]); $loop=$loop+1; } } $output=pack("c*", @tmpdata); print FH2 $output; } print "operation success\n"; close(FH1); close(FH2); |
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |