Leser: 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#! /usr/bin/perl use strict; use warnings; use Data::Dumper; # datei oeffnen, etc.; als Beispiel wird hier die DATA Sektion ausgelesen my @lines; while ( my $line = <DATA> ) { chomp $line; # umbruch entfernen # splitte Zeile am Trenner ' ', erzeuge anonymen Array # und fuege Referenz darauf in Array @lines. # AoA: Array-of-Array push @lines, [ split m{ }, $line ]; } print Dumper \@lines; __DATA__ Ich weiss nix. Ist dies falsch? Oder vielleicht richtig?
Quotealso ich hab ein txt file mit 3 spalten. die erste besteht aus text, die anderen 2 aus zahlen. es befinden sich 93 zeilen in dem array, aber dafür würde ich eine schleife verwenden
Quote. desweiteren habe ich ein array mit 6 einzelnen spalten aber einzeilig.
1
2
3
4
@array = (
'a1 a2 a3 a4 a5 a6', # element 1: string aus 6 worten
'b1 b2 b3 b4 b5 b6', # element 2: string aus 6 worten
);
Quoteich würde gern alle einzelnen spalten in einzelnen arrays haben
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# war vorher element 1
@array1 = (
'a1',
'a2',
'a3',
'a4',
'a5',
'a6',
);
# war vorher element 2
@array2 = (
'b1',
...
);
Quoteund hinterher alle mit einem string zu einer zeile mit 9 splaten zusammensetzen.
Quotehoffe das ist verständlich ausgedrückt
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
#! /usr/bin/perl use strict; use warnings; use Data::Dumper; # datei oeffnen, etc. my @array = ( 'a1 a2 a3 a4 a5 a6', 'b1 b2 b3 b4 b5 b6', ); # "datei" auslesen while ( my $line = <DATA> ) { chomp $line; # umbruch entfernen # Sollte 3 Felder (z.B. A,A1,A2) ergeben my @fields = split m{ }, $line; # fuer jeden String (z.B. "a1 a2 ... a6") for my $string ( @array ) { # string auftrennen my @additional = split m{ }, $string; # elemente beider arrays zum string zusammensetzen und ausgeben print join( ', ', @fields, @additional ), "\n"; } } __DATA__ A A1 A2 B B1 B2 C C1 C2
Quoteich würde gern alle einzelnen spalten in einzelnen arrays haben
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
@array1 = (
'a1',
'a2',
'a3',
'a4',
'a5',
'a6',
);
@array2 = (
'b1',
'b2',
...,
);
[\code]
nicht ganz, es sollte eher so aussehen:
[code]
@array1 = (
'a1',
'b1',
'c1',
'd1',
'e1',
'f1',};
@array2 = (
'b1',
'b2',
...,
);
Quoteund hinterher alle mit einem string zu einer zeile mit 9 splaten zusammensetzen.
Quotealso im prinzip (a1, a2, a3, A1, A2, A3, a4, a5, a6)
(a1, b1, c1, A1, A2, A3, d1, e1, f1)
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
#! /usr/bin/perl use strict; use warnings; use Data::Dumper; # datei oeffnen, etc. my @array = ( 'a1 a2 a3 a4 a5 a6', 'b1 b2 b3 b4 b5 b6', 'c1 c2 c3 c4 c5 c6', 'd1 d2 d3 d4 d5 d6', 'e1 e2 e3 e4 e5 e6', 'f1 f2 f3 f4 f5 f6', ); my @spalten; for my $str ( @array ) { my @arr = split m{ }, $str; # erzeuge AoA; der aeussere Index kennzeichnet die Spalte, # der innere Array hat die Elemente der Spalte for my $i ( 0 .. $#arr ) { push @{$spalten[$i]}, $arr[$i]; } # Kontrollausgabe warn Dumper( \@spalten ), $/; } # "datei" auslesen while ( my $line = <DATA> ) { chomp $line; # umbruch entfernen # Sollte 3 Felder (z.B. A,A1,A2) ergeben my @fields = split m{ }, $line; # fuer jede Spaltensammlung for my $aRef ( @spalten ) { # dereferenziere die Spaltensammlung und arbeite mit Kopie my @result = @$aRef; # fuege die eben ermittelten 3 Felder in die Kopie splice(@result,3,0,@fields); # gebe Ergebnis aus print join( ', ', @result), "\n"; } } __DATA__ A1 A2 A3 B1 B2 B3 C1 C2 C3
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
#! /usr/bin/perl use strict; use warnings; use Data::Dumper; # datei oeffnen, etc. my @array = ( 'a1 a2 a3 a4 a5 a6', 'b1 b2 b3 b4 b5 b6', ); # "datei" auslesen while ( my $line = <DATA> ) { chomp $line; # umbruch entfernen # Sollte 3 Felder (z.B. A,A1,A2) ergeben my @fields = split m{ }, $line; # fuer jede Zeile muss ein Element im Array sein; da hier # @array geleert wird, evtl. mit einer Kopie arbeiten if ( my $string = shift @array ) { # Array Element aufsplitten my @result = split m{ }, $string; # Zeilenfelder einfuegen splice( @result, 3, 0, @fields ); # Ausgabe print join( ', ', @result ), "\n"; } else { die "ERROR: Nicht genug Elemente im Array!\n"; } } __DATA__ A1 A2 A3 B1 B2 B3 C1 C2 C3
a1 a2 a3 a4 a5 a6
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
#! /usr/bin/perl use strict; use warnings; use Data::Dumper; # datei oeffnen, etc. my @array = ( 'a1 a2 a3 a4 a5 a6', ); my @spalten = split m{ }, $array[0]; # "datei" auslesen while ( my $line = <DATA> ) { chomp $line; # umbruch entfernen # Sollte 3 Felder (z.B. A,A1,A2) ergeben my @fields = split m{ }, $line; my @result = @spalten; splice(@result, 2, 0, @fields ); print join( ', ', @result ), "\n"; } __DATA__ A1 A2 A3 B1 B2 B3 C1 C2 C3
1
2
3
a1, a2, A1, A2, A3, a3, a4, a5, a6
a1, a2, B1, B2, B3, a3, a4, a5, a6
a1, a2, C1, C2, C3, a3, a4, a5, a6
2010-10-31T22:34:59 anoubei dem letzten code bekomme ich keinen output
1
2
3
4
:!perl /tmp/t2.pl
a1, a2, a3, A1, A2, A3, a4, a5, a6
b1, b2, b3, B1, B2, B3, b4, b5, b6
ERROR: Nicht genug Elemente im Array!
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
#!/usr/bin/perl -w
use strict;
use Bio::Perl;
use Data::Dumper;
my @var;
my @gff;
my @spalten;
my @fields;
my @results;
my $gff;
my $gfffilename;
my $string;
my $name;
my $line;
my $var;
my $score;
my $spalten;
@fields=();
@results=();
@var=();
@gff=();
my $varfilename;
my $ref;
print "Enter the filename of your input file with the single columns of your gff file:= ";
chomp ($gfffilename=<STDIN>);
open (GFFINPUT,'<',$gfffilename) or die ("$gfffilename Can not open file\n");
@gff=<GFFINPUT>;
print "Enter the filename of your input file with the variants:= ";
chomp ($varfilename=<STDIN>);
open (VARINPUT,'<',$varfilename) or die ("$varfilename Can not open file\n");
@var=<VARINPUT>;
#my @array = (
# 'a1 a2 a3 a4 a5 a6',
#);
my @spalten = split m{ }, $gff[0];
# "datei" auslesen
while ( my $line = <GFFINPUT> ) {
chomp $line; # umbruch entfernen
# Sollte 3 Felder (z.B. A,A1,A2) ergeben
my @fields = split m{ }, $line;
my @result = @spalten;
splice(@result, 2, 0, @fields );
print join( ', ', @result ), "\n";
}
1
2
"my" variable @spalten masks earlier declaration in same scope at /tmp/t3.pl line 41.
/tmp/t3.pl syntax OK
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
#!/usr/bin/perl -w use strict; use Data::Dumper; # sub routinen ########################### sub read_gff_file { print "Enter the filename of your input file with the single columns of your gff file:= "; chomp( my $gfffilename=<STDIN> ); open my $gff_fh, '<', $gfffilename or die "$gfffilename Can not open file\n"; # nur erste Zeile lesen chomp( my $gff = <$gff_fh> ); return split m{ }, $gff; } sub open_var_file { print "Enter the filename of your input file with the variants:= "; chomp( my $varfilename=<STDIN> ); open my $var_fh, '<',$varfilename or die "$varfilename Can not open file\n"; # keine Zeile lesen, nur Handle liefern return $var_fh; } sub do_my_job { my @spalten = read_gff_file(); my $var_handle = open_var_file(); while ( my $line = <$var_handle> ) { chomp $line; # Sollte 3 Felder (z.B. A,A1,A2) ergeben my @fields = split m{ }, $line; my @result = @spalten; splice(@result, 2, 0, @fields ); print join( ', ', @result ), "\n"; } } # main program ########################### do_my_job();