Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Perl] -  Array in Perl verstehen
#1
Lightbulb 
In einem Perl-Skript ist @ING eine Array-Variable. Diese Variable kann mehrere Werte aufnehmen und speichern. Arrays werden in Perl durch ein vorangestelltes '@'-Zeichen gekennzeichnet.

Deklaration eines leeren Arrays:
Code:
my @ING;

Zuweisen von Werten zu einem Array:
Code:
@ING = (1, 2, 3, 4, 5);

Zugriff auf Elemente eines Arrays:
Code:
print $ING[0];  # Gibt das erste Element des Arrays aus
print $ING[1];  # Gibt das zweite Element des Arrays aus

Hinzufügen eines Elements zu einem Array:
Code:
push @ING, 6;  # Fügt das Element 6 am Ende des Arrays hinzu

Iteration über die Elemente eines Arrays:
Code:
foreach my $element (@ING) {
    print "$element\n";
}

In diesem Fall ist @ING einfach eine Variable, die als Array verwendet wird. Der Name @ING könnte beliebig sein und wurde in Ihrem Skript wahrscheinlich entsprechend verwendet, um bestimmte Daten zu speichern oder zu verarbeiten.



Um ein bestimmtes Element aus einem Array in Perl anzusprechen, verwenden Sie den Index dieses Elements in eckigen Klammern nach dem Arraynamen. Hier sind einige Beispiele:

Code:
my @array = ('a', 'b', 'c', 'd', 'e');

Das erste Element des Arrays (Index 0) ansprechen und ausgeben
Code:
print $array[0];  # Ausgabe: 'a'

Das dritte Element des Arrays (Index 2) ansprechen und ausgeben
Code:
print $array[2];  # Ausgabe: 'c'

Das letzte Element des Arrays ansprechen und ausgeben
Code:
print $array[-1]; # Ausgabe: 'e'

Sie können auf ein Element in einem Array zugreifen, indem Sie den Index des Elements in eckigen Klammern nach dem Arraynamen angeben. Beachten Sie, dass die Indizierung in Perl bei 0 beginnt, sodass das erste Element des Arrays den Index 0 hat, das zweite den Index 1 usw. Sie können auch negative Indizes verwenden, um von hinten zu zählen, wobei -1 das letzte Element des Arrays ist, -2 das vorletzte usw.



Um das dritte Element aus dem Array @ING zu entfernen, können Sie die splice-Funktion verwenden. Hier ist, wie Sie das machen können:

Code:
my @ING = (1, 2, 3, 4, 5);

# Das dritte Element entfernen
splice(@ING, 2, 1);

# Ausgabe des Arrays nach Entfernen des dritten Elements
print "Array nach Entfernen des dritten Elements: @ING\n";

Die splice-Funktion wird verwendet, um Elemente aus einem Array zu entfernen und/oder neue Elemente einzufügen. In diesem Fall entfernen wir 1 Element aus dem Array @ING ab dem Index 2 (0-basiert, das dritte Element) mit splice(@ING, 2, 1).



Um den Namen 'Detlef' aus dem Array @ING zu entfernen, können Sie die grep-Funktion verwenden, um alle Elemente außer 'Detlef' zu behalten. Hier ist, wie Sie das machen können:

Code:
my @ING = ('Herbert', 'Werner', 'Detlef', 'Hans');
my $zu_entfernender_name = 'Detlef';

# Nur die Namen behalten, die nicht 'Detlef' sind
@ING = grep { $_ ne $zu_entfernender_name } @ING;

# Ausgabe des Arrays nach Entfernen des Namens 'Detlef'
print "Array nach Entfernen des Namens 'Detlef': @ING\n";

In diesem Beispiel verwenden wir grep, um alle Elemente des Arrays @ING beizubehalten, die nicht 'Detlef' sind. Das Ergebnis wird dann zurück in das Array @ING gespeichert. Nach diesem Vorgang wird 'Detlef' aus dem Array entfernt sein.



Hier ist die Verwendung der splice-Funktion, um den Namen 'Detlef' aus dem Array @ING zu entfernen:

Code:
my @ING = ('Herbert', 'Werner', 'Detlef', 'Hans');
my $zu_entfernender_name = 'Detlef';

# Index des zu entfernenden Namens ermitteln
my $index = -1;
for my $i (0 .. $#ING) {
    if ($ING[$i] eq $zu_entfernender_name) {
        $index = $i;
        last;
    }
}

# Element aus dem Array entfernen, falls es gefunden wurde
if ($index >= 0) {
    splice(@ING, $index, 1);
}

# Ausgabe des Arrays nach Entfernen des Namens 'Detlef'
print "Array nach Entfernen des Namens 'Detlef': @ING\n";

In diesem Beispiel wird der Index des Namens 'Detlef' im Array @ING ermittelt, und dann wird die splice-Funktion verwendet, um das Element an diesem Index zu entfernen. Wenn der Name nicht im Array gefunden wird, wird nichts entfernt. Dieser Ansatz ermöglicht es Ihnen, gezielt ein bestimmtes Element aus dem Array zu entfernen.

In der splice-Funktion gibt der dritte Parameter die Anzahl der Elemente an, die ab dem angegebenen Index aus dem Array entfernt werden sollen.

Also bedeutet splice(@ING, $index, 1);, dass ab dem Index $index im Array @ING genau ein Element entfernt wird.

In diesem Fall, wo wir den Namen 'Detlef' entfernen wollen, setzen wir den dritten Parameter auf 1, da wir nur ein Element entfernen wollen, das genau dem zu entfernenden Namen entspricht. Wenn Sie mehrere Elemente an dieser Position entfernen möchten, können Sie den dritten Parameter entsprechend anpassen.



Sie können dies mit Perl relativ einfach erreichen, indem Sie die Datei öffnen, die letzte Zeile lesen und prüfen, ob sie leer ist. Wenn die letzte Zeile nicht leer ist, fügen Sie eine leere Zeile hinzu.

Code:
# Dateiname
my $dateiname = "pfad/zur/datei.txt";

# Datei öffnen (nur zum Lesen)
open(my $datei, '<', $dateiname) or die "Kann Datei nicht öffnen: $!";

# Alle Zeilen in ein Array einlesen
my @zeilen = <$datei>;

# Schließen der Datei
close($datei);

# Prüfen, ob die letzte Zeile leer ist
if ($zeilen[-1] !~ /\S/) {  # Wenn die letzte Zeile leer ist (keine nicht-Whitespace-Zeichen)
    print "Die letzte Zeile ist leer.\n";
} else {
    # Fügen Sie eine leere Zeile am Ende hinzu
    push @zeilen, "\n";
    print "Eine leere Zeile wurde hinzugefügt.\n";
}

# Datei zum Schreiben öffnen
open($datei, '>', $dateiname) or die "Kann Datei nicht öffnen: $!";

# Schreiben Sie die aktualisierten Zeilen zurück in die Datei
print $datei @zeilen;

# Schließen der Datei
close($datei);

In diesem Skript lesen wir die Datei Zeile für Zeile ein und speichern sie in einem Array @zeilen. Dann überprüfen wir, ob die letzte Zeile leer ist, und fügen eine leere Zeile hinzu, wenn dies nicht der Fall ist. Schließlich schreiben wir die aktualisierten Zeilen zurück in die Datei.
Zitieren Return to top


Nachrichten in diesem Thema
Array in Perl verstehen - von Joopi - 06-04-2024, 07:29

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste