myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Brauche Hilfe mit Perl (https://mygully.com/showthread.php?t=3484977)

The_Horse 25.10.14 09:16

Brauche Hilfe mit Perl
 
Hallo,

ich studiere germanistische Sprachwissenschaften und dieses Semester muss ich ein Seminar zum Programmieren für Sprachwissenschaftler besuchen. Nun bin ich eher der Bücherwurm als der Computernerd.
Jedenfalls folgende Frage:

Wie kann ich einen STDIN von beliebiger Länge in der Mitte teilen?

Also die eigentliche Frage ist, wie ich im Befehl split sozusagen "Mitte" hinkriege.
Ich hatte die Idee, Längen zu definieren und dann chop zu nutzen, aber das Problem bleibt das gleiche, da die Eingabe beliebig lang sein kann.

Weiß jemand mehr?

LG The_Horse

Lieferant 25.10.14 10:43

z.B. mit length die Länge ermitteln und mit substr auf die Teile des String zugreifen.

back69 29.10.14 08:04

Suchst du sowas?


#!/usr/bin/perl

use warnings;

while ( $line = <> ) {
chomp($line); # CR am Ende der Zeile entfernen
my @zeichen = split (//, $line);
my $anzahl_der_zeichen = scalar(@zeichen);

print "Es wurden $anzahl_der_zeichen gefunden\n";

for (my $i = 0; $i < $anzahl_der_zeichen / 2; $i++) {
print "$zeichen[$i]";
}
print "\n";
}

pfefferschnitzel 01.11.14 10:52

Vorwort: damit auch Strings ungerader Länge verarbeitet werden können, wird in meiner Lösung einfach die Hälfte der String-Länge auf die nächste Ganzzahl aufgerundet. Ist also je nach Anwendungsfall nicht ganz sauber.

In Perl gibt es bekanntlich viele Wege, um etwas zu erreichen. Im Folgenden mittels regulärem Ausdruck und alternativ "unpack":

Code:

use POSIX; # für Aufrunden via ceil

my $string = "foobar123";
my $len = ceil(length($string)/2);

my @splitted_by_regex = $string =~ m/(.{1,$len})/g;
my @splitted_by_unpack = unpack("a$len a$len", $string);

use Data::Dumper;
print Dumper(\@splitted_by_regex);
print Dumper(\@splitted_by_unpack);

Ausgabe:
Code:

$VAR1 = [
          'fooba',
          'r123'
        ];
$VAR1 = [
          'fooba',
          'r123'
        ];



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.