perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




11.02.2012 / 23:19

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitraginnerhalb 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-