Siechfred: perl und txts

Beitrag lesen

Tag Bluesky.

ich habe ein keyword auf das er reagieren soll. das tut er auch, die keywordliste ist ne txt datei, da steht dann computer = 1 zum beispiel

Also so:
--- Auszug aus keywords.txt ---
computer=1

wenn ich jetzt die antwort aus der antwort txt datei mit z.B. 1= Schmeiß deinen Computer aus dem fenster haben will wie zum Teufel geht das...

Also so:
--- Auszug aus antwort.txt ---
1=Schmeiß deinen Computer aus dem Fenster

Richtig verstanden?

Er muss also computer finden, das hab ich mit $ausdruck = quotemeta($ausdruck); gemacht

Was willst du hier mit quotemeta? Du öffnest die Textdatei keywords.txt und liest die dort gegebenen Werte ein, z.B. in einen Hash:

Keywords einlesen

Für das Beispiel ergäbe sich folgender Hash-Eintrag

$keywords{'computer'} = '1'

my %keywords;
open(KEYWORDS, "<keywords.txt") || die $!;
while(<KEYWORDS>) {
  chomp($_);
  my($key,$val) = split(/=/,$_);
  $keyword{$key} = $val;
}
close KEYWORDS;

Antworten einlesen

Für das Beispiel ergäbe sich folgender Hash-Eintrag

$answers{'1'} = 'Schmeiß den Computer aus dem Fenster'

my %answers;
open(ANTWORT, "<antwort.txt") || die $!;
while(<ANTWORT>) {
  chomp($_);
  my($key,$val) = split(/=/,$_);
  $answers{$key} = $val;
}
close ANTWORT;

Hashes zusammenführen

Durchgehen des keywords-Hashes

while ( my ($key,$val) = each(%keywords) {
  # Pruefen, ob zum Wert eines Hashes ein
  # Eintrag im answers-Hash existiert
  # Falls ja, wird dem Wert des keywords-Hashes
  # der Wert des answers-Hashes zugewiesen
  if( exists($answers{$val}) ) {
    $keywords{$key} = $answers{$val};
  }
}

print $keywords{'computer'};

Liefert die Ausgabe »Schmeiß den Computer aus dem Fenster«.

Ich habe das jetzt so runtergetippt, Fehler vorbehalten. Aber das Prinzip sollte klar sein, oder?

Siechfred

--
»Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«