Thread code einbinden (7 answers)
Opened by Henri at 2015-08-22 22:33

Gast Henri
 2015-08-22 22:33
#181876 #181876
Hallo leute ich werde euch um Hilfe bitten,

ich habe 4 (A,B,C,D) perl-skript die ich gern einbinden möchte leider klappt es nicht un hier gibt kluger Menschen die mir vielleicht helfen können.
Am anfang dachte ich es wäre ein einfache Aufgabe, leider ist es aber nicht.
ich muss A+B einbinden und C+D einbinden.

Hier habe ich mit A+B begonnen so sieht es aus

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 #!/usr/bin/perl
    use strict;
    use warnings;
    use autodie;
    use List::Util 'any';
    use Text::CSV;
     
    my $input_file = 'DATA.csv';
    my (@headers, %docs);
        my $n = 0;
        my @docs;
        
    open my $fh, '>',"fh.html";
        
    open(my $Fhresult, '<', $input_file);
    while (<$Fhresult> ) {      
     last if (/^\d+\s+\d{2}:\d{2}:\d{2}\s*$/); 
    }
    while (<$Fhresult> ) { 
     if ($. == 2) {          
       chomp;  
       s/^default,\s*//;   
       @headers = split ( /[ ,. ;:\(\)\/\*\"]+/ );  
       next; 
     }
     next unless /\S/;
     chomp;
         
    my ($file, @fields) = split /\s*,\s*|\s+/;  
    push @docs, {'file'=>$file, 'fields'=>\@fields} if any { $_ eq 'fault' } @fields;
}

close($Fhresult);


foreach my $doc (@docs) {        
open($fh, '>', "$doc->{'file'}.html" );
    print $fh  "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">
<html>
 <head>
   <title>SYSTEM</title>
   <meta charset=\"UTF-8\"/>
   <link href=\"syst.css\" type=\"text/css\" rel=\"stylesheet\"/>
 </head>
 <body>\n<div id=\"c1\">\n<table>\n<tr>\n<th>";
    print $fh $doc->{'file'} , ":</th>\n</tr>\n";
    foreach (0..$#headers) {     
        print $fh ("<tr><td>$headers[$_]</td>\n<td>$doc->{'fields'}[$_]</td></tr>");
                
                 ++$n;
    }
        print $fh "</tr>\n</table>\n";
        
}


my $csv = Text::CSV->new;
open my $csv_file, "<", "DATA2.csv" or die "Can't open CSV file: $!\n";
while (my $row = $csv->getline($csv_file)) {

    
    my($significator_and_file) = clean($row->[0]);
    my ($significator, $file) = split /\s+/, $significator_and_file;
    next unless $significator and $significator eq 'false';

    open (my $per_line_fh, ">>", "$file.html") or die "Can't open per-line file $file: $!\n";

    
    shift @$row;
        
        print $per_line_fh "<table>\n<tr><th>$file:</th></tr>\n";
        
        for my $i(map {clean($_)} @$row) {
          #chomp $i;       
        my $d = "<tr><td>$i</td></tr>\n";
        chomp $i;
    print $per_line_fh $d if ($i); 
        }
    print $per_line_fh "</table>\n</body>\n</html>";
    close $per_line_fh;
}

sub clean {    
    my $string = shift;
    $string =~ /\s*,\s*/;
    $string =~ /\s*,\s*/;
    return $string;
}


die beide code auseinender laufen perfekt, leider wenn ich die einbindne gibt es ein problem.
ich erkläre
Code A geht bis zu Zeile 54 und code B von 54 bis 80
jede von diesem Code wenn ich die entsprechende Data laufen lasse, geben mir mehrere Dateien zurück, jede Datei hat eine Name ich diese datei werden informationen geschrieben.
wenn ich A lauft lässen bekomme ich die Dateien danach werde die durch append geöffnen und geschrieben.
Da die infomationen aus der DATA2.csv wiederholen sich mehrere mal(das ist ganz normal) mein code schreibt leider diese Info leider auch mehrere mal auf meinem in den ausgabe File, gibt es eine möchglichkeit zu machen dass meine Code nur jedes mal die Informationen in den entsprechende Datei nur einmal schreibt und geht auf dem nächste und so weiter.
Last edited: 2015-08-22 22:50:17 +0200 (CEST)

View full thread code einbinden