Pytanie : /Writing Załatwiać Wartość Ustawiać kartoteka n PERL

Cześć,
I am kartoteka który mieć 6 dwukropek. The dane pokazywać pozycja przy dokładnie przy the same
colon pozycja. I próbować wymogi na aport i ale znajdować dobry explaination.
Johanne1

here być 3 linia wkład file.
743 Hafslund Telekom Nettjene 02011 20090616130000 20100208152959 I
704 Marchwiany Komunikacja ASA 02011 20100208153000 99991231000000 I
729 TDC - 729 02090 20080609083000 99991231000000 I

The pierwszych kilka dwukropek być pusty przestrzeń i móc brać out.
There być 6 dwukropek ale tylko dbać o the pierwszy 5 dwukropek, i.e ostatni dwukropek móc brać out.
Desired wydajność mieć 2 wymogi;
1. oddzielać the dwukropek niektóre jakby delimiter przykład semi-colon.
2. dwukropek 5 być data jeżeli ono zaczynać 9999 wtedy zamieniać z 9999 jeżeli the data start
with 9999 wtedy zamieniać it.

desired przesyłać:

743; Hafslund Telekom Nettjene; 02011; 20090616130000; 20100208152959;
704; Marchwiany Komunikacja ASA; 02011; 20100208153000; ;
729; TDC JAKO -729; 02090; 20080609083000; ;


I napisać pismo decipher między słowo i list i przestrzeń ale ono robić not
work przez dwukropek 2 che być imię który móc the number.
The pismo 2 dawać właściwa odpowiedź dla pierwszy 2 linia ale linia 3 być rozszczepiony incorrectly.

incorrect ouput dla linia 3:
729; TDC -; 729; 02090; 20080609083000; ;

The po drugie 729 być część ot the name.

It sugerować używać niezmienny pozycja ponieważ niezmienny dane część zawsze pojawiać się in
the ten sam colon.
Start liczenie od 0.
example: dwukropek (1) zaczynać w (1) position
dwukropek 2 początek w 2 position
dwukropek 3 początek w 3 position
dwukropek 4 początek w 4 position
dwukropek 5 początek w 5 position.

Is tam  jakaś sposób I móc łatwo the zawartość łatwo colonn using the dwukropek position.

Here być mój pismo opierać się na przestrzeń, decimals i słowo ale nigdy pracować przez
colon 2 zawierać tytuł który mieć słowo i można number.

$infile = "input.txt";
$outfile = "output.txt";
open (OUTF, ">$outfile") || kostka do gry "Móc $outfile";
open (INF, "<$infile") || kostka do gry "Móc $infile";
while ()
{
$tmp = $_;
chomp ($tmp);
$tmp=~ s/^ \ s+//;
@arr = rozłam (/\ s+/, $tmp);
$temp = "";
dla ($i = (0); $i <= $#arr; $i++)
{
jeżeli ($arr [$i] =~/\ d+/) {
jeżeli (($i eq ($#arr - 1)) && ($arr [$i] =~/^9999/))   {$temp = $temp. " \; ";}

inny {$temp = $temp.$arr [$i]. " \; ";}
}
elsif ($arr [$i+1] ne "")
{
jeżeli ($arr [$i+1] =~/\ d+/) {$temp = $temp.$arr [$i]. " \; ";}
inny {$temp = $temp.$arr [$i]." ";}
}
}
druk OUTF "$temp \ n";
}
close (INF);
close (OUTF);

Thanks w postęp dla twój advice.




the chytry część być the drugi dwukropek który być imię który móc list i liczyć and
have kilka words

Odpowiedź : /Writing Załatwiać Wartość Ustawiać kartoteka n PERL

Ty móc na char poziom & splicing the trikowy… Właśnie pamiętać że the element właśnie od szyk usuwać więc przesuwać twój "pointer" stosownie. Test.txt spojrzenie lubić skrzynka w mój skrzynka:
pat1 deseniowy pattern2
xxd1 pappape dfadafda
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#! /bin/perl
#
używać surowy;
używać ostrzeżenie;


otwierać IH, ";
zamykać IH;

foreach mój $line (@data) {
 mój @spl = rozłam (/, $line);
 mój @col1 = splis @spl, 0,4; #positions 2-9;
 mój @col2 = splis @spl, 1,7; #positions 2-9;
  
 druk @col1; 
 druk "\ n";
 druk @col2; 
 druk "\ n";
}
Inne rozwiązania  
 
programming4us programming4us