2014-12-13 5 views
1

Я пытаюсь получить два значения из текстового файлаполучить значения из TXT файла Perl

мой 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 
+0

Таким образом, вы в основном хотите, чтобы удалить первую строку из файла и записать обратно остальное, то содержимое вывода первой линии в скобках? Если это так, я бы предложил что-то более короткое, чем 'perl -i -ne 'if ($. == 1) {s /: /) (/; s/^/(/; s/$ /) /; print STDERR } else {print} '2> & 1' вместо этого. – tripleee

+0

удалите строку один за другим и извлеките $ dx = 00001 $ code = 3wzhs7t2w5t2 после завершения файла завершения цикла – Sonia

+1

Почему, по-вашему, вам нужно перезаписать файл после каждый раз, когда вы читаете строку? – TLP

ответ

0

Вот небольшой фрагмент, который читает файл по строкам и для каждой строки выводит составляющие в двух переменных.

#!/usr/bin/env perl 

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

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

} 

Я надеюсь, что я не сделал домашнее задание ничьего;)

Смежные вопросы