【问题标题】:get values from txt file perl从 txt 文件 perl 中获取值
【发布时间】:2014-12-13 20:47:19
【问题描述】:

我正在尝试从文本文件中获取两个值

我的 perl 代码是

#!/usr/bin/perl
use strict;
use Fcntl qw( :flock :DEFAULT );

exit unless sysopen( PID, '1.pid', O_RDWR | O_CREAT ) && flock( PID, LOCK_EX | LOCK_NB );
print PID "$$\n";

while(-s "1.txt")
{
 sleep 1;
 open(F,"1.txt")||die"12";
 my @arr=<F>;
 close F;
 exit if $#arr==-1;

 my $str=shift(@arr);

 open(F,">1.txt")||die"13";
 print F @arr;
 close F;

 $str=~s/[\n\r]+//g;
 my ($dx,$code)=$str=~/^(\d+):(\w+)$/;
 print"($dx)($code)\n";

}

我的文本文件

00001:3wzhs7t2w5t2
00001:3wzhs7t2w5t3
00001:3wzhs7t2w5t4

我的代码输出

()()

我需要

$dx = 00001
$code = 3wzhs7t2w5t2

【问题讨论】:

  • 所以你基本上是想删除文件的第一行并写回其余部分,然后输出带括号的第一行内容?如果那是准确的,我会建议使用更短的名称,例如 perl -i -ne 'if ($. == 1) { s/:/)(/; s/^/(/; s/$/)/; print STDERR } else { print }' 2&gt;&amp;1
  • 逐行删除并在循环完成文件清空后提取 $dx = 00001 $code = 3wzhs7t2w5t2
  • 为什么你认为每次读完一行都必须重写文件?

标签: perl command-line


【解决方案1】:

这是一个小sn-p,它逐行读取文件,并为每一行输出两个变量中的成分。

#!/usr/bin/env perl

open my $fh, '<', 'example.txt';

while (my $line = <$fh>) {
    chomp $line;
    if ($line =~ m/([^:]*):([^:]*)/) {
        my $dx = $1;
        my $code = $2;
    }

}

我希望我没有做任何人的作业;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多