Thread Lesen Zeilen von einer Datei, verändern Zeilen in einer zweiten Datei (9 answers)
Opened by bora99 at 2016-11-22 11:45

bora99
 2016-11-22 11:45
#185629 #185629
User since
2009-12-05
54 Artikel
BenutzerIn
[default_avatar]
Hallo,

- Ich möchte in einer Datei (report),Zeichentrenner <tab>, alle Zeilen suchen, welche in Feld 4 "-" aufweisen
Datei report ( z1 bedeute Zeile1):
feld1z1 feld2z1 11/09/16 00:45:03 -
feld1z2 feld2z2 11/10/16 01:45:13 11/10/16 02:45:13
feld1z3 feld2z3 11/11/16 01:45:23 11/11/16 03:45:43
feld1z4 feld2z4 11/09/16 00:45:03 -

- Wenn Zeichen "-" gefunden, möchte ich die ersten 3 Felder in einer zweiten Datei (status) einfügen. Wenn gleiche Einträge sind schon vorhanden , sind diese zu ignorieren.
Datei status :
feld1z1 feld2z1 11/09/16 00:45:03

- Ich habe diesen Code entwickelt mit meinen Kenntnissen, ich hoffe open/close ist in Schleife richtig ?

- für FILEHANDLE +< muss die zweite Datei existieren, richtig ?
ein FILEHANDLE read/write/append gibt es nicht? FILEHANDLE +>> löscht die Einträge. Also muß ich FILEHANDLE +< verwenden ?

Aufruf : report.pl report status
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/perl
use warnings;
use strict;

my $report_file ;
my $status_file ;

my $r_Line;
my $s_Line;
my ($r_feld1 , $r_feld2, $r_datum1 , $r_datum2 ); 
my ($s_feld1 , $s_feld2, $s_datum ); 

my $found = 0;

if( $#ARGV == -1)
{
  print STDERR "Usage: $0 report status\n";
  exit 1;
}

$report_file =  $ARGV[0];
$status_file  = $ARGV[1];

open(REPORT, '<',  $report_file) or die $!;

while ( $r_Line = <REPORT> ) 
{
  chomp $r_Line;
  # alle Leerzeilen ignorieren
  if( $r_Line =~ /^[\s]*$/ )
  {
    next;
  }
   
  # Datei: report 
  # feld1z2 feld2z2 11/10/16 01:45:13       11/10/16 02:45:13
  ( $r_feld1 , $r_feld2, $r_datum1 , $r_datum2 ) = split("\t", $r_Line);
  # Spalte/Feld 4 ist gleich '-'
  if ( $r_datum2 eq '-' )
  {
    $found = 0;

    # open(STATUS, '+>>', $status_file) or die $!;
    open(STATUS, '+<', $status_file) or die $!;
    while ( $s_Line = <STATUS> ) 
    {
      chomp $s_Line;
      ( $s_feld1 , $s_feld2, $s_datum ) = split("\t", $s_Line);
      if ( $r_feld1 eq $s_feld1 && $r_feld2 eq $s_feld2 && $r_datum1 eq $s_datum )
      {
        $found = 1;
        next ;
      }
    }
    if ( $found == 0 )
    {
      # Kein Eintrag in Status Datei: status gefunden, daher append
      print STATUS $r_feld1 . "\t" . $r_feld2 . "\t" . $r_datum1  . "\n";
    }
    close(STATUS) or die $!;
  }
}

close(REPORT) or die $!;


Gruss
Last edited: 2016-11-22 12:34:28 +0100 (CET)

View full thread Lesen Zeilen von einer Datei, verändern Zeilen in einer zweiten Datei