myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Brauche Hilfe mit Perl

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 25.10.14, 09:16   #1
The_Horse
Anfänger
 
Registriert seit: Jun 2012
Beiträge: 6
Bedankt: 1
The_Horse ist noch neu hier! | 0 Respekt Punkte
Standard 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
The_Horse ist offline   Mit Zitat antworten
Ungelesen 25.10.14, 10:43   #2
Lieferant
Anfänger
 
Registriert seit: Oct 2010
Beiträge: 27
Bedankt: 13
Lieferant gewöhnt sich langsam dran | 49 Respekt Punkte
Standard

z.B. mit length die Länge ermitteln und mit substr auf die Teile des String zugreifen.
Lieferant ist offline   Mit Zitat antworten
Ungelesen 29.10.14, 08:04   #3
back69
Hoffnungsloser Fall
 
Registriert seit: Sep 2013
Ort: 48151 Münster
Beiträge: 132
Bedankt: 106
back69 wird langsam von ratten respektiert | 218 Respekt Punkteback69 wird langsam von ratten respektiert | 218 Respekt Punkteback69 wird langsam von ratten respektiert | 218 Respekt Punkte
Standard

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";
}
back69 ist offline   Mit Zitat antworten
Ungelesen 01.11.14, 10:52   #4
pfefferschnitzel
Anfänger
 
Registriert seit: Jul 2014
Beiträge: 3
Bedankt: 0
pfefferschnitzel ist noch neu hier! | 3 Respekt Punkte
Standard

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'
        ];
pfefferschnitzel ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.


Sitemap

().