免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4233 | 回复: 3

如何修改一个制定文本文件中的内容? [复制链接]

论坛徽章:
0
发表于 2014-06-08 19:12 |显示全部楼层
本帖最后由 zhangfenyun 于 2014-06-08 19:12 编辑

如何修改一个制定文本文件中的内容?  
例如:我的电脑D盘下面有个文本文件WH.A0,里面的内容是这样的:

M48
T01C.0020                           我想修改的地方是这样的:当字母C后面的数字是0.0020的时候,就改为3.2   (就变成T01C3.2)T02C.4000                                                         当字母C后面的数字大于8的时候,就减去8  (就变成T04C0.7   T05C1.1 )
T03C3.1950
T04C8.7000
T05C9.1000
T06C20.0000                                                          当字母C后面的数字是20.00的时候,就改为0 (就变成T06C0.0)
%
M72                                                                       删除包含有M72的行        
G93X0Y0                                                                删除包含有G93X0Y0的行
T01
X017054Y007558
Y008176
X012094Y007558
Y008176
X011476
*****
*****
*****
*****

论坛徽章:
0
发表于 2014-06-08 19:14 |显示全部楼层
原本文件是
M48
T01C.0020
T02C.4000    (这个T02C.400   不用变)
T03C3.1950
T04C8.7000
T05C9.1000
T06C20.0000
%
M72
G93X0Y0
T01
X017054Y007558
Y008176

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2014-06-09 07:00 |显示全部楼层
你已经说得很明白了呀.

打开文件, 一行行读出来, 按你说的规则改好, 写入临时文件, 然后, 把临时文件rename回原来的文件, 就 OK了. 如果不放心, 就先把原来的rename为 .bak 文件.

论坛徽章:
0
发表于 2014-06-25 21:32 |显示全部楼层
刚学了3个星期的perl,希望能帮到你


#!perl -w

use strict;
my $fh;
my $num;

open $fh,'<','WH.A0.txt' or die "Can't open the file!!!\n";

while ( my $line = readline $fh ){
   
        chomp $line;
        my @parts = split /\./, $line;
       
        next if( $line =~ m/ ^ .*? (M72|G93X0Y0) .*? $ /mgx);
       
        if ( my ($a1 , $a2) = $line =~ m/ ^ T \d{2} C (\d*) . (\d+) $ /xg ){
            print "Before ==> ", $line, "\n";
               
                if ( $a2 eq '0020' )
                { $line =~ s/$parts[0].$parts[1]/$parts[0]3.2/mgx; }
               
                    if ( $a1 && ( $a1 ge 8 || $a1 lt 20)){
                             $num = $a1;
                                 $num = $num - 8;
                                 my $sub = substr ($parts[0],0,4);
                                 $line =~ s/$parts[0].$parts[1]/$sub$num.$parts[1]/gx;
                        }
                            if ( $a1 eq 20 ){
                                    my $sub1 = substr ($parts[0],0,4);
                                        my $zero = 0;
                                        $line =~ s/$parts[0].$parts[1]/$sub1$zero.$parts[1]/gx;
                                }
        }
        $line =~ s/0+$/0/gmx;
        print "Result => ", $line, "\n\n";
}

__END__
M48
T01C.0020
T02C.4000
T03C3.1950
T04C8.7000
T05C9.1000
T06C20.0000
%
M72
G93X0Y0
T01
X017054Y007558
Y008176


结果输出如下, 输出格式可以改成自己想要的,下面的输出可以把转换结果看得清晰些:

Result => M48

Before ==> T01C.0020
Result => T01C3.2

Before ==> T02C.4000
Result => T02C.40

Before ==> T03C3.1950
Result => T03C3.1950

Before ==> T04C8.7000
Result => T04C0.70

Before ==> T05C9.1000
Result => T05C1.10

Before ==> T06C20.0000
Result => T06C0.0

Result => %

Result => T01

Result => X017054Y007558

Result => Y008176
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP