Announcement

Collapse
No announcement yet.

Stringersetzung in einer Datei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stringersetzung in einer Datei

    Hallo liebe Perl-Experte,
    ich habe ein Problem, das eigentlich nicht so schwer sein soll, aber ich komme irgendwie nicht auf die Lösung

    Muss automatisch Fragen generieren.

    Ich habe ein array von den Elementen,die ich aus der Datenbank ausgelesen habe. Dann lese ich eine Datei ein und schaue wenn der bestimmte String vorkommt, muss dieser mit jedem Element aus dem array ersetzt werden.
    #!/usr/bin/perl
    #beispiel-array
    my @array_new=("123","456","789");
    open(IN, "<datei.txt") or die $!;
    #einlesen des Inhalts meiner datei in ein array
    while(<IN>)
    {
    my $zeile=$_;
    push(@array_dat,$_);
    }


    foreach my $elem(@array_dat)
    {

    foreach $elem_new(@array_new)
    {
    $elem=~s/MED/$elem_new/;

    print $elem."\n";
    }

    }

    Der Inhalt meiner Datei ist so(ein kleiner Auszug):

    Auf welche Anzeichen muss ich bei der MED-Therapie achten?
    Bei welchen Störungen werden MED im allgemeinen verschrieben?
    Bekommt man bei einer KRA immer einen MED?
    Bessern sich KRA, wenn man MED einnimmt?

    Ich bekomme den folgenden Output:

    Auf welche Anzeichen muss ich bei der 123-Therapie achten?

    Auf welche Anzeichen muss ich bei der 123-Therapie achten?

    Auf welche Anzeichen muss ich bei der 123-Therapie achten?

    Bei welchen St÷rungen werden 123 im allgemeinen verschrieben?

    Bei welchen St÷rungen werden 123 im allgemeinen verschrieben?

    Bei welchen St÷rungen werden 123 im allgemeinen verschrieben?

    Bekommt man bei einer KRA immer einen 123?

    Bekommt man bei einer KRA immer einen 123?

    Bekommt man bei einer KRA immer einen 123?

    Bessern sich KRA, wenn man 123 einnimmt?

    Bessern sich KRA, wenn man 123 einnimmt?

    Bessern sich KRA, wenn man 123 einnimmt?

    Warum wird nur das erste element von dem array_new genommen und was sollte ich tun, damit es korrekter Output generiert wird.

    Vielen Dank für Ihre Ratschläge im Voraus.

    Gruss,
    Lilia

  • #2
    Wozu

    my $zeile=$_;
    push(@array_dat,$_);

    $zeile, wenn du doch $_ benutzt?


    Warum wird nur das erste element von dem array_new genommen
    Woher weißt du das?
    Es wird nicht nur das erste genommen!

    Schau dir dein Programm an; du hast ein logisches Problem:

    Mit dem String

    "Auf welche Anzeichen muss ich bei der MED-Therapie achten?"

    beginnst du die erste Schleife. Nunmehr erfolgt mit "123" die erste Prüfung in der zweiten Schleife. Diese führt mit dem ~s/ zum Suchen und Ersetzen vom MED nach 123. Der String mit der vorgenommenen Ersetzung wird ausgegeben.

    Der zweite Durchlauf prüft nun den schon "geänderten String" zu "456". Es ist nichts zu ersetzen. Er wird nochmal ausgegeben.

    Der dritte Durchlauf prüft nun den schon "geänderten String" zu "789". Es ist nichts zu ersetzen. Er wird nochmal ausgegeben.

    Was du als "korrekten Output" haben willst, hast du ja nicht gesagt.
    Vermutlich willst du erstmal prüfen, ob es zu einer Ersetzung kommt und dann ersetzen und die innere Schleife abbrechen.
    Christian

    Comment


    • #3
      Hallo Christian,
      vielen Dank für die schnelle Antwort und Deine Hinweise!
      Aber was sollte ich denn tun, damit die Ersetzung doch für jedes Element passiert? Ich habe probiert den ersetzten String in einer anderen Variable abzuspeichern, hat aber auch nicht funktioniert.

      Originally posted by Christian Marquardt View Post
      Wozu

      my $zeile=$_;
      push(@array_dat,$_);

      $zeile, wenn du doch $_ benutzt?

      Ich habe es gemacht,damit es sicher ein array ist und damit ich mit foreach-schleifen arbeiten könnte, weil der gewünschte Output folgendermassen aussehen sollte : für jeden Satz aus array_dat und für jedes Element aus dem array_new muss eine Frage generiert werden:

      Auf welche Anzeichen muss ich bei der 123-Therapie achten?

      Auf welche Anzeichen muss ich bei der 456-Therapie achten?

      Auf welche Anzeichen muss ich bei der 789-Therapie achten?

      Viele Grüsse
      Lilia

      Comment


      • #4
        Aber was sollte ich denn tun, damit die Ersetzung doch für jedes Element passiert?
        ????

        Verstehe ich logisch nicht:

        Auf welche Anzeichen muss ich bei der MED-Therapie achten?

        kann im ersten Durchlauf nur zu

        Auf welche Anzeichen muss ich bei der 123-Therapie achten?

        Dann ist MED weg....

        Was sollte rauskommen??
        Christian

        Comment

        Working...
        X