Datei möglichst einfach in ein Skalar lesen
speedy
- perl
Hallo Forum,
ich habe da eine Textdatei mit mehreren Zeilenümbrüchen. Nun kann ich diese mit @datei=<DATEIHANDLE> schön einfach ein eine Liste einlesen. Mit $datei=<DATEIHANDLE> wird nur die erste Zeile eingelesen. Gibt es eine Möglichkeit die Datei möglichst simpel in einen String einzulesen?
Dankeschön
speedy
Hi speedy!
Vielleicht so (allerdings nicht in einem Schritt):
#datei in liste lesen
@datei=<DATEIHANDLE>
#liste in string wandeln, einzelne listenelemente mit leerzeichen getrennt
$datei_str=join(" ",@datei);
#nun noch ggf. die \n entfernen
$datei =~ s/\n//g;
Gruß Frank
Hi speedy!
Hi frank!
oder vielleicht so:
while(!eof(FP)){$daten.=<FP>;}
$daten=~ s/\n/ /g; #zeilenumbruch mit space ersetzen
Gruß
Thomas
Hi Ihr alle,
while(!eof(FP)){$daten.=<FP>;}
$daten=~ s/\n/ /g; #zeilenumbruch mit space ersetzen
Ja, das gefällt mir. Vielen Dank an euch alle, hat mir sehr geholfen.
<persönlich>Hi ThomasP, Grüsse an Frau und "Kinder"</persönlich>
CU
speedy
Hallo speedy
Gibt es eine Möglichkeit die Datei möglichst simpel in einen
»»String einzulesen?
zwei Vorschläge:
1 - mit dem Modul File::Slurp (cooler Name, finde ich...)
use File::Slurp;
$datei = read_file($dateiname);
2 -
{
local $/ = undef;
$datei = <FILEHANDLE>;
}
diese Möglichkeit nur innerhalb eines Blockes verwenden, da sie an $/ rumschraubt.
Viele Grüsse,
Thorsten
Moin!
1 - mit dem Modul File::Slurp (cooler Name, finde ich...)
use File::Slurp;
$datei = read_file($dateiname);
Ineffizient! Das Modul tut naemlich auch nichts anderes als das, was Frank vorgeschlagen hat, wie ein kurzer Blick in den Source-Code zeigt.
Ausserdem ist es kein Standardmodul, man kann sich auf seine Verfuegbarkeit also nicht verlassen. Nuin gut, man koennte es natuerlich einfach mitliefern.
2 -
{
local $/ = undef;
$datei = <FILEHANDLE>;
}
Das ist die effizienteste und zu bevorzugende Methode. Hier werden naemlich nicht erst muehsam die Zeilen getrennt, die danach sowieso nur wieder mit join() zusammengefuegt werden.
So lange, Calocybe