Tux: Zeilenumbruch Probleme mit Array

Ich lese über einen Systemaufruf ein Text File ein

@array = 'cat textfile'; #Das Einlesen in dieser Form muss leider so sein

In dem Textfile steht in jeder Zeile ein string:

user1
user2
user3
user4

Nun will ich jeden String in dem Array um einen weiteren String ergänzen und in ein neues Textfile schreiben.

open (DATEI, ">file") or die $!;
      foreach (@array){
      print DATEI 'pass' .@array[$count] . 'pass';
      $count++;
      }
      close (DATEI);

Die neue Textdatei sollte nun folgenden Inhalt besitzen:

passuser1pass
passuser2pass
passuser3pass
passuser4pass

Leider sieht sie aber so aus:

passuser1
pass
passuser2
pass
passuser3
pass
passuser4
pass

Ich bin für jeden Lösungsvorschlag dankbar

  1. hi,

    @array = 'cat textfile'; #Das Einlesen in dieser Form muss leider so sein

    aus welchem grund muss das so sein?

    Nun will ich jeden String in dem Array um einen weiteren String ergänzen und in ein neues Textfile schreiben.

    versuchs mal so:

    open (DATEI, ">file") or die $!;
          foreach (@array){

    @array[$count] =~ s/\n//;

    print DATEI 'pass' .@array[$count] . "pass\n";
          $count++;
          }
          close (DATEI);

    mfG,
    steckl

    1. Nun will ich jeden String in dem Array um einen weiteren String ergänzen und in ein neues Textfile schreiben.
      versuchs mal so:
      open (DATEI, ">file") or die $!;
            foreach (@array){
      @array[$count] =~ s/\n//;
            print DATEI 'pass' .@array[$count] . "pass\n";
            $count++;
            }
            close (DATEI);

      Ich habs gerade damit versucht, aber leider funktioniert es nicht

      1. und mit:

        print DATEI 'pass'.chomp(@array[$count])."pass\n";

        ? :)

        1. und mit:

          print DATEI 'pass'.chomp(@array[$count])."pass\n";

          ? :)

          Der Zeilenumbruch funktioniert zwar mit chomp, allerdings wird die Variable @array nicht mehr richtig aufgelöst.

          1. print DATEI 'pass'.chomp($array[$count])."pass\n";

            sorry, /@/$/ :)

            1. print DATEI 'pass'.chomp($array[$count])."pass\n";

              wobei ich das:
                    foreach (@array){
                    print DATEI 'pass' .@array[$count] . 'pass';
                    $count++;
                    }

              eher so machen würde:

              foreach(@array) {
               print DATEI 'pass'.chomp($_)."pass\n";
              }

              1. foreach(@array) {
                print DATEI 'pass'.chomp($_)."pass\n";
                }

                Das erzeugt bei mir folgenden output

                pass1pass
                pass1pass
                pass1pass
                pass1pass

                :-(

                1. foreach(@array) {
                  print DATEI 'pass'.chomp($_)."pass\n";
                  }

                  Das erzeugt bei mir folgenden output

                  pass1pass
                  pass1pass
                  pass1pass
                  pass1pass

                  Ja weil chomp die Anzahl der entfernten Zeichen zurück gibt, was ist an meinem Vorschlag nicht i.O.?

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Ja weil chomp die Anzahl der entfernten Zeichen zurück gibt, was ist an meinem Vorschlag nicht i.O.?

                    Struppi.

                    my $file_in = 'file1_in';
                    my $file_out= 'file1_out';

                    open IN, $file_in || die "Fehler beim öffnen von $file_in: $!";
                    open OUT, $file_out || die "Fehler beim öffnen von $file_out: $!";
                    while(<IN>
                    {
                    chomp $_;
                    print OUT 'pass' .@array[$count] . 'pass' . "\n";
                    }
                    close OUT;
                    close IN;

                    Du verwendest open um das File einzulesen, leider kann ich die Daten nur mit einem Systemaufruf bekommen. Der Aufruf besteht aus einer sed un awk kombination.

                    Geht deine Lösung auch ohne open?

                    1. my $file_in = 'file1_in';
                      my $file_out= 'file1_out';

                      open IN, $file_in || die "Fehler beim öffnen von $file_in: $!";
                      open OUT, $file_out || die "Fehler beim öffnen von $file_out: $!";
                      while(<IN>
                      {
                      chomp $_;
                      print OUT 'pass' .@array[$count] . 'pass' . "\n";

                      Das war falsch.

                      print OUT "pass$_pass\n";

                      }
                      close OUT;
                      close IN;

                      Du verwendest open um das File einzulesen, leider kann ich die Daten nur mit einem Systemaufruf bekommen. Der Aufruf besteht aus einer sed un awk kombination.

                      ich kenn mich zwar nicht mit den Liunxwerkzeugen aus kann mir aber auch hier nicht vorstellen, dass Perl nicht die entsprechenden Möglichkeiten hat.

                      Aber du kannst natürlich Problemlos die Schleifen in eine foreach(..) Schleife über alle Zeilen umbauen.

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                2.   
                  for(my $count = 0; $count < @array; $count++)  
                  {  
                      print DATEI 'pass'.chomp($array[$count])."pass\n";  
                  }  
                  
                  

                  mfG,
                  steckl

                  1. sry, hatte noch nen fehler. aber jetz:

                    for(my $count = 0; $count < @array; $count++)
                    {

                    chomp($array[$count]);

                    print DATEI 'pass'. $array[$count] ."pass\n";
                    }

                    mfG,  
                    steckl
                    
                    1. sry, hatte noch nen fehler. aber jetz:

                      for(my $count = 0; $count < @array; $count++)
                      {
                             chomp($array[$count]);
                          print DATEI 'pass'. $array[$count] ."pass\n";
                      }

                        
                      Das wars leider auch nicht, ich glaub ich geb auf .....
                      
      2. Nun will ich jeden String in dem Array um einen weiteren String ergänzen und in ein neues Textfile schreiben.
        versuchs mal so:
        open (DATEI, ">file") or die $!;
              foreach (@array){
        @array[$count] =~ s/\n//;
              print DATEI 'pass' .@array[$count] . "pass\n";
              $count++;
              }
              close (DATEI);

        Ich habs gerade damit versucht, aber leider funktioniert es nicht

        siehts immer noch genauso wie vorher aus? wenn du unter windows arbeitest kann es sein, dass du
        @array[$count] =~ s/\012|\015//g;
        schreiben musst.

        sg, steckl

  2. Ich lese über einen Systemaufruf ein Text File ein

    @array = 'cat textfile'; #Das Einlesen in dieser Form muss leider so sein

    Wenn du meinst.

    In dem Textfile steht in jeder Zeile ein string:

    user1
    user2
    user3
    user4

    Wieso du das nciht mit Bordmitteln lesen kannst ist mir ein Rätsel.

    passuser1
    pass

    Wenn du die Zeilenumbrüche nicht entfernst ist das logisch.

    Probier mal:

      
    my $file_in = 'file1_in';  
    my $file_out= 'file1_out';  
      
    open IN, $file_in || die "Fehler beim öffnen von $file_in: $!";  
    open OUT, $file_out || die "Fehler beim öffnen von $file_out: $!";  
    while(<IN>  
    {  
    chomp $_;  
    print OUT 'pass' .@array[$count] . 'pass' . "\n";  
    }  
    close OUT;  
    close IN;  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. print OUT 'pass' .@array[$count] . 'pass' . "\n";

      Natürlich:
      print OUT "pass$_pass\n";

      Struppi.

      --
      Javascript ist toll (Perl auch!)