innerhalb von spalten rechnen
|
Seitenanfang |
hi leute, habe gerade erst perl für mich entdeckt und finde es auch toll, nur leider komme ich schon jetzt nicht mehr weiter:Ich habe eine Datei mit vielen Spalten, nun möchte ich innerhalb einer Spalte zwei aufeinanderfolgende Werte addieren und in eine neue spalte schreiben. Wie kann ich das denn machen??? Hier mal ein Beispiel: input: a b c 1 3 2 5 6 5 7 9 1 9 4 8 ... output: a b c d 1 3 2 6(1+5) 5 6 5 13(5+7) 7 9 1 16(7+9) 9 4 8 ... ... vielen Dank anne
Datum: 30.07.2009-08:35

|
re: innerhalb von spalten rechnen
|
Seitenanfang |
so ungefähr sollte es gehen:#!/usr/bin/perl use strict; use warnings; use Tie::File; # die ursprungsdatei my $file = 'spalten.txt'; # binde ein Array an die zeilen einer Datei # pro Zeile ein Element im Array tie my @lines, 'Tie::File', $file or die $!; # gehe die Zeilen durch for my $index ( 0 .. $#lines ) { # entferne den Zeilenumbruch (genauer: der Wert in $/ # siehe perldoc perlvar) chomp $lines[$index]; # ab der zweiten zeile werden die berechnungen gemacht if( $index > 0 and $lines[$index+1] ) { # splitte die zeile in einzelne teile - jeweils an # einem leerzeichen. das erste element ist die gesuchte # zahl my ($nr_current_line) = split /\s/, $lines[$index]; my ($nr_next_line) = split /\s/, $lines[$index+1]; # fuege die summe zu der Datei hinzu $lines[$index] .= "\t" . ( $nr_current_line + $nr_next_line ); } elsif ( $index == 0 ) { $lines[$index] .= "\td"; } # Ausgabe der Zeile print $lines[$index] . "\n"; } # loese die Bindung des Arrays mit den Zeilen # Aenderungen werden in die Datei geschrieben untie @lines;
Datum: 30.07.2009-09:29

|
re: innerhalb von spalten rechnen
|
Seitenanfang |
danke, das läuft... und danke auch für die ausführlichen kommentare, die machens einem echt leichter alles zu verstehen. ich habe aber noch eine kleine frage:ich möchte diese berechnungen nicht nur für die erste spalte ausführen, sondern für beliebige. wo sag ich dem skript denn das? anne
Datum: 31.07.2009-10:09

|
re: innerhalb von spalten rechnen
|
Seitenanfang |
Dann mach aus my ($nr_current_line) = split /\s/, $lines[$index]; my ($nr_next_line) = split /\s/, $lines[$index+1]; einfach # lege spalte fest, fuer die die Rechnung # durchgefuehrt werden soll. beachte: zaehlung # beginnt bei "0" ( 0 => 1. Spalte, 1 => 2. Spalte, ...) my $spaltennr = 0; my @current_line = split /\s/, $lines[$index]; my @next_line = split /\s/, $lines[$index+1]; my $nr_current_line = $next_line[ $spaltennr ]; my $nr_next_line = $next_line[ $spaltennr ];
Datum: 31.07.2009-11:26

|
re: innerhalb von spalten rechnen
|
Seitenanfang |
| danke, das läuft... und es ist so einfach... toll und ich mach mir so viele gedanken anne ps. ich glaub in der vorletzten zeile muss aber das "next" durch "current" ersetzt werden, oder?
Datum: 31.07.2009-11:52

|
re: innerhalb von spalten rechnen
|
Seitenanfang |
> ps. ich glaub in der vorletzten zeile muss > aber das "next" durch "current" ersetzt > werden, oder?Äh, ja natürlich. Sorry.
Datum: 31.07.2009-13:21

|