Questione : Il valore fisso scrittura/di lettura posiziona il Perl delle lime n

Ciao,
I che prova a leggere una lima che ha 6 due punti. I dati riveleranno ad esattamente alle posizioni del same
colon. Ho provato a leggere in su sulla ricerca ed a dire ma che non ho trovato che un buon explaination.
Johanne1

here è 3 linee di input file.
743 Hafslund Telekom Nettjene 02011 20090616130000 20100208152959 comunicazioni l'asa 02011 della carota di I
704 20100208153000 99991231000000 I
729 TDC COME - 729 02090 20080609083000 99991231000000 due punti primissimi di I

The sono spazi in bianco e possono essere presi out.
There sono 6 due punti ma soltanto si preoccupano per i primi 5 due punti, cioè gli ultimi due punti possono essere presi l'uscita di out.
Desired hanno 2 requisiti; il
1. separa i due punti da un certo genere di due punti 5 di esempio semi-colon.
2. del delimitatore è una data se comincia da 9999 allora sostituisce con niente se la data non fa start
with 9999 allora non sostituisce it.

desired prodotto:

743; Hafslund Telekom Nettjene; 02011; 20090616130000; 20100208152959;
704; Comunicazioni asa della carota; 02011; 20100208153000; ;
729; TDC COME -729; 02090; 20080609083000; ; il


I ha scritto uno scritto al deciframento fra le parole e lettere e spazi ma fa il not
work a causa dei due punti 2 che sono un nome che può comprendere lo scritto di number.
The sotto la giusta risposta di elasticità per le prime 2 linee ma la linea 3 è ouput spaccato di incorrectly.

incorrect per la linea 3:
729; TDC COME -; 729; 02090; 20080609083000; ; il

The in secondo luogo 729 è ot che della parte il name.

It è stato suggerito a me ad in posizione fissa usato poiché ogni parte di dati sembrerà sempre in
the lo stesso colon.
Start che conta da 0.
example: i due punti 1 iniziano nei settimi inizio dei due punti 2 del position
nei dodicesimi inizio dei due punti 3 del position
nei trentaseesimi inizio dei due punti 4 del position
nei quarantottesimi inizio dei due punti 5 del position
in sessantasettesimo position.

Is là tutto il senso che posso immagazzinare facilmente il contenuto di ogni colonn using i due punti position.

Here sono il mio scritto basato sugli spazi, i decimali e le parole ma non funzioneranno mai a causa di
colon 2 contiene un titolo che ha parole e potrebbero avere un number.

$infile = “input.txt„;
$outfile = “output.txt„;
open (OUTF, “>$outfile„) || morire “non può aprire $outfile„;
open (INF, “<$infile„) || morire “non può aprire $infile„;
{
del
while () $tmp = $_; chomp del
($tmp);
$tmp=~ s/^ \ s+//; il @arr del
= ha spaccato (/\ s+/, $tmp);
$temp = "";
per ($i = 0; <= $#arr di $i;
{
di $i++) se (/\ d+/) {
del =~ di $arr [$i] se ((&& del eq di $i ($#arr - 1)) ($arr [$i] =~/^9999/))   {$temp = $temp. „ \; “;}

altrimenti {$temp = $temp.$arr [$i]. „ \; “;}
{
del elsif del
del
} ("" del Ne di $arr [$i+1]) se (/\ d+/del =~ di $arr [$i+1]) {$temp = $temp.$arr [$i]. „ \; “;}
altro {$temp = $temp.$arr [$i].„ “;}stampa OUTF “$temp \ n„ del
del
del
}};
close (INF) del
};
close (OUTF); il

Thanks in anticipo per la vostra parte ingannevole di advice.




the è i secondi due punti che sono un nome che può avere lettere e numera il and
have parecchio words
class= del

Risposta : Il valore fisso scrittura/di lettura posiziona il Perl delle lime n

Potete usare la scissione ad un livello del carbone & l'impionbatura per fare il trucco… Appena ricordar che gli elementi impiombati dall'allineamento sono rimossi in modo da spostare il vostro “indicatore„ di conseguenza. Test.txt assomiglia a questo nel mio caso:
pat1 modello pattern2
dfadafda del pappape xxd1
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#! /bin/perl
#
usare rigoroso;
usare gli avvertimenti;


aprire IH, “;
chiudere IH;

foreach il mio $line (@data) {
 il mio @spl = ha spaccato (/, $line);
 mio @col1 = @spl della giuntura, 0.4; #positions 2-9;
 mio @col2 = @spl della giuntura, 1.7; #positions 2-9;
  
 stampa @col1; 
 “\ n„ della stampa;
 stampa @col2; 
 “\ n„ della stampa;
}
Altre soluzioni  
 
programming4us programming4us