Zeilenumbruch Probleme mit Array
Tux
- perl
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
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
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
und mit:
print DATEI 'pass'.chomp(@array[$count])."pass\n";
? :)
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.
print DATEI 'pass'.chomp($array[$count])."pass\n";
sorry, /@/$/ :)
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";
}
foreach(@array) {
print DATEI 'pass'.chomp($_)."pass\n";
}
Das erzeugt bei mir folgenden output
pass1pass
pass1pass
pass1pass
pass1pass
:-(
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.
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?
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.
for(my $count = 0; $count < @array; $count++)
{
print DATEI 'pass'.chomp($array[$count])."pass\n";
}
mfG,
steckl
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
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 .....
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
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.
print OUT 'pass' .@array[$count] . 'pass' . "\n";
Natürlich:
print OUT "pass$_pass\n";
Struppi.