Frage : Ablesen-/Schreibens-fester Wert bringen Akten n Perl in Position

Hallo,
I morgens versuchend, eine Akte zu lesen, die 6 Doppelpunkte hat. Die Daten zeigen an genau in den same
colon Positionen. Ich versuchte, oben auf Suchvorgang zu lesen und zu erklären aber fand nicht, dass ein gutes explaination.
Johanne1

here 3 Linien Eingang file.
743 Hafslund Telekom Nettjene 02011 20090616130000 20100208152959 I
704 Karotte-Kommunikationen ASA 02011 20100208153000 99991231000000 I
729 TDC WIE ist - 729 02090 20080609083000 99991231000000 I

The erste Doppelpunkte sind Leerstellen und können out.
There genommen werden sind 6 Doppelpunkte aber interessieren nur für die ersten 5 Doppelpunkte, d.h. kann letzter Doppelpunkt out.
Desired Ausgang genommen werden hat 2 Anforderungen;
1. trennen die Doppelpunkte durch irgendeine Art Doppelpunkt 5 des Begrenzerbeispiels semi-colon.
2. ist ein Datum, wenn es durch 9999 ersetzt dann durch nichts beginnt, wenn das Datum nicht start
with 9999 dann ersetzen nicht it.

desired ausgegeben tut:

743; Hafslund Telekom Nettjene; 02011; 20090616130000; 20100208152959;
704; Karotte-Kommunikationen ASA; 02011; 20100208153000; ;
729; TDC ALS -729; 02090; 20080609083000; ;


I schrieb einen Index zur Dechiffrierung zwischen Wörtern und Buchstaben und Räume, aber es tut not
work wegen Doppelpunktes 2, der ein Name ist, der den folgenden number.
The Index umfassen kann gibt richtige Antwort für erste 2 Linien, aber Linie 3 aufgeteiltes incorrectly.

incorrect ouput für Linie 3 ist:
729; TDC WIE -; 729; 02090; 20080609083000; ;

The an zweiter Stelle 729 ist Teil ot, welches das name.

It mir verwendete örtlich festgelegte Position vorgeschlagen, da jeder Datenteil immer in
the das gleiche colon.
Start, das von 0.
example zählt: Doppelpunkt 1 beginnt in den 7. position
Anfängen des Doppelpunktes 2 in den 12. position
Anfängen des Doppelpunktes 3 in den 36. position
Anfängen des Doppelpunktes 4 in den 48. position
Anfängen des Doppelpunktes 5 in 67. position.

Is dort jede mögliche Weise, die ich den Inhalt jedes colonn using den Doppelpunkt position.

Here leicht speichern kann bin mein Index, der auf Räumen basiert, arbeiten Dezimalstriche und Wörter aber nie wegen des
colon 2 enthält einen Titel, der Wörter hat und konnte ein number.

$infile = „input.txt“;
$outfile = „output.txt“;
open (OUTF, „>$outfile“) || sterben „kann $outfile nicht öffnen“;
open (INF, „<$infile“) || sterben „kann $infile nicht öffnen“;
while ()
{
$tmp = $_;
chomp ($tmp);
$tmp=~ s/^ \ s+//;
@arr = aufspaltete (/\ s+/, $tmp);
$temp = "";
für ($i = 0; $i <= $#arr; $i++)
{
, wenn ($arr [$i] =~/\ d+/) {
, wenn (($i eq ($#arr - 1)) && ($arr [$i] =~/^9999/))   {$temp = $temp. “ \; „;}

sonst {$temp = $temp.$arr [$i]. “ \; „;}
}
elsif ($arr [$i+1] Ne "")
{
wenn ($arr [$i+1] =~/\ d+/) {$temp = $temp.$arr [$i]. “ \; „;}
sonst {$temp = $temp.$arr [$i].“ „;}
}
}
Druck OUTF „$temp \ n“;
}
close (INF);
close (OUTF);

Thanks im Voraus für Ihr advice.




the heikles Teil ist der zweite Doppelpunkt, der ein Name ist, der Buchstaben haben kann und das einiges and
have words
nummeriert

Antwort : Ablesen-/Schreibens-fester Wert bringen Akten n Perl in Position

Sie können die Spaltung auf einem Putzfrauniveau u. das Verstärken verwenden, um den Trick zu tun… Einfach daran erinnern, dass die Elemente, die von der Reihe verstärkt, entfernt, also Ihren „Zeiger“ dementsprechend verschieben. Test.txt aussieht wie dieses in meinem Fall em:
pat1 Muster pattern2
pappape xxd1 dfadafda
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#! /bin/perl
#
strenges verwenden;
Warnungen verwenden;


IH öffnen, „;
IH schließen;

foreach mein $line (@data) {
 mein @spl = aufspaltete (/, $line);
 mein @col1 = Spleißstelle @spl, 0.4; #positions 2-9;
 mein @col2 = Spleißstelle @spl, 1.7; #positions 2-9;
  
 Druck @col1; 
 Druck„\ n“;
 Druck @col2; 
 Druck„\ n“;
}
Weitere Lösungen  
 
programming4us programming4us