Thread Zwei Dateien auslesen (8 answers)
Opened by azib at 2015-10-29 16:17

hlubenow
 2015-11-02 19:05
#182761 #182761
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Na ja, fast. ;) Ein paar Leerzeichen zwischen Funktionsnamen und Klammern waren bei Funktionsaufrufen noch da.
Mit den Einrückungen ist das so: Am besten macht man vier Leerzeichen pro Block. Auf die Dauer ist das am übersichtlichsten, vor allem, wenn man auf einer tieferen Blockebene schreibt. Also so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use warnings;
use strict;

for my $i (1 .. 10) {
    # Block 1
    print "i: $i\n";

    for my $u (1 .. 5) {
        # Block 2
        print "u: $u\n";
    }
}

Ok?

An Deinem Code stimmt aber trotzdem was nicht, denn was macht
Code (perl): (dl )
for ($file1) { ... }

denn? Das ist nicht richtig. Wortwörtlich wäre Deins so:
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
#!/usr/bin/perl

use warnings;
use strict;

my $file1;
my $file2;
my $in1;
my $in2;
my $datei1;
my $datei2;
my @out1;
my @out2;
my $i;

print 'Enter ID Sample 1: ';
$file1 = <STDIN>;       
chomp($file1);

open ($in1, "<", $file1) or die "Datei $file1 konnte konnte nicht gefunden werden!";
while (<$in1>) {
    chomp($_);   
    my @a  = split(/\t/, $_);
    push (@out1, "$a[1]\t$a[12]\n");
}       
close($in1);

open($datei1, ">", "out1.txt");
foreach $i (@out1) {
    print $datei1 $i;
}
close($datei1); 

print 'Enter ID Sample 2: ';
$file2 = <STDIN>;
chomp($file2);
 
open ($in2, "<", $file2) or die "Datei $file2 konnte konnte nicht gefunden werden!";
while (<$in2>) {
    chomp($_);   
    my @b  = split(/\t/, $_);
    push (@out2, "$b[1]\t$b[12]\n");
}       
close($in2);

open ($datei2, ">", "out2.txt");
foreach $i (@out2) {
    print $datei2 $i;
}
close($datei1);

Wenn man Code-Abschnitte hat, die sich wiederholen, bietet es sich aber an, dafür eine Funktion zu verwenden. Das wäre dann so:
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
#!/usr/bin/perl

use warnings;
use strict;

sub processFile {
    my $nr = shift;
    my @a;
    my @out;
    my $i;
    print "\nEnter ID Sample $nr: ";
    my $filename = <STDIN>;       
    chomp($filename);
    open (my $in, "<", $filename) or die "Datei $filename konnte konnte nicht gefunden werden!";
    while (<$in>) {
        chomp($_);   
        @a  = split(/\t/, $_);
        push(@out, "$a[1]\t$a[12]\n");
    }       
    close($in);
    open(my $datei, ">", "out$nr.txt");
    foreach $i (@out) {
        print $datei $i;
    }
    close($datei);
}

processFile("1");
processFile("2");

HTH

View full thread Zwei Dateien auslesen